Reflection
产生原因:运行时获取、修改数据(类信息、成员数据信息)。
反射入口 java.lang.Class
Class对象分为基本类型(8种)、引用类型:(具体内容在文章末尾)
JVM会为每个对象(基础和引用类型)实例化一个java.lang.Class实例。通过这个Class对象,可以在运行时访问对象的属性和类信息、也可以创建新的对象和类。反射的实现,首先要获取Class实例。
获取Class实例的方法:
- Object.getClass();
Class class = object.getClass();
枚举类型的对象获取的是枚举类的Class,数组对象获取的是数组元素的Class。
- .class
Objcet.class;
int.class.newInstance()
- Class.forName().
只能用于引用类型,需要类的完整路径:如java.lang.String
Class<?> class = Class.forName("java.lang.String");
- static属性TYPE
Class<String> class = String.TYPE;
TYPE的定义:public static final Class<String> TYPE = (Class<String>) String[].class.getComponentType();
获取相关类的Class对象:
- 父类 getSuperclass()
- 公共类、接口、枚举等 getClasses()
- 显示申明的所有类、接口、枚举 getDeclaredClasses()
- 成员声明类 getDeclaringClasses()