代码之家  ›  专栏  ›  技术社区  ›  saga

类文件中innerClass属性的用途是什么?

  •  0
  • saga  · 技术社区  · 6 年前

    我知道内部类和匿名类是Java编译器提供的编译时构造。如果是这样的话,为什么类文件必须包含内部声明的类的信息。jvm规范声明:

    为了正确地实现Java SE平台类库,必须识别和正确读取类文件阅读器的内部类属性。

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

    0 回复  |  直到 6 年前
        1
  •  1
  •   Octavian R.    6 年前

    这些信息来自java11,并且与内部类如何访问外部类的方法和变量有关。

    您可以在这里阅读更多关于此的信息: openjdk.java.net/jeps/181

    编辑:

    让我们考虑以下示例:

    public class Outer {
    
        public void print() {
            System.out.println("Hello");
        }
    
        private class Inner {
    
            public Inner() {
                print();
            }
        }
    }
    

    如果用java8(左侧)和java11(右侧)编译这个类,可以看到以下区别:

    enter image description here enter image description here

        2
  •  2
  •   Antimony    6 年前

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

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

    推荐文章