1.使用反射写代码的概率可能比较少,但是如果有需求需要实现一个框架,或者是为了自身阅读源码,就会大量的需要是使用反射;
2.背景:方法区中的类,方法,成员变量无法直接获得;但是可以通过提供的Class类,得到所需要的方法,属性,构造器等。(可以将Class类比作一面镜子,可以用于将方法区中的方法成员变量,构造器等反射出去,以便我们使用;类似于反射的作用)
3.类加载的过程:1、将字节码文件加载到方法区中、2生成一个Class实例对象;(每个类的class实例对象都不一样)
4.Class类源码的大致内容: registerNative()方法,注册本地方法,由于java是跨平台的,使用此方法就会将本地方法注册到实例对象中以便调用;
forName()可以获取一个Class对象,可以填写一个class的全限定名称
newInstance()成员方法,可以返回一个实例对象;
isInstance()是否是一个实例对象
isInterface()是否是一个接口
isArray()
getName()
getClassLoader()
getSuperclass()
getPackage()
getInterface() 这些常见的 方法大部分是通过调用本地方法实现的
toClass()
getDeclaringClass()
getSimpleName()
getClasses()
getFields() 拿到所有的成员变量
getConstructors()拿到构造器