为一个类生成多个.class文件?

2022-09-02 23:41:42

出于好奇,为什么有时在编译后会为一个类生成多个 Java .class文件?例如,我的应用程序有六个类。对于一个类,总共生成了 10 个.class文件,从 MyClass#1 到 MyClass#10。


答案 1

这些用于内部类静态嵌套类。带有数字的类是匿名的内部类。

例如:


class Foo {
   class Bar { }
   static class Baz { }
   void run() {
      Helper t = new Helper() {
         int helpMethod() {
            return 2;
         }
      };
    }
}

这将生成类文件 、 和 (用于接口的实现)Foo.classFoo$Bar.classFoo$Baz.classFoo$1.classHelper


答案 2

如果出现以下情况,您可以从单个源文件获得更多.class fils

  • 该类包含内部类或静态内部类。内部类可以嵌套。他们的名字是.<outer class name>$<inner class name>

  • 始终是静态的内部接口。

  • 匿名内部类(实际上是没有名称的普通内部类)

  • 主类之前和之后的包访问接口和类。您可以在单个 Java 源文件中具有任意数量的包访问类和接口。通常,仅由类使用的小型帮助程序对象只是放入同一文件中。