16

重複の可能性:
main() メソッドを使用せずにコンソールにメッセージを出力する

メインメソッドを書かにJAVAプログラムを実行する方法を誰かが提案できますか..

例:

System.out.println("Main not required to print this");

クラスでpublic static void main(String arg[])を使用せずに、上記の行をコンソールに出力するにはどうすればよいですか。

4

4 に答える 4

38

Java 6までは、 main() メソッドを使用せずにコンソールにメッセージを印刷するという質問で指摘されているように、静的初期化ブロックを使用してこれを行うことができました。たとえば、次のコードを使用します。

public class Foo {
    static {
         System.out.println("Message");
         System.exit(0);
    } 
}

System.exit(0)、JVM がメソッドを探す前にプログラムを終了させますmain。そうしないと、次のエラーがスローされます。

スレッド「メイン」での例外 java.lang.NoSuchMethodError: メイン

ただし、Java 7では、これはもう機能しません。コンパイルしても、実行しようとすると次のエラーが表示されます。

プログラムは正常にコンパイルされましたが、メイン クラスが見つかりませんでした。メイン クラスには次のメソッドが含まれている必要があります: public static void main (String[] args)。

ここでの代替手段は、独自のランチャーを作成することです。この方法で、必要に応じてエントリ ポイントを定義できます。

記事JVM Launcherには、開始するために必要な情報が記載されています。

この記事では、Java 仮想マシン ランチャー (java.exe や javaw.exe など) を作成する方法について説明します。Java 仮想マシンが Java アプリケーションを起動する方法について説明します。使用している JDK または JRE に関するより多くのアイデアが得られます。このランチャーは、Java Native Interface を備えた Cygwin (Linux エミュレーター) で非常に便利です。この記事は、JNI の基本的な知識があることを前提としています。

于 2012-07-10T20:42:36.190 に答える
27

JDK6 までは、静的初期化ブロックを使用してメッセージを出力できました。このようにして、クラスがロードされるとすぐにメッセージが出力されます。トリックは、別のプログラムを使用してクラスをロードすることになります。

public class Hello {
  static {
    System.out.println("Hello, World!");
  }
}

もちろん、プログラムを asjava Helloで実行すると、メッセージが表示されます。ただし、コマンドは失敗し、次のメッセージが表示されます。

スレッド「メイン」での例外 java.lang.NoSuchMethodError: メイン

[編集]System.exit(0)他の人が指摘したように、メッセージを出力した直後に呼び出すだけで NoSuchmethodError を回避できます。

staticJDK6 以降では、初期化ブロックからのメッセージは表示されなくなりました。詳細はこちら

于 2012-07-10T20:39:15.557 に答える
14
public class X { static {
  System.out.println("Main not required to print this");
  System.exit(0);
}}

を使用してコマンドラインから実行しjava Xます。

于 2012-07-10T20:38:59.253 に答える
3

私が覚えているアプレットは main メソッドを必要としませんが、技術的にはプログラムであるかどうかはわかりません。

于 2012-07-10T20:47:07.573 に答える