模块 java.base

包 java.lang.reflect


java.lang.reflect
提供用于获取有关类和对象的反射信息的类和接口。反射允许以编程方式访问有关加载类的字段、方法和构造方法的信息,以及使用反射字段、方法和构造方法在封装和安全限制范围内对其底层对应项进行操作。

此包中的类与 java.lang.Class 一起提供调试器、解释器、对象检查器、类浏览器等应用程序,以及对象序列化和 JavaBeans 等需要访问目标对象的公共成员(基于其运行时类)或由给定类声明的成员。

如果必要的 ReflectPermission 可用,AccessibleObject 允许抑制访问检查。

Array 提供动态创建和访问数组的静态方法。

核心反射中的Java编程语言和JVM建模

核心反射的组件(包括此包中的类型以及 Class Package Module )从根本上呈现了所讨论实体的 JVM 模型,而不是 Java 编程语言模型。 Java 编译器(例如 javac )将 Java 源代码转换为可在 JVM 上运行的可执行输出,主要是 class 文件。 Java 以外的源语言的编译器也可以并且确实以 JVM 为目标。

翻译过程(包括从 Java 语言源代码到 JVM 的可执行输出)不是一对一的映射。源语言中存在的结构可能在输出中没有表示,源语言中存在的结构 not 可能出现在输出中。后者被称为合成的结构。合成结构可以包括 methodsfieldsparameters类和接口。一种特殊的合成方法是 桥接法。合成结构可能不会被标记为这样。特别是,并非所有 class 文件版本都支持将参数标记为合成参数。源语言编译器通常有多种方法将源程序翻译成 class 文件表示。翻译还可能取决于所针对的 class 文件格式的版本,因为不同的 class 文件版本具有不同的功能和特性。在某些情况下,class 文件表示中存在的修饰符可能不同于源语言中原始元素的修饰符,包括 参数 上的 final 类和接口 上的 protectedprivatestatic

除了源语言和 JVM 表示之间的结构表示差异外,核心反射还公开了运行时特定信息。例如,Class类加载器保护域 是运行时概念,在源代码中没有直接模拟。

Java 语言规范:
13.1 二进制形式
Java 虚拟机规范:
1.2 Java虚拟机
4.7.8 综合属性
5.3.1 使用引导类加载器加载
5.3.2 使用用户定义的类加载器加载
自从:
1.1
  • 描述
    表示运行时成员上的 JVM 访问或模块相关标志,例如 fieldmethod
    类文件中可以应用标志的位置。
    AccessibleObject 类是 FieldMethodConstructor 对象(称为 reflected objects)的基类。
    AnnotatedArrayType 表示数组类型的潜在注释使用,其组件类型本身可能表示类型的注解使用。
    表示当前在此 VM 中运行的程序的注释构造。
    AnnotatedParameterizedType 表示参数化类型的潜在注释使用,其类型参数本身可能表示类型的注解使用。
    AnnotatedType 表示当前在此 VM 中运行的程序中可能带注解的类型的使用。
    AnnotatedTypeVariable 表示类型变量的潜在注释使用,其声明可能具有边界,这些边界本身表示类型的注解使用。
    AnnotatedWildcardType 表示通配符类型参数的潜在注释使用,其上限或下限本身可能表示类型的注解使用。
    Array 类提供动态创建和访问 Java 数组的静态方法。
    Java 虚拟机的类文件格式版本。
    Constructor 提供有关类的单个构造函数的信息和访问权限。
    Method Constructor 的通用功能的共享超类。
    Field 提供有关类或接口的单个字段的信息和动态访问。
    GenericArrayType 表示其组件类型为参数化类型或类型变量的数组类型。
    所有声明类型变量的实体的通用接口。
    当需要解释类或接口、方法或构造方法的通用签名信息的反射方法遇到句法格式错误的签名属性时抛出。
    当无法抑制 Java 语言访问检查时抛出。
    InvocationHandler是接口实现的调用处理程序一个代理实例。
    InvocationTargetException 是一个已检查的异常,它包装了由调用的方法或构造方法抛出的异常。
    当需要实例化它的反射方法遇到语义格式错误的参数化类型时抛出。
    the java.lang.reflect package 尝试从类文件中读取方法参数并确定一个或多个参数格式错误时抛出。
    成员是反映有关单个成员(字段或方法)或构造方法的标识信息的接口。
    Method 提供有关类或接口上的单个方法的信息和访问权限。
    Modifier 类提供static 方法和常量来解码类和成员访问修饰符。
    有关方法参数的信息。
    ParameterizedType 表示参数化类型,例如 Collection<String>
    Proxy 提供了用于创建对象的静态方法,这些对象的行为类似于接口实例,但允许自定义方法调用。
    RecordComponent 提供有关记录类组件的信息和动态访问。
    反射操作的权限类。
    类型是 Java 编程语言中所有类型的通用超接口。
    TypeVariable 是各种类型变量的通用超接口。
    如果代理实例的调用处理程序的 invoke 方法抛出已检查异常(不可分配给 RuntimeExceptionErrorThrowable ),则由代理实例上的方法调用抛出,该异常类型不可分配给方法的 throws 子句中声明的任何异常类型在代理实例上调用并分派给调用处理程序。
    WildcardType 表示通配符类型表达式,例如 ?? extends Number? super Integer