java反射就是用来在运行期对一个封装好或者他人编写的类做相关分析和操作的方法。
0X1 Class
在java运行时,系统所有的对象维护一个运行时的类型标标识,这信息保存着每个对象所属的类足迹。保存这些信息的类叫Class.
假如存在类:Person,可以通过以下方式获取到对应的Class.
m1:
Person per = new Person();
Class demo1 = per.getClass();
m2:
Class demo2 = Class.forName("Person");
m3:
Class demo3 = Person.class;
注:
以上的forName会排出已检查异常,需要做异常捕获。
demo.newInstance(),调用默认的构造器来创建一个实例。
Class类中的getName(),返回一个类的名字。
Class类中的getFields,getMethods,getConstructors返回类的public的域、方法和构造器的数组,其中包括超类的共有成员。
Class类中的getDeclareFields,getDeclareMethods和getDeclareConstructors分别返回类中的全部域,方法,构造器,不包含超类成员。
在操作类的私有成员是需要先将调用Field,Method,Constructor对应的setAccessible(true),将访问熟悉设置为true。
对于Field,可以调用get方法获取对应的值。
对于Method,可以通过invoke方法,调用函数,其中第一个参数为 对应的类构造器的一个实例。
其他内容待续......