为什么JVM在编译后创建了很多类文件?

Din*_*esh 0 java compilation

可能重复:
编译器正在创建额外的类文件,其中包含$

我正在使用Netbeans设计一个java应用程序,我在其中使用Java Swing,因此除了Java源文件之外,我将有.form文件,其中包含有关Java表单的描述.

在src diectory中,我有3个文件,比如

Downloader.java
DownloadCore.java
Downloader.form
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用命令提示符(.ie而不使用Netbeans)手动编译它们,那么我会得到很多.class文件,比如

DownloadCore.class
Downloader$1.class
Downloader$10.class
Downloader$11.class
Downloader$12$1.class
Downloader$12.class
Downloader$2.class
Downloader$3.class
Downloader$4.class
Downloader$5.class
Downloader$6.class
Downloader$7.class
Downloader$8.class
Downloader$9.class
Downloader.class
Run Code Online (Sandbox Code Playgroud)

我想知道为什么JVM创建了这么多.class文件,其中我只有2个.java文件,所以它不应该单独创建2个.class文件.为什么需要它?

提前致谢

ysh*_*vit 5

每个类都有自己的.class文件 - 甚至是匿名文件.例如:

// "top level" class -- in MyWhatever.java
public class MyWhatever {

    // anonymous class
    public static final Runnable anonymousRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("I am an anonymous Runnable.");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这段代码片段定义了两个类 - MyWhatever以及匿名类anonymousRunnable.第二个将被调用MyWhatever$1,这就是你所看到的.他们每个人都有自己的.class文件.

(顺便说一下,创建这些类文件的不是JVM - 它是Java编译器,比如javac或Netbeans使用的任何东西.然后JVM加载这些类文件并执行它们.)