16

public static void main(String arg[])最近、試験でメソッドの形式mainが修正されたかどうか尋ねられました。変更できますか?、、を使わmainpublicに使用できますstaticvoid?そうでない場合、常に 意味main(String arg[])するハードコーディングされていないのはなぜですか?public static void main(String arg[])

4

9 に答える 9

26

main メソッドの署名は、Java 言語仕様のセクション 12.1.4で指定されており、次のように明確に述べられています。

メソッド main は public、static、および void として宣言する必要があります。宣言された型が String の配列である仮パラメーター (§8.4.1) を指定する必要があります。

  • そうでなければ、publicそれを呼び出すことはできません
  • staticオブジェクトを呼び出す前にオブジェクトをインスタンス化する方法がないため、これに違いありません
  • 引数のリストはString、コマンド ラインから Java プログラムを実行するときにパラメーターを渡すことができるようにするためにあります。引数なしで定義することもできたでしょうが、その方がより実用的です (そして他の言語と同様です)。
  • 戻り値の型はvoid、それ以外のものを持つ意味がないためです。Java プログラムは、メイン メソッドの最後に到達する前に (たとえば、 を呼び出すことによってSystem.exit())終了できます。

したがって、メソッド シグネチャは次のようになります。

public static void main( String[] args )
public static void main( String... args )

varargsバージョン ( ...) は Java 5 以降でのみ有効であることに注意してください。

Java 言語では、括弧[]を型または変数の後に配置できるため (一般的には最初の方が好まれます)、

public static void main( String args[] ) // valid but usually non recommended

も有効です

于 2012-04-05T12:42:56.673 に答える
2

JDKソースコード(jdk-src \ j2se \ src \ share \ bin \ java.c)を調べる場合:

/* Get the application's main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
                   "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

この署名だけが必要であることが非常に明確になります。

于 2012-04-05T12:47:37.383 に答える
0

main メソッドはpublic、クラスがロードされたときに JVM によって検出されるようにする必要があります。同様にstatic、クラスのインスタンスを作成せずに、クラスをロードした後に呼び出すことができるようにする必要があります。すべてのメソッドには戻り値の型が必要です。この場合はvoid.

于 2012-04-05T12:33:26.667 に答える
0

メソッドの引数については答えられませんが、jvm は関数にアクセスできる必要があり、jvm はクラスのインスタンスを作成する方法を知らないため静的でなければならないため、パブリックにする必要があります。

この投稿では、静的の理由について詳細な回答が得られます: Why is the Java main method static?

この投稿は、main が void である理由について適切な回答を提供します: Why is main() in Java void?

于 2012-04-05T12:34:03.633 に答える
-2

アプリ用の新しいローダーを作成する場合は、これを変更できます。public static void main(String args [])形式は、JVMで作業している人々がJavaプログラムを呼び出すために見つけたデフォルトのソリューションであるため、それを行う明確な方法があります。

今日の実際の実装では、JNIインターフェイスを使用して、この関数を使用してpublic static void main(String args [])メソッドを呼び出すだけなので、JNIを使​​用して別のメソッドを使用する場合は、まったく同じコードを簡単に記述できます。アプリをロードします。

これは、このページから取得したコードの例です。

これが現在のLinuxランチャープログラムです。メソッドルックアップはここから始まります

于 2012-04-05T12:37:05.640 に答える
-2
  • public-main() メソッドは、クラスの外部とクラスの内部のいずれかで使用する必要があるため、そのパブリック

  • クラスを定義する場合、そのクラスのオブジェクトを定義する場合、およびそのクラスを使用できる場合のみ..しかし、これの代わりに、静的という単語を直接使用して使用します

  • void-for main() は int や char のような値を返すことはできません main()-main は、Java の将来にアクセスするために使用できる関数またはメソッドです。

于 2012-09-04T17:39:07.817 に答える