0

重複の可能性:
コンパイラは、$を含む追加のクラスファイルを作成しています

Netbeansを使用してJavaSwingを使用するJavaアプリを設計しているので、Javaソースファイルとは別に、Javaフォームに関する説明を含む.formファイルがあります。

src diectoryには、次のような3つのファイルがあります。

Downloader.java
DownloadCore.java
Downloader.form

ここで、コマンドプロンプトを使用して手動でコンパイルすると(つまり、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

なぜJVMがこれほど多くの.classファイルを作成するのか疑問に思っています。このファイルには2つの.javaファイルしかないため、2つの.classファイルだけを作成することは想定されていません。なぜそれが必要なのですか?

前もって感謝します

4

1 に答える 1

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.");
        }
    }

}

このコードスニペットは、2つのクラスMyWhateverとの匿名クラスを定義しanonymousRunnableます。その2番目のものはと呼ばれMyWhatever$1ます。これはあなたが見ているものです。それぞれに独自の.classファイルがあります。

(ちなみに、これらのクラスファイルを作成するのはJVMではありません。javacやNetbeansが使用するものなどのJavaコンパイラです。JVMはこれらのクラスファイルをロードして実行します。)

于 2012-07-18T05:33:42.207 に答える