了解Java程序在计算机的三个阶段,就能更好的理解反射,为什么称之为"反射"呢?因为堆内存中的class对象,包含了类的完整结构信息,那我们通过这个class对象,就能实例化这个类,所以这个class对象就像是一面镜子,我们形象的称之为反射。
Java反射机制原理示意图
我们可以看到,Java程序在计算机中历经三个阶段,分别是编译阶段、Class类对象阶段和Runtime运行阶段,我们分别看一下
1)编译阶段:
刚写的程序我们称之为源代码,经过Java自带的编译器Javac编译之后,会生成.class文件,注意此时还是在硬盘上。
2)Class类对象阶段
由ClassLoder类加载器将.class文件从硬盘加载到队内存中,并在堆内存中生成Class类对象这个阶段我们称之为Class类对象阶段。注意:这个Class类对象中包含了类的完整结构信息,成员变量、成员方法、构造方法都包含,相当于是该类的一面镜子。
补充:获取Class类对象的方法
1、Class.forName(fullClassPath) // 将字节码文件加载进内存,返回class对象
2、类名.class // 通过类名获取class
3、对象.getclass()// 通过对象获取class
3)Runtime运行阶段
运行阶段就是Class类对象经过反射进行了实例化,然后通过对象去调用方法什么的。
通过Class对象实例化的方式:
Object o = clazz.getDeclaredConstructor().newInstance() // 通过构造器实例化
Object o = cls.newInstance(); // 通过Class类对象实例化