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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1031962/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 14:52:35  来源:igfitidea点击:

Multiple .class files generated for a class?

javaclassjavac

提问by Ariod

Out of curiosity, why are sometimes multiple Java .class files generated for a class after compilation? For example, my application has six classes. For one class, a total of 10 .class files has been generated, starting from MyClass#1 up to MyClass#10.

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

回答by Simon Nickerson

These are for inner classesand static nested classes. The ones with numbers are anonymous inner classes.

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

For example:

例如:


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

This will produce class files Foo.class, Foo$Bar.class, Foo$Baz.classand Foo$1.class(for the implementation of the Helperinterface)

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

回答by Peter Kofler

You get more .class fils from a single source file if

您可以从单个源文件中获得更多 .class 文件,如果

  • the class contains inner classes or static inner classes. Inner classes can nest. Their names are <outer class name>$<inner class name>.

  • inner interfaces which are always static.

  • anonymous inner classes (which in fact are plain inner classes without a name)

  • package access interfaces and classes before and after your main class. You can have an arbitrary number of package access classes and interfaces in a single Java source file. Usually small helper objects that are only used by the class are just put into the same file.

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

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

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

  • 在主类之前和之后包访问接口和类。您可以在单个 Java 源文件中拥有任意数量的包访问类和接口。通常只被类使用的小助手对象只是放在同一个文件中。

回答by skaffman

One java source file can generate multiple class files, if your class contains inner classes. Anonymous inner classes are represented by your numbered class files.

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

回答by Mnementh

Every class in java belongs to a .java-file, but a .java-file can contain multiple classes. That includes inner and anonymous classes. The .class-files generated for inner classes contain a '$' in their name. Anonymous inner classes get numbers.

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

回答by Naor Bar

To add to the answers above, this is another good example of generated inner classes based on Comparators(each Comparator is compiled in a different MyClass$X.class):

要补充上面的答案,这是基于 Comparator 生成的内部类的另一个很好的例子(每个 Comparator 都在不同的MyClass$X.class 中编译):

public class MyClass {
    ...

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

    ...
}

回答by pooja

If there is one X.java file and if it contains 4 collections.sort() {} then after compilation X.class,X$1.class,X$2.class,X$3.class,X$4.class will get generated.

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

In case of inner class and static inner class more .class files get generated.

在内部类和静态内部类的情况下,会生成更多 .class 文件。

回答by Rakesh Juyal

More than one class will be generated on compilation, Only if your class is having inner class.

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

refer: Why does Java code with an inner class generates a third SomeClass$1.class file?

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