反射机制
反射机制简介
Java的反射机制是将组成类的名称,方法,属性等封装成其他对象。程序员可以利用这个封装的对象来进行一系列操作。
通俗来讲,就是不用new来创建对象。
反射机制可以使程序在运行时动态地获取类的属性、方法、构造方法等信息,并且可以实例化对象、调用方法、设置属性等操作。
反射机制原理
要了解反射机制,我们还得复习一下刚开始学习java的一些知识。
类的三个阶段
类的源代码阶段
我们通过编写代码来定义一些属性和方法来组成一个类,也就是.java为后缀的文件。
在经过javac命令后,编译成了字节码文件
类加载器阶段
Java虚拟机把描述类的数据从字节码文件加载到内存,并生成一个对应的Class对象。Class对象包含了该类的所有信息,可以通过该对象来获取该类的属性、方法和构造器等信息。
我们只需要理解下图就可:
在反射的学习中,我们一般只会用Class对象里的这几个属性。
Runtime(运行时)阶段
这个是我们最容易理解的阶段,一般就是通过new将类进行实例化
三个阶段连起来就是这样:
这三个阶段分别对应三种获取三种获取Class对象的方法,也就是说Class对象是反射机制的重要支撑,这个在下篇再详述。
机制原理
Java中有句名言,“万物皆为对象,万物皆可封装”,其实我们创建的类(也就是将要被反射的类)也属于一种对象,也就是对应的Class类对象。
我们可以通过Class类对象里的方法:获取被反射类的信息,如类名、父类、接口、属性、方法、构造器等。
而通过Class类对象里获取到的构造器,属性,方法等也是对象,我们可以通过这些对象来执行被反射的类的构造器,属性和方法,并进行操作。
机制优势
在运行时,程序可以根据需要动态地加载类,而不需要在编译期间就确定所有的类和对象。因此,反射机制使得程序更加灵活和可扩展。但反射机制的使用也会带来一定的性能上的消耗和代码复杂度的提高。