5

メイン メソッドは "public static void main (String[] args){}" という形式にする必要があり、int[] 引数を渡すことができないという印象を受けました。

ただし、Windows コマンドラインでは、次の .class ファイルを実行すると、int と string の両方が引数として受け入れられました。

たとえば、このコマンドを使用すると、出力 "stringers": "java IntArgsTest stringers" が得られます。

私の質問は、なぜですか?このコードがエラーなしで引数として文字列を受け入れるのはなぜですか?

これが私のコードです。

public class IntArgsTest 
{
    public static void main (int[] args)
    {

        IntArgsTest iat = new IntArgsTest(args);

    }

    public IntArgsTest(int[] n){ System.out.println(n[0]);};

}
4

4 に答える 4

19

メインメソッドに渡されるものはすべて、JVMがプログラムを開始するために使用するものであり、すべてが文字列です。int 1のように見えるかもしれませんが、実際には文字列「1」であり、それは大きな違いです。

コードを実行しようとするとどうなりますか?確かに、有効なJavaであるため、正常にコンパイルされますが、メインのメソッドシグネチャは、プログラムの開始点としてJVMに必要なシグネチャと一致しません。

コードを実行するには、次のような有効なmainメソッドを追加する必要があります。

public class IntArgsTest {
   public static void main(int[] args) {

      IntArgsTest iat = new IntArgsTest(args);

   }

   public IntArgsTest(int[] n) {
      System.out.println(n[0]);
   };

   public static void main(String[] args) {
      int[] intArgs = new int[args.length];

      for (int i : intArgs) {
         try {
            intArgs[i] = Integer.parseInt(args[i]);
         } catch (NumberFormatException e) {
            System.err.println("Failed trying to parse a non-numeric argument, " + args[i]);
         }
      }
      main(intArgs);
   }
}

そして、プログラムが呼び出されたときにいくつかの番号を渡します。

于 2012-04-17T00:49:04.153 に答える
2

さて、あなたはmain任意の数の引数を持つ名前を持つ任意のメソッドを持つことができます。mainただし、JVMは正確なシグニチャを持つメソッドを探しますpublic static void main(String[])

定義したメソッドは、クラスの単なる別のmainメソッドです。

現在、Windowsにアクセスできませんが、しばらくしてから試してみましょう。私はFedoraを試してみましたが、もちろん次の例外がありました。

Exception in thread "main" java.lang.NoSuchMethodError: main

上記の理由により、クラスは正常にコンパイルされることに注意してください。

更新: Windows 7でテストしましたが、結果は同じです。私はあなたがそれがあなたのために働いたと言った方法に驚いています。

于 2012-04-17T00:51:07.020 に答える
1

このコードは実際には実行されません。コードのコンパイル中(コンパイルにメインが必要ないため)、実行しようとすると"Main method not found"エラーが発生します。

さらに良いことに、私がそれを実行したとき、それは言った

 "please define the main method as: public static void main(String[] args)
于 2012-04-17T00:50:50.487 に答える
1

このコードには、動作しないpublic static void main (int[] args)が含まれています。JVM は引数値を文字列引数として受け取るためです。int 引数は必要ありません。したがって、int 引数が必要な場合は、文字列引数を整数引数に変換する必要があることを意味します。このコードを実行するには、有効な main メソッドが必要です (例: public static void main(String args[]) )

于 2014-07-01T10:31:03.197 に答える