Javareflect 简明教程

java.lang.reflect - Quick Guide

java.lang.reflect - AccessibleObject Class

Introduction

java.lang.reflect.AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。它提供了在使用反射对象时将其标记为抑制默认 Java 语言访问控制检查的能力。当 Fields、Methods 或 Constructors 用于设置或获取字段、调用方法或创建和初始化类的实例时,会执行 public、default(包)访问、protected 和 private 成员的访问检查。在反射对象中设置 accessible 标志允许具有足够权限的高级应用程序,例如 Java 对象序列化或其他持久机制,以通常禁止的方式操作对象。

Class declaration

以下是 java.lang.reflect.AccessibleObject 类的声明 −

public class AccessibleObject
   extends Object
      implements AnnotatedElement

Constructors

Sr.No.

Constructor & Description

1

protected AccessibleObject() 构造器:仅供 Java 虚拟机使用。

Class methods

Sr.No.

Method & Description

1

<T extends Annotation> T getAnnotation(Class<T> annotationClass) 如果存在此类注释,则返回此元素指定类型的注释,否则返回 null。

2

Annotation[] getAnnotations() 返回此元素上存在的所有注释。

3

Annotation[] getDeclaredAnnotations() 返回在此元素上直接存在的注释。

4

boolean isAccessible() 获取此对象的 accessible 标志值。

5

boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 如果此元素上存在指定类型的注释,则返回 true,否则返回 false。

6

static void setAccessible(AccessibleObject[] array, boolean flag) 便捷方法,用于为对象数组设置可访问标志,其中仅有一个安全检查(为了提高效率)。

7

void setAccessible(boolean flag) 将此对象的 accessible 标志设置为指定的布尔值。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.Object

java.lang.reflect - Array Class

Introduction

java.lang.reflect.Array 类提供静态方法来动态创建和访问 Java 数组。Array 允许在 get 或 set 操作期间发生扩大转换,但在发生缩小转换时抛出 IllegalArgumentException。

Class declaration

以下是 java.lang.reflect.Array 类的声明−

public final class Array
   extends Object

Class methods

Sr.No.

Method & Description

1

static Object get(Object array, int index) 返回指定数组对象中索引组件的值。

2

static boolean getBoolean(Object array, int index) 以布尔值的形式返回指定数组对象中索引组件的值。

3

static byte getByte(Object array, int index) 以字节的形式返回指定数组对象中索引组件的值。

4

static char getChar(Object array, int index) 以字符的形式返回指定数组对象中索引组件的值。

5

static double getDouble(Object array, int index) 以双精度的形式返回指定数组对象中索引组件的值。

6

static float getFloat(Object array, int index) 以浮点形式返回指定数组对象中索引组件的值。

7

static int getInt(Object array, int index) 以整数的形式返回指定数组对象中索引组件的值。

8

static int getLength(Object array) 以整数的形式返回指定数组对象长度。

9

static long getLong(Object array, int index) 以长整数的形式返回指定数组对象中索引组件的值。

10

static short getShort(Object array, int index) 以短整数的形式返回指定数组对象中索引组件的值。

11

static Object newInstance(Class<?> componentType, int…​ dimensions) 创建具有指定组件类型和尺寸的新数组。

12

static Object newInstance(Class<?> componentType, int length) 使用指定组件类型和长度创建一个新数组。

13

static void set(Object array, int index, Object value) 将指定数组对象索引组件的值设置为指定的新值。

14

static void setBoolean(Object array, int index, boolean z) 将指定数组对象索引组件的值设置为指定布尔值。

15

static void setByte(Object array, int index, byte b) 将指定数组对象索引组件的值设置为指定字节值。

16

static void setChar(Object array, int index, char c) 将指定数组对象索引组件的值设置为指定字符值。

17

static void setDouble(Object array, int index, double d) 将指定数组对象索引组件的值设置为指定双精度浮点数。

18

static void setFloat(Object array, int index, float f) 将指定数组对象索引组件的值设置为指定单精度浮点数。

19

static void setInt(Object array, int index, int i) 将指定数组对象索引组件的值设置为指定 int 值。

20

static void setLong(Object array, int index, long l) 将指定数组对象索引组件的值设置为指定 long 值。

21

static void setShort(Object array, int index, short s) 将指定数组对象索引组件的值设置为指定 short 值。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.Object

java.lang.reflect - Constructor<T> Class

Introduction

java.lang.reflect.Constructor 类为某个类的单个构造器提供信息和访问权限。当使用 newInstance() 将实际参数与底层构造器的形式参数匹配时,Constructor 允许出现扩大转换,但如果出现缩小转换,则会抛出 IllegalArgumentException。

Class declaration

以下是 java.lang.reflect.Constructor 类的声明−

public final class Constructor<T>
   extends AccessibleObject
      implements GenericDeclaration, Member

Class methods

Sr.No.

Method & Description

1

boolean equals(Object obj) 将此 Constructor 与指定的对象进行比较。

2

<T extends Annotation> T getAnnotation(Class<T> annotationClass) 如果存在此类注释,则返回此元素指定类型的注释,否则返回 null。

3

Annotation[] getDeclaredAnnotations() 返回在此元素上直接存在的注释。

4

Class<T> getDeclaringClass() 返回表示声明此 Constructor 对象表示的构造器的类的 Class 对象。

5

Class<?>[] getExceptionTypes() 返回表示此 Constructor 对象表示的底层构造器声明抛出的异常类型 Class 对象数组。

6

Type[] getGenericExceptionTypes() 返回表示此 Constructor 对象声明抛出的异常的 Type 对象数组。

7

Type[] getGenericParameterTypes() 返回此 Constructor 对象表示的方法的正式参数类型(声明顺序)的 Type 对象数组。

8

int getModifiers() 以整数形式返回此 Constructor 对象表示的构造器的 Java 语言修饰符。

9

String getName() 以字符串形式返回此构造器的名称。

10

Annotation[][] getParameterAnnotations() 按声明顺序返回一个表示方法正式参数上的注解的数组数组,它是由这个 Constructor 对象表示的。

11

Class<?>[] getParameterTypes() 按声明顺序返回一个表示构造函数正式参数类型、由这个 Constructor 对象表示的类对象的数组。

12

int hashCode() 返回此 Constructor 的哈希码。

13

boolean isSynthetic() 如果此构造函数是合成构造函数,则返回 true;否则返回 false。

14

boolean isVarArgs() 如果声明此构造函数以接受可变数量的参数,则返回 true;否则返回 false。

15

T newInstance(Object…​ initargs) 使用此 Constructor 对象表示的构造函数创建并初始化构造函数声明类的新的实例,并使用已指定的初始化参数。

16

String toGenericString() 返回描述此 Constructor 的字符串,包括类型参数。

17

String toString() 返回描述此 Constructor 的字符串。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.reflect.AccessibleObject

  2. java.lang.Object

java.lang.reflect - Field Class

Introduction

java.lang.reflect.Field 类提供有关类或接口的单个字段的信息和动态访问权限。反射字段可以是类(静态)字段或实例字段。Field 允许在获取或设置访问操作期间进行扩展转换,但如果出现缩小转换,则会抛出 IllegalArgumentException。

Class declaration

以下是 java.lang.reflect.Field 类的声明 −

public final class Field
   extends AccessibleObject
      implements Member

Class methods

Sr.No.

Method & Description

1

boolean equals(Object obj) 将此 Field 与指定的对象进行比较。

2

Object get(Object obj) 在指定的对象上返回由此 Field 表示的字段值。

3

<T extends Annotation> T getAnnotation(Class<T> annotationClass) 如果存在这样的注释,则返回此元素对指定类型的注释,否则返回 null。

4

boolean getBoolean(Object obj) 获取静态或实例 boolean 字段的值。

5

byte getByte(Object obj) 获取静态或实例 byte 字段的值。

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() 返回表示由此 Field 对象表示的字段的声明类型的 Type 对象。

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 或可通过扩展 conversion 转换为 short 类型的静态字段或实例字段的值。

17

Class<?> getType() 返回一个 Class 对象,它标识此 Field 对象表示的字段已申明类型。

18

int hashCode() 返回这个 Field 的哈希码。

19

boolean isEnumConstant() 如果这个字段表示枚举类型中的一个元素,则返回真;否则返回假。

20

boolean isSynthetic() 如果当前对象表示的字段是合成的,此方法返回真,否则返回假。

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) 将指定对象上字段的值设置为双精度浮点数。

25

void setFloat(Object obj, float f) 将指定对象上字段的值设置为单精度浮点数。

26

void setInt(Object obj, int i) 将指定对象上字段的值设置为整数。

27

void setLong(Object obj, long l) 将指定对象上字段的值设置为长整数。

28

void setShort(Object obj, short s) 将指定对象上字段的值设置为 short。

29

String toGenericString() 返回一个描述这个 Field 的字符串,包括它的通用类型。

30

String toString() 返回一个描述这个 Field 的字符串。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.reflect.AccessibleObject

  2. java.lang.Object

java.lang.reflect - Method Class

Introduction

java.lang.reflect.Method 类提供有关类或接口上单个方法的信息并可访问该方法。反射方法可以是类方法或实例方法(包括抽象方法)。java.lang.reflect.Method 允许在将实际参数与基础方法的形式参数匹配时进行扩展转换,但如果发生缩小转换,则它会引发 IllegalArgumentException。

Class declaration

以下是对 java.lang.reflect.Method 类的声明:

public final class Method<T>
   extends AccessibleObject
      implements GenericDeclaration, Member

Class methods

Sr.No.

Method & Description

1

boolean equals(Object obj) 将此 Method 与指定对象比较。

2

<T extends Annotation> T getAnnotation(Class<T> annotationClass) 如果存在这种注解,则返回此元素对指定类型的注解,否则返回 null。

3

Annotation[] getDeclaredAnnotations() 返回此元素上直接存在的全部注解。

4

Class<T> getDeclaringClass() 返回表示此 Method 对象表示的方法的类所在的 Class 对象。

5

Object getDefaultValue() 返回此 Method 实例表示的注解成员的默认值。

6

Class<?>[] getExceptionTypes() 返回一个 Class 对象数组,表示此 Constructor 对象表示的基础构造函数声明要抛出的异常的类型。

7

Type[] getGenericExceptionTypes() 返回一个 Type 对象数组,表示此 Constructor 对象声明要抛出的例外。

8

Type[] getGenericParameterTypes() 返回一个 Type 对象数组,其中代表此 Constructor 对象表示的方法的正式参数类型,按声明顺序排列。

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() 返回此 Constructor 的哈希码。

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() 返回描述此方法的字符串。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.reflect.AccessibleObject

  2. java.lang.Object

java.lang.reflect - Modifier Class

Introduction

java.lang.reflect.Modifier 类提供静态方法和常量来解码类和成员的访问修饰符。修饰符集表示为整数,不同的位位置表示不同的修饰符。表示修饰符的常量值取自《Java 虚拟机规范》第 4.1、4.4、4.5 和 4.7 节中的表。

Class declaration

以下是 java.lang.reflect.Modifier 类的声明 −

public class Modifier
   extends Object

Fields

以下是 java.lang.reflect.Modifier 类的字段 −

  1. static int ABSTRACT − 表示 abstract 修饰符的 int 值。

  2. static int FINAL − 表示 final 修饰符的 int 值。

  3. static int INTERFACE − 表示 interface 修饰符的 int 值。

  4. static int NATIVE − 表示 native 修饰符的 int 值。

  5. static int PRIVATE − 表示 private 修饰符的 int 值。

  6. static int PROTECTED − 表示 protected 修饰符的 int 值。

  7. static int PUBLIC − 表示 public 修饰符的 int 值。

  8. static int STATIC − 表示 static 修饰符的 int 值。

  9. static int STRICT − 表示 strictfp 修饰符的 int 值。

  10. static int SYNCHRONIZED − 表示 synchronized 修饰符的 int 值。

  11. static int TRANSIENT − 表示 transient 修饰符的 int 值。

  12. static int VOLATILE − 表示 volatile 修饰符的 int 值。

Constructors

Sr.No.

Constructor & Description

1

*Modifier()*Default Constructor.

Class methods

Sr.No.

Method & Description

1

static int classModifiers() 返回源语言可以应用于类的修饰符的 int 值 OR-ing。

2

static int constructorModifiers() 返回源语言可以应用于构造函数的修饰符的 int 值 OR-ing。

3

static int fieldModifiers() 返回源语言可以应用于字段的修饰符的 int 值 OR-ing。

4

static int interfaceModifiers() 返回源语言可以应用于接口的修饰符的 int 值 OR-ing。

5

static boolean isAbstract(int mod) 如果整数参数包含抽象修饰符,则返回 true,否则返回 false。

6

static boolean isFinal(int mod) 如果整数参数包含 final 修饰符,则返回 true,否则返回 false。

7

static boolean isInterface(int mod) 如果整数参数包含接口修饰符,则返回 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 值,通过按位 OR 运算将可应用于方法的源语言修饰符组合在一起。

18

static String toString(int mod) 返回一个字符串,描述指定修饰符中的访问修饰符标志。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.Object

java.lang.reflect - Proxy Class

Introduction

java.lang.reflect.Proxy 类提供用于创建动态代理类和实例的静态方法,它也是由此方法创建的所有动态代理类的超类。

Class declaration

以下是对 java.lang.reflect.Proxy 类的声明 −

public class Proxy
   extends Object
      implements Serializable

Fields

以下是对 java.lang.reflect.Proxy 类的字段 −

  1. protected InvocationHandler h − 此代理实例的调用处理程序。

Constructors

Sr.No.

Constructor & Description

1

*protected Proxy(InvocationHandler h)*使用对调用处理程序指定的值,从子类(通常是动态代理类)构建一个新的 Proxy 实例。

Class methods

Sr.No.

Method & Description

1

static InvocationHandler getInvocationHandler(Object proxy) 返回指定代理实例的调用处理程序。

2

static Class<?> getProxyClass(ClassLoader loader, Class<?>…​ interfaces) 给定一个类加载器和一个接口数组,返回 proxy 类的 java.lang.Class 对象。

3

static boolean isProxyClass(Class<?> cl) 当且仅当指定类被动态生成为使用 getProxyClass 方法或 newProxyInstance 方法生成的代理类时,返回 true。

4

static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 返回一个代理类的实例,用于指定将方法调用调度到指定的调用处理程序的接口。

Methods inherited

此类从以下类中继承方法:

  1. java.lang.Object

java.lang.reflect - Interfaces

Introduction

java.lang.reflect Interfaces 包含用于获取有关类和对象的反射信息的接口。

Interface Summary

Sr.No.

Interface & Description

1

AnnotatedElement 表示当前在此 VM 中运行的程序的带注释元素。

2

GenericArrayType GenericArrayType 表示一个数组类型,其组件类型是参数化类型或类型变量。

3

GenericDeclaration 所有声明类型变量的实体的通用接口。

4

InvocationHandler InvocationHandler 是由代理实例的调用处理程序实现的接口。

5

Member Member 是一个接口,用于反映单个成员(字段或方法)或构造函数的标识信息。

6

ParameterizedType ParameterizedType 表示一个参数化类型,例如 Collection<String>。

7

Type Type 是 Java 编程语言中所有类型的公共超级接口。

8

List&lt;E&gt; 这是一个有序集合(也称为序列)。

9

TypeVariable&lt;D extends GenericDeclaration&gt; TypeVariable 是种类类型变量的公共超级接口。

10

WildcardType WildcardType 表示通配符类型表达式,例如 ?、? extends Number 或 ? super Integer。

java.lang.reflect - Exceptions

Introduction

java.lang.reflect Exceptions 包含反射操作期间可能发生的异常。

Exceptions Summary

Sr.No.

Exception & Description

1

InvocationTargetException InvocationTargetException 是一个检查型异常,用来包装被调用的方法或构造函数抛出的异常。

2

MalformedParameterizedTypeException 当遇到语法有问题的参数化类型时,需要实例化该类型的反射方法会抛出此异常。

3

UndeclaredThrowableException 当代理实例上的方法调用引发检查型异常(无法赋值给 RuntimeException 或 Error 的 Throwable)时,由其调用处理程序的 invoke 方法抛出的异常引发,而且无法将该异常赋值给代理实例上被调用并分派到调用处理程序的方法的 throws 子句中声明的任何异常类型。

java.lang.reflect - Error

Introduction

java.lang.reflect Error 包含反射操作期间可能发生的错误。

Errors Summary

Sr.No.

Error & Description

1

GenericSignatureFormatError 当语法有问题的签名属性被需要解释类型的、方法或构造函数的通用签名信息的反方法遇到时,引发此异常。