Java的反射
Java反射机制可以完成:
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时得到任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的成员变量和方法
- 生成动态代理
反射相关的主要类:
- Java.long.Class:代表一个类,Class对象表示某个类加载后在堆中的对象
- Java.lang.reflect.Method:代表类的方法
- Java.lang.reflect.Field:代表类的成员变量
- Java.lang.reflect.Constructor:代表类的构造方法
Class类对象不是new出来的,而是系统创建的。这里怎么理解呢,Class类是由loadClass()方法完成类加载,生成了某个类对应的Class类对象。
对于某个类的Class类对象,在内存中只有一份,因为类只加载一次。
在JDK1.9往上,不再使用newInstance()。还可以通过getField()获取到属性。
通过“反射”,我们可以将Java这种静态语言附加上动态特性,换句话说,就是反射机 制是Java实现动态语言的关键,也就是通过反射实现类动态加载。怎么理解呢,就是在运行时加载需要的类,如果 运行时不用该类,则不报错,降低了依赖性。
类加载三阶段:
- 加载阶段(Loading)
- 链接阶段(验证、准备、解析)
- 初始化阶段(initalization)