3

TestMainFunction.javaという名前の Java ソース ファイルがあるとします。

1.) ほとんどの人が知っているように、Java ファイル名は、メイン関数を含むクラス名でなければなりません。

完全に実行され、出力される以下の単純なコード (上記の名前の単一ファイル内) を参照してくださいClassOne

public class TestMainFunction {}

class ClassOne {
    public static void main(String[] a) {
        System.out.println("ClassOne");
    }
}

2.) 1 つのファイルにメイン関数を持つ複数のクラスがある場合、Eclipse はユーザーに実行するクラスを選択するように求めます。

以下の単純なコード (上記のように名前が付けられた単一のファイル) を参照してください。これは完全に実行され、Eclipse プロンプトから選択したクラス名を出力します。

public class TestMainFunction {
    public static void main(String[] a) {
        System.out.println("TestMainFunction");
    }
}

class ClassOne {
    public static void main(String[] a) {
        System.out.println("ClassOne");
    }
}

class ClassTwo {
    public static void main(String[] a) {
        System.out.println("ClassTwo");
    }
}

上記のすべては、私が述べたように機能します。クラスごとに個別の .class ファイルが作成されます。内部クラスを使用する場合でも、同じ動作が適用されます。

しかし、ここで正確に何が起こっているのでしょうか? 複数のクラスが 1 つのソース ファイルに存在する場合、Eclipse はどのクラスを起動するかをどのように認識しますか? 誰でも説明できますか?これを説明していただければ幸いです。

4

1 に答える 1

6

ほとんどの人が知っているように、Java ファイル名は、メイン関数を含むクラス名でなければなりません。

これは正しくありません。混乱の元になっていると思います。Java ソース ファイルは、パブリック クラスを 1 つだけ持つことができ、含まれているファイルと同じ名前 (拡張子を除いたもの)である必要があります。ただし、特定の Java ソース ファイルには、必要な数の非パブリック クラス ファイルを含めることができます。唯一の制約は、それらの名前が有効であることです。public ではない、含まれているソースファイルと同じ名前 (拡張子を除いたもの) のクラスを持つことができることに注意してください。また、単一の Java ソース ファイルに複数の最上位 (ネストされていない) クラスを含めることは、一般的に悪い習慣と見なされていることにも注意してください。

2 つ目の仮定は、ソース ファイル内の 1 つのクラスだけが main 関数を持つことができるということです。これは単に真実ではありません。すべてのクラス ファイルに main 関数を追加できます。重要なのは、アプリケーションの起動時に JVM に指定するものだけです。

したがって、シナリオ-複数のクラスファイル(そのうちの1つはパブリック)を含むソースファイルで、各クラスにメインメソッドがある場合、次が適用されます。

  • このファイルに対して Eclipse で Run コマンドを呼び出すと、Eclipse は実行に適したクラスが複数あることを検出し、それらのクラスの 1 つを選択するようにプロンプ​​トを出します。次に、選択したクラスの「実行プロファイル」を構築し、そのクラスだけを起動します。Run->Debug Configurations メニューから、Eclipse ビルドのプロファイルを実際に確認できます。
  • このソース ファイルを外部でコンパイルすると、(1 つだけでなく) 複数の .class ファイルが生成されます。クラスは、同じソース ファイルに保存されているため、相互に関係がなく、JVM で起動する .class を明示的に選択します。

すなわち:

java TestMainFunction
java ClassOne
java ClassTwo
于 2013-02-26T12:24:30.920 に答える