反射的基本概念
首先区分两个概念:编译期和运行期。编译期指编译器将源代码编译生成机器码的过程,比如将java文件编译生成.class字节码文件;运行期是对编译后的可执行文件进行执行的过程。反射机制正是工作在运行期。
在程序运行期间,动态获取对象信息以及动态调用类的属性和方法的能力即为java的反射机制。
反射机制
java在运行时,始终为所有的对象维护一个运行时的类型标识,保存对象的基本信息。该类型标识也是一个类,即Class类。
我们知道根类Object有一个方法getClass,该方法即返回一个Class对象,也就是返回对象的类型标识信息。
获取Class对象的三种方式
方法一:类名.Class
1 | //Student是一个类 |
方法二:对象实例.getClass()
1 | Student xiaoming = new Student(); |
方法三:Class.forName()
1 | //参数为带包路径的字符串 |
Class类的API方法
类的三大属性:Field、Method、Constructor分别描述类的域、方法以及构造器。
对应的API(更多API参照API文档):
1 | getFields();返回类的public域(包含父类的public成员) |
访问类的私有成员
1 | //Student类有一个私有成员idNumber |
结果输出:
1 | print studnet's idNumber by reflect: 2008001 |
访问类的私有方法
1 | //Student类添加一个私有方法 |
结果输出:
1 | The new idNumber is: 1112008001 |