Module java.base
Package java.lang.reflect
package java.lang.reflect
提供了用于获取关于类和对象的反射信息的类和接口。反射允许以编程方式访问已加载类的字段、方法和构造函数的信息,并使用反射字段、方法和构造函数来操作它们的基础对应项,同时受到封装和安全限制的约束。
此包中的类,以及java.lang.Class
,适用于调试器、解释器、对象检查器、类浏览器以及需要访问目标对象(基于其运行时类)的公共成员或给定类声明的成员的对象序列化和JavaBeans等应用程序。
AccessibleObject
允许在必要的情况下抑制访问检查,如果有必要的ReflectPermission
可用。
Array
提供了动态创建和访问数组的静态方法。
核心反射中的Java编程语言和JVM建模
核心反射的组件,包括此包中的类型以及Class
、Package
和Module
,基本上呈现了所讨论实体的JVM模型,而不是Java编程语言模型。 Java编译器,如javac
,将Java源代码转换为可在JVM上运行的可执行输出,主要是class
文件。除了Java之外的源语言编译器也可以将目标定位到JVM。
翻译过程,包括从Java语言源到JVM的可执行输出,不是一对一的映射。源语言中存在的结构在输出中可能没有表示,而源语言中不存在的结构可能存在于输出中。后者称为合成结构。合成结构可以包括方法、字段、参数、类和接口。一种特殊的合成方法是桥接方法。合成结构可能没有标记为合成。特别是,并非所有的class
文件版本都支持将参数标记为合成。源语言编译器通常有多种方式将源程序转换为class
文件表示。翻译还可能取决于所定位的class
文件格式的版本,因为不同的class
文件版本具有不同的功能和特性。在某些情况下,class
文件表示中的修饰符可能与源语言中的元素上的修饰符不同,包括final
在参数上以及类和接口上的protected
、private
和static
。
除了源语言和JVM表示之间的结构表示差异外,核心反射还公开了特定于运行时的信息。例如,Class
的类加载器和保护域是运行时概念,没有直接对应的源代码。
- 参见Java语言规范:
-
13.1 二进制形式
- 参见Java虚拟机规范:
-
1.2 Java虚拟机
4.7.8 合成属性
5.3.1 使用引导类加载器加载
5.3.2 使用用户定义的类加载器加载
- 自版本:
- 1.1
-
ClassDescription可以应用标志的类文件中的位置。
AccessibleObject
类是Field
、Method
和Constructor
对象(称为反射对象)的基类。AnnotatedArrayType
表示数组类型的潜在注释使用,其组件类型本身可能表示类型的注释使用。表示当前在此VM中运行的程序的注释构造。AnnotatedParameterizedType
表示参数化类型的潜在注释使用,其类型参数本身可能表示类型的注释使用。AnnotatedType
表示当前在此VM中运行的程序中类型的潜在注释使用。AnnotatedTypeVariable
表示类型变量的潜在注释使用,其声明可能具有边界,这些边界本身表示类型的注释使用。AnnotatedWildcardType
表示通配符类型参数的潜在注释使用,其上限或下限可能表示类型的注释使用。Array
类提供了动态创建和访问Java数组的静态方法。Java虚拟机的类文件格式版本。Constructor<T>Constructor
为类的单个构造函数提供信息和访问权限。Method
和Constructor
的共同功能的共享超类。Field
提供了关于类或接口的单个字段的信息和动态访问权限。GenericArrayType
表示其组件类型为参数化类型或类型变量的数组类型。所有声明类型变量的实体的通用接口。当反射方法遇到需要解释类或接口、方法或构造函数的通用签名信息的语法错误的签名属性时抛出。当无法抑制Java语言访问检查时抛出。InvocationHandler
是代理实例的调用处理程序实现的接口。InvocationTargetException是一个检查异常,它包装了由调用的方法或构造函数抛出的异常。当反射方法遇到需要实例化的语义上错误的参数化类型时抛出。当java.lang.reflect包
尝试从类文件中读取方法参数并确定一个或多个参数格式错误时抛出。Member是一个接口,反映了有关单个成员(字段或方法)或构造函数的标识信息。Method
提供了关于类或接口的单个方法的信息和访问权限。Modifier类提供了解码类和成员访问修饰符的static
方法和常量。方法参数的信息。ParameterizedType表示参数化类型,例如Collection<String>
。Proxy
提供了用于创建行为类似于接口实例但允许自定义方法调用的对象的静态方法。RecordComponent
提供了有关记录类的组件的信息和动态访问权限。反射操作的权限类。Type是Java编程语言中所有类型的通用超接口。TypeVariable<D extends GenericDeclaration>TypeVariable是各种类型变量的通用超接口。当代理实例上的方法调用通过其调用处理程序的invoke
方法抛出一个无法分配给代理实例上调用的方法并分派给调用处理程序的方法的throws
子句中声明的任何异常类型的已检查异常(不可分配给RuntimeException
或Error
的Throwable
)时抛出。WildcardType represents a wildcard type expression, such as?
,? extends Number
, or? super Integer
.