19

私の知る限りでは、Java プログラムを実行しているため、main メソッドなしでは実行できません。java 仮想マシンでメイン メソッドを探します。JVM がメイン メソッドを見つけられなかった場合は、ランタイム エラー Exception in thread main could not find the main class が表示されます。

しかし、私は多くのブログを検索しましたが、そのうちのいくつかは、Javaプログラムに静的ブロックがある場合、静的ブログを介して実行できます.javaがmain()メソッドを呼び出す前に、クラスローダーがすべての静的ブロックをロードします!.

それは本当に可能ですか、そしてこれらの使いやすさはどうなるでしょうか。

4

4 に答える 4

34

今 - いいえ


Java 7 より前:

はい、順序は次のとおりです。

  • jvm ロード クラス
  • 静的ブロックを実行します
  • main メソッドを探して呼び出す

したがって、静的ブロックにコードがあれば、それが実行されます。しかし、それをしても意味がありません。

それをテストする方法:

public final class Test {
    static {
        System.out.println("FOO");
    }
}

次に、クラスを実行しようとすると (コマンドラインjava Testまたは IDE を使用して)、結果は次のようになります。

FOO
java.lang.NoSuchMethodError: メイン

于 2013-03-02T10:39:45.747 に答える
5

はい static ブロックを使用することにより、main メソッドなしでコンパイルおよび実行できます。しかし、静的ブロックが実行 (印刷) された後、メイン メソッドが見つからないというエラーが表示されます。

そして最新の情報 --> JAVA 7 バージョンではこれを行うことはできません。IT は実行されません。

{
    static
    {
        System.out.println("Hello World!");
        System.exit(0); // prevents “main method not found” error
    }
}

ただし、これは JAVA 7 バージョンでは実行されません。

于 2013-03-02T11:17:30.173 に答える
3

Java-eeもタグを付けたので、可能です。

コアJavaでも静的ブロックを使用できます

そしてこれをチェックしてくださいHow can you run a Java program without main method?

編集:
他の回答ですでに指摘されているように-Java 7からはサポートされていません

于 2013-03-02T10:38:59.470 に答える
2

また、Java エージェントの premain メソッドを使用して、同様のことを達成できるはずです。

エージェント JAR ファイルのマニフェストには、属性 Premain-Class が含まれている必要があります。この属性の値は、エージェント クラスの名前です。エージェント クラスは、原則としてメイン アプリケーション エントリ ポイントと同様の public static premain メソッドを実装する必要があります。Java 仮想マシン (JVM) が初期化されると、各 premain メソッドがエージェントが指定された順序で呼び出され、次に実際のアプリケーションの main メソッドが呼び出されます。起動シーケンスを続行するには、各 premain メソッドが戻る必要があります。

于 2013-03-02T10:55:37.340 に答える