Java反射机制(Reflection):
是什么:反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息,并且能够操作任意对象的内部属性及其方法。很多Java的框架都是利用反射机制实现的。
能做什么:1 在运行期判断任意一个对象所属的类
2 在运行期构造任意一个类的对象
3 在运行期判断任意一个类具有的成员变量和方法
4 在运行期调用任意一个对象的成员变量和方法
5 在运行期生成动态代理
相关API:
java.long.Class:代表一个类,
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造方法
假设有这么一个学生类:
不使用反射生成类的实例并且调用方发法
你可能会纠结printf()方法是什么鬼:
如果使用反射机制:
以上设置的是 public 的成员变量,对于private 成员变量不适用
那么对于private 成员变量 使用反射机制设置:
顺便对public的属性name试一下这个方法可不可以,发现可以:
再来尝试调用方法:
可以发现method和invoke方法的参数永远是一样多的
java.lang.Class 是反射的源头:
通过编译(javac.exe),生成对应的 .class 文件,之后使用java.exe 加载(JVM的类加载器)此 .classw 文件家在道=到内存后,就是一个运行时类,存在于缓存区,那么这个运行时类本身就是一个Class的实例。
1.每个运行时类只加载一次
2.有了Class的实例后,才可以进行如下操作:
1)创建对应的运行时类
2)获取对应运行时内的完整结构(属性、方法、构造器、内部类、父类、所在的
、注解等等
3)调用对应运行时类的指定结构(属性、方法、构造器)
3)应用于动态代理