通过Java反射机制,可以再程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改Java对象本身信息的功能。利用Class类的对象textFieldC,可以访问用来返回该对象的textField对象的描述信息,可以访问的主要描述信息如下:
组成部分 | 访问方法 | 返回值类型 | 说明 |
---|---|---|---|
包路径 | getPackage() | Package对象 | 获得该类的存放路径 |
类名称 | getName() | String对象 | 获得该类的名称 |
继承类 | getSuperclass() | Class对象 | 获得该类继承的类 |
实现接口 | getInterfaces() | Class型数组 | 获得该类实现的所有接口 |
构造方法 | getConstructors() | Constructor型数组 | 获得所有权限为public的构造方法 |
getConstructor(Class<?>...parameterTypes) | Constructor对象 | 获得权限为public的指定构造方法 | |
getDeclaredConstructors() | Constructor型数组 | 获得所有构造方法,按声明顺序返回 | |
getDeclaredConstructor(Class<?>...parameterTypes) | Constructor对象 | 获得指定的构造方法 | |
方法 | getMethods() | Method型数组 | 获得所有权限为public的方法 |
getMethod(String name,Class<?>...parameterTypes) | Method对象 | 获得权限为public的指定方法 | |
getDeclaredMethods() | Method型数组 | 获得所有方法,按声明顺序返回 | |
getDeclaredMethod(String name,Class<?>...parameterTypes) | Method对象 | 获得指定的方法 | |
成员变量 | getFields() | Field型数组 | 获得所有权限为public的成员变量 |
getFiled(String name) | Field对象 | 获得权限为public的指定成员变量 | |
getDeclaredFields() | Field型数组 | 获得所有成员变量,按声明顺序返回 | |
getDeclaredField(String name) | Field对象 | 获得指定的成员变量 | |
内部类 | getClasses() | Class型数组 | 获得所有权限为public的内部类 |
getDeclaredClasses() | Class型数组 | 获得所有内部类 | |
内部类的声明类 | getDeclaringClass() | Class对象 | 如果该类为内部类,则返回它的成员类,否则返回null |
1、访问构造方法
在通过下列一组方法访问构造方法时,将返回Constructor类型的对象或数组。每个Constructor对象代表一个构造方法,利用Constructor对象可以操纵对应的构造方法:
(1)getConstructors()
(2)getConstructor(Class<?>...parameterTypes)
(3)getDeclaredConstructors()
(4)getDeclaredConstructor(Class<?>...parameterTypes)
如果是访问指定的构造方法,需要根据该构造方法的入口参数的类型来访问。
Constructor类中提供的常用方法如下:
方法 | 说明 |
---|---|
isVarArgs() | 查看该构造方法是否允许带有可变数量的参数,如果允许则返回true |
getParmeterTypes() | 按照声明顺序以Class数组的形式获得该构造方法的各个参数的类型 |
getExceptionTypes() | 以Class数组的形式获得该构造方法可抛出的异常类型 |
newInstance(Object...initargs) | 通过该构造方法利用指定参数创建一个该类的对象,如果未设置参数则表示采用默认无参数的构造方法 |
setAccessible(boolean flag) | 如果该构造方法的权限为private,默认为不允许通过反射利用newInstance(Object...initargs)方法创建对象。如果先执行该方法,入口参数设置为 true,则允许创建 |
getModifiers() | 获得可以解析出该构造方法所采用修饰符的整数 |
通过java.lang.reflect.Modifier类可以解析出getModifiers()方法的返回值所表示的修饰符信息,在该类中提供了一系列用来解析的静态方法,既可以查看是否被指定的修饰符修饰,还可以以字符串形式获得所有修饰符。该类常用静态方法如下:
静态方法 | 说明 |
---|---|
isPublic(int mod) | 查看是否被public修饰符修饰,如果是则返回true |
isProtected(int mod) | 查看是否被protected修饰符修饰,如果是则返回true |
isPrivate(int mod) | 查看是否被private修饰符修饰,如果是则返回true |
isStatic(int mod) | 查看是否被static修饰符修饰,如果是则返回true |
isFinal(int mod) | 查看是否被final修饰符修饰,如果是则返回true |
toString(int mod) | 以字符串的i形式返回所有修饰符 |
2、访问成员变量
在通过如下几个方法访问成员变量时,将返回Field类型的对象或数组。每个Field对象代表一个成员变量,利用Field对象可以操纵相应的成员变量。
(1)getFields()
(2)getField(String name)
(3)getDeclaredFields()
(4)getDeclaredField(String name)
如果是访问指定的成员变量,可以通过该成员变量的名称来访问。
方法 | 说明 |
---|---|
getName() | 获得该成员变量的名称 |
getType() | 获得该成员变量类型的Class对象 |
get(Object obj) | 获得指定对象obj中成员变量的值,返回值为Object型 |
set(Object obj,Object value) | 将指定对象obj中成员变量的值设置为value |
getInt(Object obj) | 获得指定对象obj中类型为int的成员变量的值 |
setInt(Object obj,int i) | 将指定对象obj中类型为int的成员变量的值设置为i |
getFloat(Object obj) | 获得指定对象obj中类型为float的成员变量的值 |
setFloat(Object obj,float f) | 将指定对象obj中类型为float的成员变量的值设置为f |
getBoolean(Object obj) | 获得指定对象obj中类型为boolean的成员变量的值 |
setBoolean(Object obj,boolean z) | 将指定对象obj中类型为boolean的成员变量的值设置为z |
setAccessible(boolean flag) | 设置是否忽略权限限制直接访问private等私有权限的成员变量 |
getModifiers() | 获得可以解析出该成员变量所常用修饰符的整数 |
3、访问方法
在通过下面一组方法访问方法时,将返回Method类型的对象或数组。每个Method对象代表一种方法,利用Method对象可以操纵相应的方法。
(1)getMethods()
(2)getMethod(String name,Class<?>...parameterTypes)
(3)getDeclaredMethods()
(4)getDeclaredMethod(String name,Class<?>...parameterTypes)
如果时访问指定的方法,需要根据该方法的名称和入口参数的类型来访问。
方法 | 说明 |
---|---|
getName() | 获得该方法的名称 |
getParameterTypes() | 按照声明顺序以Class数组的形式获得该方法的各个参数的类型 |
getReturnType() | 以Class对象的形式获得该方法的返回值的类型 |
getExceptionTypes() | 以Class数组的形式获得该方法可能抛出的异常类型 |
invoke(Object obj,Object...args) | 利用指定参数args执行指定对象obj中的该方法,返回值为Object型 |
isVarArgs() | 查看该构造方法是否允许带有可变数量的参数,如果允许则返回true |
getModeifiers() | 获得可以解析出该方法所采用修饰符的整数 |