首页 > 解决方案 > 类文件中的 InnerClass 属性有什么用?

问题描述

我了解内部类和匿名类是 java 编译器提供的编译时构造。如果是这种情况,为什么类文件必须包含有关在其中声明的内部类的信息。JVM 规范声明:

InnerClasses 属性必须被类文件阅读器识别并正确读取,才能正确实现 Java SE 平台类库

我很难理解这句话的意思。有人可以详细说明这个说法吗?

标签: javaclassjvmbytecodeinner-classes

解决方案


字节码中存储了大量关于 Java 级别特性的元数据,但对字节码执行没有直接影响。由于几个原因,这很有用。首先,Java 有反射库提供对这些信息的访问,因此它必须在运行时以某种方式对 JVM 可用。其次,它允许您针对仅二进制库进行编译。

“无用”功能的另一个示例是 throws 子句(作为可选属性存储在字节码中)。这些是必需的,因此您可以在没有源代码的情况下针对类文件进行编译,但对字节码的执行没有影响。


推荐阅读