一、简介
java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作。
二、java.lang.reflect AccessibleObject类
java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类。 它提供了将反射对象标记为在使用它时抑制默认Java语言访问控制检查的功能。 当使用Fields,Methods或Constructors类对象来设置或获取字段,调用方法,或创建和初始化新的类实例时,执行访问分别检查(对于public,默认(包)访问,protected和private成员) 。 在反射对象中设置可访问标志允许具有足够权限的复杂应用程序(如Java对象序列化或其他持久性机制)以被禁止的方式操作对象。
类声明
以下是java.lang.reflect.AccessibleObject
类的声明 -
public class AccessibleObject
extends Object
implements AnnotatedElement
构造函数
编号 | 构造函数 | 描述 |
---|---|---|
1 | protected AccessibleObject() |
构造函数:仅由Java虚拟机使用。 |
类方法
编号 | 构造函数 | 描述 |
---|---|---|
1 | T getAnnotation(Class annotationClass) | 如果存在注解,则返回该元素的指定类型的注解,否则返回null 。 |
2 | Annotation[] getAnnotations() | 返回此元素上存在的所有注解。 |
3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注解。 |
4 | boolean isAccessible() | 获取此对象的可访问标志的值。 |
5 | boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) | 如果此元素上存在指定类型的注解,则返回true,否则返回false。 |
6 | static void setAccessible(AccessibleObject[] array, boolean flag) | 使用单一安全检查来设置对象数组的可访问标志的一个方便的方法(为了效率)。 |
7 | void setAccessible(boolean flag) | 将此对象的可访问标志设置为指示的布尔值。 |
三、java.lang.reflect.Array类
java.lang.reflect.Array
类提供静态方法来动态创建和访问Java
数组。 Array
允许在get
或set
操作期间扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException
异常
类声明
以下是java.lang.reflect.Array
类的声明 -
public final class Array
extends Object
类方法
方法继承
此类继承以下类的方法 -
java.lang.Object
四、java.lang.reflect Constructor<T>类
java.lang.reflect.Constructor类提供了一个类的单个构造函数的信息和访问权限。 构造函数允许在将实际参数传到newInstance()与底层构造函数的形式参数进行匹配时进行扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException异常。
类声明
以下是java.lang.reflect.Constructor
类的声明 -
public final class Constructor
extends AccessibleObject
implements GenericDeclaration, Member
类方法
序号 | 方法 | 描述 |
---|---|---|
1 | boolean equals(Object obj) | 将此构造函数与指定对象进行比较。 |
2 | T getAnnotation(ClassannotationClass) | 如果存在这样的注释,则返回该元素的指定类型的注释,否则返回null 。 |
3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注释。 |
4 | Class getDeclaringClass() | 返回表示由此构造函数对象表示的构造函数的类的Class 对象。 |
5 | Class<?>[] getExceptionTypes() | 返回一个Class 对象数组,该数组表示由此构造方对象表示的底层构造函数声明的异常类型。 |
6 | Type[] getGenericExceptionTypes() | 返回一个Type 对象数组,它以声明顺序表示由此构造方法对象表示的方法的形式参数类型。 |
7 | Type[] getGenericParameterTypes() | 返回一个Type 对象数组,它以声明顺序表示由此构造方法对象表示的方法的形式参数类型。 |
8 | int getModifiers() | 返回由此Constructor 对象表示的构造函数的Java 语言修饰符,以整数形式返回。 |
9 | String getName() | 以字符串形式返回此构造函数的名称。 |
10 | Annotation[][] getParameterAnnotations() | 返回一个数组数组,表示由Constructor 对象表示的方法的形式参数(以声明顺序)的注释。 |
11 | Class<?>[] getParameterTypes() | 返回一个Class 对象数组,它们以声明顺序表示由此构造函数对象表示的构造函数的形式参数类型。 |
12 | int hashCode() | 返回此构造函数的哈希码。 |
13 | boolean isSynthetic() | 如果此构造函数是合成构造函数,则返回true ; 否则返回false 。 |
14 | boolean isVarArgs() | 如果该构造函数被声明为采用可变数量的参数,则返回true ; 否则返回false 。 |
15 | T newInstance(Object… initargs) | 使用此Constructor 对象表示的构造函数,使用指定的初始化参数来创建和初始化构造函数的声明类的新实例。 |
16 | String toGenericString() | 返回描述此构造方法的字符串,包括类型参数。 |
17 | String toString() | 返回描述此构造函数的字符串。 |
五、java.lang.reflect.Field类
java.lang.reflect.Field类提供有关类或接口的单个字段的信息和动态访问。反射的字段可以是类(静态)字段或实例字段。字段允许在获取或设置访问操作期间扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException。
类声明
以下是java.lang.reflect.Field
类的声明 -
public final class Field
extends AccessibleObject
implements Member
类方法
序号 | 方法 | 描述 |
---|---|---|
1 | boolean equals(Object obj) | 将此字段与指定对象进行比较。 |
2 | Object get(Object obj) | 返回指定对象上由Field 表示的字段的值。 |
3 | T getAnnotation(ClassannotationClass) | 如果存在这样的注释,则返回该元素的指定类型的注释,否则返回null 。 |
4 | boolean getBoolean(Object obj) | 获取静态或实例布尔字段的值。 |
5 | byte getByte(Object obj) | 获取静态或实例字节字段的值。 |
6 | char getChar(Object obj) | 获取char 类型的静态或实例字段的值,或者通过加宽转换可转换为char 类型的另一个基本类型的值。 |
7 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注释。 |
8 | Class<?> getDeclaringClass() | 返回表示声明由Field 对象表示的字段的类或接口的Class 对象。 |
9 | double getDouble(Object obj) | 获取double 类型的静态或实例字段的值,或者通过加宽转换可转换为double 类型的另一个基本类型的值。 |
10 | float getFloat(Object obj) | 获取类型为float 的静态或实例字段的值,或者通过加宽转换可转换为float 类型的另一个原始类型的值。 |
11 | Type getGenericType() | 返回一个Type 对象,该对象表示由Field 对象表示的字段的声明类型。 |
12 | int getInt(Object obj) | 获取类型为int 的静态或实例字段的值,或者通过加宽转换可转换为类型int 的另一个原始类型的值。 |
13 | long getLong(Object obj) | 获取long 类型的静态或实例字段的值,或者通过扩展转换可转换为long 类型的另一个原始类型的值。 |
14 | int getModifiers() | 返回由Field 对象表示的字段的Java语言修饰符,以整数形式返回。 |
15 | String getName() | 返回Field 对象表示的字段的名称。 |
16 | short getShort(Object obj) | 获取类型为short 的另一个原始类型的静态或实例字段的值,通过加宽转换可转换为short 类型。 |
17 | Class<?> getType() | 返回一个Class 对象,用于标识Field 对象所表示的字段的声明类型。 |
18 | int hashCode() | 返回Field 的哈希码。 |
19 | boolean isEnumConstant() | 如果字段表示枚举类型的元素,则返回true ; 否则返回false 。 |
20 | boolean isSynthetic() | 将指定对象参数上的Field 对象表示的字段设置为指定的新值。 |
21 | void setBoolean(Object obj, boolean z) | 为指定对象上字段的值设置为布尔值。 |
22 | void setByte(Object obj, byte b) | 为指定对象上字段的值设置为字节值。 |
23 | void setChar(Object obj, char c) | 为指定对象上字段的值设置为字符值。 |
24 | void setDouble(Object obj, double d) | 为指定对象上字段的值设置为double 值。 |
25 | void setFloat(Object obj, float f) | 为指定对象上字段的值设置为浮点数。 |
26 | void setInt(Object obj, int i) | 为指定对象上字段的值设置为int 值。 |
27 | void setLong(Object obj, long l) | 为指定对象上字段的值设置为long 值。 |
28 | void setShort(Object obj, short s) | 为指定对象上字段的值设置为short 值。 |
29 | String toGenericString() | 返回描述此Field 对象的字符串,包括其通用类型。 |
30 | String toString() | 返回描述此Field 对象的字符串。 |
方法继承
- java.lang.reflect.AccessibleObject
- java.lang.Object
六、java.lang.reflect.Method类
java.lang.reflect.Method类提供有关类或接口上单个方法的信息和访问权限。反映的方法可以是类方法或实例方法(包括抽象方法)。 当匹配实际参数以使用底层方法的形式参数调用时,方法允许扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException异常。
类声明
以下是java.lang.reflect.Method
类的声明 -
public final class Method<T>
extends AccessibleObject
implements GenericDeclaration, Member
类方法
序号 | 方法 | 描述 |
---|---|---|
1 | boolean equals(Object obj) | 将此方法与指定的对象进行比较。 |
2 | T getAnnotation(ClassannotationClass) | 如果存在这样的注释,则返回该元素的指定类型的注释,否则返回null 。 |
3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注释。 |
4 | Class getDeclaringClass() | 返回表示声明由此Method 对象表示方法类的Class 对象。 |
5 | Object getDefaultValue() | 返回此Method 实例表示的注释成员的默认值。 |
6 | Class<?>[] getExceptionTypes() | 返回一个Class 对象数组,该数组表示由此构造方对象表示的底层构造函数声明的异常类型。 |
7 | Type[] getGenericExceptionTypes() | 返回一个Type 对象的数组,表示声明为此Constructor 对象抛出的异常。 |
8 | Type[] getGenericParameterTypes() | 返回一个Type 对象数组,它以声明顺序表示由此构造方法对象表示的方法的形式参数类型。 |
9 | Type getGenericReturnType() | 返回一个Type 对象,该对象表示此Method 对象表示的方法的正式返回类型。 |
10 | int getModifiers() | 返回由此Method 对象表示的方法的Java语言修饰符,以整数形式返回。 |
11 | String getName() | 以字符串形式返回此方法的名称。 |
12 | Annotation[][] getParameterAnnotations() | 返回一个数组数组,它们以声明顺序表示由此Method 对象表示的方法的形式参数的注释。 |
13 | Class<?>[] getParameterTypes() | 返回一个Class 对象数组,它们以声明顺序表示由此Method 对象表示的构造函数的形式参数类型。 |
14 | Class<?> getReturnType() | 返回一个Class 对象,该对象表示此Method 对象表示的方法的正式返回类型。 |
15 | int hashCode() | 返回此构造函数的哈希码。 |
16 | Object invoke(Object obj, Object…args) | 在具有指定参数的指定对象上调用此Method 对象表示的底层方法。 |
17 | boolean isBridge() | 如果此方法是桥接方法,则返回true ; 否则返回false 。 |
18 | boolean isSynthetic() | 如果此方法是合成方法,则返回true ; 否则返回false 。 |
19 | boolean isVarArgs() | 如果此方法被声明为使用可变数量的参数,则返回true ; 否则返回false 。 |
20 | String toGenericString() | 返回描述此方法的字符串,包括类型参数。 |
21 | String toString() | 返回描述此方法的字符串。 |
方法继承
此类继承以下类的方法 -
- java.lang.reflect.AccessibleObject
- java.lang.Object
七、java.lang.reflect.Modifier类
java.lang.reflect.Modifier类提供了用于解码类和成员访问修饰符的静态方法和常量。修饰符集合被表示为具有表示不同修饰符的不同位位置的整数。
类声明
以下是java.lang.reflect.Modifier
类的声明 -
public class Modifier
extends Object
字段
以下是java.lang.reflect.Modifier
类的字段 -
-
static int ABSTRACT - 表示
abstract
修饰符的int
值。 -
static int FINAL - 表示
final
修饰符的int
值。 -
static int INTERFACE - 表示
interface
修饰符的int
值。 -
static int NATIVE - 表示
abstract
修饰符的int
值。 -
static int PRIVATE - 表示
private
修饰符的int
值。 -
static int PROTECTED - 表示
protected
修饰符的int
值。 -
static int PUBLIC - 表示
public
修饰符的int
值。 -
static int STATIC - 表示
static
修饰符的int
值。 -
static int STRICT - 表示
strictfp
修饰符的int
值。 -
static int SYNCHRONIZED - 表示
synchronized
修饰符的int
值。 -
static int TRANSIENT - 表示
transient
修饰符的int
值。 -
static int VOLATILE - 表示
volatile
修饰符的int
值。
构造函数
序号 | 方法 | 描述 |
---|---|---|
1 | Modifier() | 默认构造函数 |
类方法
序号 | 方法 | 描述 |
---|---|---|
1 | static int classModifiers() | 返回一个int 值将可以应用于一个类的源语言修饰符组合在一起。 |
2 | static int constructorModifiers() | 返回一个int 值将可以应用于构造函数的源语言修饰符组合在一起。 |
3 | static int fieldModifiers() | 返回一个int 值将可以应用于字段的源语言修饰符组合在一起。 |
4 | static int interfaceModifiers() | 返回一个int 值将可以应用于interface 的源语言修饰符组合在一起。 |
5 | static boolean isAbstract(int mod) | 如果整数参数包含abstract 修饰符,返回true ,否则返回false 。 |
6 | static boolean isFinal(int mod) | 如果整数参数包含final 修饰符,则返回true ,否则返回false 。 |
7 | static boolean isInterface(int mod) | 如果整数参数包含interface 修饰符,返回true ,否则返回false 。 |
8 | static boolean isNative(int mod) | 如果整数参数包含native 修饰符,则返回true ,否则返回false 。 |
9 | static boolean isPrivate(int mod) | 如果整数参数包含private 修饰符,返回true ,否则返回false 。 |
10 | static boolean isProtected(int mod) | 如果整数参数包含protected 修饰符,则返回true ,否则返回false 。 |
11 | static boolean isPublic(int mod) | 如果整数参数包含public 修饰符,则返回true ,否则返回false 。 |
12 | static boolean isStatic(int mod) | 如果整数参数包含static 修饰符,则返回true ,否则返回false 。 |
13 | static boolean isStrict(int mod) | 如果整数参数包含strictfp 修饰符,则返回true ,否则返回false 。 |
14 | static boolean isSynchronized(int mod) | 如果整数参数包含synchronized 修饰符,返回true ,否则返回false 。 |
15 | static boolean isTransient(int mod) | 如果整数参数包含transient 修饰符,则返回true ,否则返回false 。 |
16 | static boolean isVolatile(int mod) | 如果整数参数包含volatile 修饰符,则返回true ,否则返回false 。 |
17 | static int methodModifiers() | 返回一个将可以应用于方法的源语言修饰符组合在一起的int 值。 |
18 | static String toString(int mod) | 返回描述指定修饰符中的访问修饰符标志的字符串。 |
方法继承
此类继承以下类的方法 -
- java.lang.Object
八、java.lang.reflect.Proxy类
java.lang.reflect.Proxy类提供用于创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。
类声明
以下是java.lang.reflect.Proxy
类的声明 -
public class Proxy
extends Object
implements Serializable
字段
以下是java.lang.reflect.Proxy
类的字段 -
- protected InvocationHandler h - 该代理实例调用的处理程序。
构造函数
序号 | 方法 | 描述 |
---|---|---|
1 | protected Proxy(InvocationHandler h) | 从一个子类(通常是一个动态代理类)构造一个新的Proxy 实例,并为其调用处理程序指定一个值。 |
类方法
序号 | 方法 | 描述 |
---|---|---|
1 | static InvocationHandler getInvocationHandler(Object proxy) | 返回指定代理实例的调用处理程序。 |
2 | static Class<?> getProxyClass(ClassLoader loader, Class<?>… interfaces) | 给定类加载器和接口数组的代理类的java.lang.Class 对象。 |
3 | static boolean isProxyClass(Class<?> cl) | 当且仅当使用getProxyClass 方法或newProxyInstance 方法将指定的类动态生成为代理类时,才返回true 。 |
4 | static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) | 返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。 |
方法继承
此类继承以下类的方法 -
- java.lang.Object
总结:截止目前,java反射学习到此告一段落,本文参考JDK文档编写。