出于好奇,你为什么有时候多Java。类文件的产生为后一类汇编的?例如,我的应用程序有六个课程。对于一类,一共有10个。类文件已经产生,从MyClass#1MyClass#10.

有帮助吗?

解决方案

适用于内部课程静态嵌套类。有数字的是匿名的内部类。

例如:


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

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

其他提示

你获得更多。类fils从单一来源文件,如果

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

  • 内部接口的它们总是静态的。

  • 匿名内部的类(其事实上是普通类内没有名字)

  • 包访问的接口和课程之前和之后你的主要类。你可以有一个任意数量的包装类访问和接口在一个单一的Java源的文件。通常小的帮助对象,只是使用的类是刚刚投入同样的文件。

如果您的类包含内部类,则一个java源文件可以生成多个类文件。匿名内部类由编号的类文件表示。

java中的每个类都属于.java文件,但.java文件可以包含多个类。这包括内部和匿名类。为内部类生成的.class文件在其名称中包含“$”。匿名内部类获得数字。

要添加上面的答案,这是基于Comparators生成的内部类的另一个很好的例子(每个Comparator都是用不同的 MyClass $ X.class ):

public class MyClass {
    ...

    public void doSomething() {
        ...
        Collections.sort(list, new Comparator<MyObj>() {
            public int compare(MyObj o1, MyObj o2) {
                ...
            }
        });
        ...
    }

    ...
}

如果有一个X.java文件并且它包含4个collections.sort(){}那么在编译X.class之后,X $ 1.class,X $ 2.class,X $ 3.class,X $ 4.class将生成。

对于内部类和静态内部类,会生成更多.class文件。

编译时将生成多个类,仅当您的类具有内部类时才会生成。

参阅: 为什么带内部类的Java代码会生成第三个SomeClass $ 1.class文件?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top