反射
介绍
- 运行时动态的获取类并进行操作
类对象
介绍
- 反射的核心类Class,表示类的元信息
获取类对象
Class Object.class |
获取Object类的Class对象 |
Class Class.forName(className) |
根据全限定类名获取Class对象 |
Class object.getClass() |
Object类的方法,获取实例化对象的Class对象 |
方法
类信息方法
方法名 | 描述 |
---|---|
String getName() |
获取全限定类名 |
String getTypeName() |
获取类名,支持泛型 |
String getSimpleName() |
获取类名 |
boolean isInterface() |
是否是接口 |
boolean isArray() |
是否是数组 |
boolean isInstance(object) |
object是否是此类或其子类的实例 |
boolean isAssignableFrom(class) |
class是否是此类或其子类和实现 |
Class<?> getSuperClass() |
获取父类 |
Class<?>[] getInterfaces() |
获取所有实现类 |
ClassLoader getClassLoader() |
获取类加载器 |
Class<?> getComponentType() |
获取数组的元素类型 |
获取构造器对象
方法名 | 描述 |
---|---|
Constractor<?> getConstructor(argsClass) |
获取指定参数对象的公共构造器对象 |
Constractor<?> getDeclaredConstructor(argsClass) |
获取指定参数对象的构造器对象 |
Constractor<?>[] getConstructors() |
获取所有公共构造器对象 |
Constractor<?>[] getDeclaredConstructors() |
获取所有构造器对象 |
获取方法对象
方法名 | 描述 |
---|---|
Method getMethod(methodName,[argsClass]) |
根据方法名获取单个公共方法对象 |
Method getDeclaredMethod(methodName,[argsClass]) |
根据方法名获取单个方法对象 |
Method[] getMethods() |
根据方法名获取所有公共方法对象 |
Method[] getDeclaredMethods() |
根据方法名获取所有方法对象 |
获取字段对象
方法名 | 描述 |
---|---|
Field getField(fieldName) |
根据字段名获取单个公共字段对象 |
Field getDeclaredField(fieldName) |
根据字段名获取单个字段对象 |
Field[] getFields(fieldName) |
根据字段名获取所有公共字段对象 |
Field[] getDeclaredFields(fieldName) |
根据字段名获取所有字段对象 |
构造器对象
介绍
- 通过构造器对象可以动态的创建一个对象实例
方法
方法名 | 描述 |
---|---|
Object newInstance([args]) |
构造一个对象实例 |
void setAccessible(boolean) |
是否跳过权限修饰符检查,即是否允许使用私有构造器 |
方法对象
介绍
- 通过方法对象可以动态的调用类的某个方法
方法
方法名 | 描述 |
---|---|
Object invoke(object,[args]) |
根据对象实例执行方法,静态方法object为null |
void setAccessible(boolean) |
是否跳过权限修饰符检查,即是否允许使用私有方法 |
字段对象
介绍
- 通过字段对象可以动态的获取或修改字段的值
方法
方法名 | 描述 |
---|---|
Object get(object) |
获取该字段对象在对象实例中的值 |
void set(object,value) |
设置该字段对象在对象实例中的值 |
void setAccessible(boolean) |
是否跳过权限修饰符检查,即是否允许操作私有字段 |
String getName() |
获取字段名 |
Class<?> getType() |
获取字段类型 |
Type getGenericType() |
获取泛型字段类型,不会自动解析 |
boolean isPrimitive() |
字段是否是基本数据类型 |
工具类
Array
介绍
- java.lang.reflect包
- 动态的操作数组
方法
方法 | 描述 |
---|---|
Object newInstance(Class,length) |
创建指定类型和长度的新数组 |
Object get(array,index) |
获取数组中指定索引的元素值 |
void set(array,index,value) |
设置数组中指定索引的元素值 |
int getLength(array) |
获取数组长度 |