「String args []」とは何ですか?メインメソッドJavaのパラメーター


315

私はJavaでプログラムを書き始めたばかりです。次のJavaコードはどういう意味ですか?

public static void main(String[] args)
  • なにString[] args

  • いつこれらを使用しますargsか?

ソースコードおよび/または例は、抽象的な説明よりも優先されます

回答:


302

Java argsでは、提供されたコマンドライン引数Stringオブジェクトの配列として含まれています。

つまり、プログラムをjava MyProgram one twoそのargsように実行すると、が含まれます["one", "two"]

の内容を出力したい場合はargs、次のようにループするだけです...

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

51
注目に値するのは、args必ずしもargs名前を付ける必要がないことです(好きな名前を付けることができます)。ただし、慣例に従うのが最善です。String... args時々表示されることもありますが、これは同等です。
vikingsteve 2013年

68
argsのインデックス作成は0から始まります(Cがプログラムの名前を与えるのとは対照的です)
AdrieanKhisbe 14年

1
@ Daniel、argsOSに関係なくスペースで区切られることが保証されていますか?
Pacerier 2014年

@Pacerier申し訳ありませんが、私は遅れており、情報源がありませんが、私は彼らがそうであると強く信じています。私には、基礎となるシェル/ターミナルではなく、java(.exe)が引数を処理しているように見えます。テイク-version例えば、それはだjava -versionjava.exe -version、ではなくjava.exe /version(メインクラスをロードしようとする試み.version)。誰かがこれに遭遇した場合、ちょうど私の2セント。
ルーク

1
@Lukeそれは本当であるはずがありません、少なくともUnixシステムでは。そこでシェルはシェルのルールに従ってすでに分割されたプログラムに引数を渡します(それに応じて引用/エスケープが削除されます)。プログラム(この場合はJavaインタープリター)が元の分割されていないコマンドラインにアクセスする方法はありません。また、ユーザーを混乱させるため、そうすることもできません。
regnarg 2016年

112

これらは、Javaのコマンドライン引数用です。

つまり、実行すると

java MyProgram one two

次にargs含まれています:

[「1」、「2」]

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

これは、特定の方法で実行するようにアプリケーションを構成したり、必要な情報を提供したりするためです。


Javaを初めて使用する場合は、オラクルの公式のJava TMチュートリアルを読むことを強くお勧めします。


45

args呼び出し時にJavaプログラムに渡されるコマンドライン引数が含まれます。たとえば、次のようにプログラムを呼び出すと、

$ java MyProg -f file.txt

次にargs、文字列"-f"とを含む配列になり"file.txt"ます。


答えてくれてありがとう。
Chaklader Asfak Arefe

javac MyProg.java実行するには、まずコードをコンパイルする必要がありましたjava MyProg -f file.txt。答えのどこにも言及されていないので、これには理由がありますか?
stanimirsp

@stanimirsp:.class最初にJavaソースコードをファイルにコンパイルする必要があります。
ミパディ

19

次の答えは私の理解といくつかのテストに基づいています。

String [] argsとは何ですか?

回答->

String [] ->ご存知のとおり、これは単純なString配列です。

args- >は配列の名前であり、任意の名前にすることができます(a、ar、argument、param、parameterなど)。コンパイラーの問題はなく、実行されました&私もテストしました。


1)public static void main(String [] argument)

2)public static void main(String [] parameter)

いつこれらの引数を使用しますか?

回答->

main関数は、開発者によって非常にインテリジェントに設計されています。実際の考え方は非常に深いです。これは基本的に、コマンドライン引数に基づいてCおよびC ++を考慮して開発されていますが、現在では誰も使用していません。

事1-ユーザーはコマンドラインから任意のタイプのデータを入力できます。数値または文字列を使用できます。コンパイラーがデータを受け入れるために必要なのは、どのデータタイプを使用する必要がありますか?事2を見る

Thing 2- Stringは、Javaのint、long、float、double、byte、shot、charなどのすべてのプリミティブデータ型をサポートするデータ型です。任意のプリミティブデータ型で簡単に解析できます。

たとえば、次のプログラムはコンパイルおよび実行され、私もテストしました。

入力が-> 1の場合1

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] parameter)
  {    
System.out.println(parameter[0] + parameter[1]); // Output is 11

//Comment out below code in case of String
    System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
    System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0    
    System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2    
    System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0    

  }
}

13

OPもについてのみ話しているString[] argsので、の完全な例を挙げたいと思いpublic static void main(String[] args)ます。

Public:は、このメソッドにアクセスできるユーザーを定義するアクセス修飾子です。Publicは、このメソッドがどのクラスからもアクセスできることを意味します(他のクラスがこのクラスにアクセスできる場合)。

Static:クラスに関連するものを識別するキーワードです。つまり、指定されたメソッドまたは変数はインスタンス関連ではなくクラス関連です。クラスのインスタンスを作成せずにアクセスできます。

Void:メソッドの戻り値の型を定義するために使用されます。メソッドが返すことができるものを定義します。Voidは、メソッドが値を返さないことを意味します。

main:メソッドの名前です。このメソッド名は、特定の署名のみを持つアプリケーションの開始点としてJVMによって検索されます。

String[] args :は、メインメソッドのパラメーターです。

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;
...

Java の開始メソッドには名前が付けられmain、特定の署名が必要であることがわかりますpublic static void main(String[] args)

このコードpublic static void main(String[] args)は、これが修正されていないことも示しています。(jdk-src \ j2se \ src \ share \ bin \ java.c)のコードを別の署名に変更すると機能しますが、これを変更すると他の問題が発生する可能性がありますJava 仕様のため

オフトピック: OPがこの質問をしてから7年になりますが、OPは今では自分の質問に答えられると思います。


12

String [] args Javaで文字列の配列を宣言する方法でもあります。

このメソッドシグネチャではargs、メソッドが呼び出されると、配列に値が入力されます(他の例が示すように)。ただし、学習しているので、このargs配列は、次のようにメソッドで自分で作成した配列と同じであることを理解する価値があります。

public void foo() {
    String [] args = new String[2];
    args[0] = "hello";
    args[1] = "every";

    System.out.println("Output: " + args[0] + args[1]);

    // etc... the usage of 'args' here and in the main method is identical
}

12

別れる

public static void main(String args[])

部分的に。

「public」は、main()がどこからでも呼び出せることを意味します。

「静的」とは、main()が特定のオブジェクトに属していないことを意味します

「void」は、main()が値を返さないことを意味します

「メイン」は関数の名前です。main()は、プログラムの開始なので特別です。

「String []」は文字列の配列を意味します。

「args」は、String []の名前です(main()の本体内)。「args」は特別ではありません。他の名前を付けても、プログラムは同じように機能します。

  • String[] argsスペースで区切られた文字列のコレクションで、端末のプログラムに入力できます。多くの場合、初心者はこの変数を使用しませんが、念のため常に存在します。

9

コードを完成させると、それを拡張子.javaが付いたファイルに変換します。これは、ダブルクリックで実行できますが、コンソール全体(Macではターミナル、Windowsではcmd.exe)でも実行できます。多くのもの。1つは、ダブルクリックしても見えないコンソールメッセージ(System.out.printまたはSystem.out.println)を表示できることです。彼らができるもう一つのことはパラメータを指定することなので、通常は次の行を使用します

java -jar MyCode.jar

プログラムのフォルダに移動した後

cd C:My/Code/Location

Windowsまたは

cd My/Code/Location

Macでは(macのほうが扱いにくいことに注意してください)、コードを実行しますが、使用するパラメーターを指定するには

java -jar MyCode.jar parameter1 parameter2

プログラムで使用できるargs配列に格納されているこれらのパラメーターは、ユーザーが使用するファイルやプログラムが持つことができるメモリ容量などの特別なパラメーターを制御できるようにする場合に使用します。配列の使用方法を知りたい場合は、おそらくこのサイトでトピックを見つけるか、単にそれをググるだけです。任意の数のパラメーターを使用できることに注意してください。


9

簡単な素人の言葉で説明。

mainメソッドは、JVMをクラス名に向けるときにいくつかの引数を提供することを期待しています。つまり、ファイル名がTry.javaであるとします。これをコマンドプロンプトで実行するには、「javac Try.java」と入力してコンパイルし、次に「java Try」と入力して実行します。ここで、単に「java Try」と書くのではなく、「java Try 1」と書くとします。ここで引数「1」を渡しました。これは、コードで使用しなくても、メインメソッドによって取得されます。

メインメソッドが実際に引数「1」を取得したかどうかを確認する場合。単純に、メインメソッド内で次のように入力します。

for(int i = 0; i < args.length; i++) {
        System.out.println("Argument is: "+args[i]);
    }

7

私はそれString args[]を実行時にアプリケーションに渡すことができる文字列引数の配列である上記の回答でかなりうまくカバーされていると思います。完了のために、メソッドに渡されたmainメソッドパラメータをString型の可変引数(varargs)として定義することも有効であると付け加えます。

public static void main (String... args)

つまり、mainメソッドは文字列配列(String args[])またはvarargs(String... args)をメソッド引数として受け入れる必要があります。そして名前にargsも魔法はありません。あなたは同様に書くargumentsfreddiefujiwara、以下に示すようにさえするかもしれません。

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)


6

コンソールからJavaクラスを実行すると、メインメソッドが呼び出されます。これが発生するためには、このメインメソッドの定義は

public static void main(String [])

この文字列配列がargsと呼ばれることは標準的な規則ですが、厳密には必須ではありません。この配列は、プログラムを呼び出すときにコマンドラインで入力します。

java MyClass a b c

これらは一般に、書き込みや読み取りを行うファイルなど、プログラムのオプションを定義するために使用されます。


6

パブリック静的な無効メイン(文字列引数[]) 引数データ型Stringでコンソールライン引数の配列です。下に示すように、この配列には、コマンドラインでそれらを呼び出すことによって、さまざまな文字列引数を格納することができます: javaのMYPROGRAMシャンロイヤル その後、シャンとロイヤルは、引数[0] =「シャン」として、配列に格納されます。arg [1] = "ロイヤル"; コマンドラインで呼び出さない場合は、プログラム内でも手動で行うことができます。


3

スタイルdataType[] arrayRefVarが優先されます。このスタイルdataType arrayRefVar[]はC / C ++言語に由来し、C / C ++プログラマーを収容するためにJavaで採用されました。


1

String[] argsあなたはOSのコマンドラインからアプリケーションを実行しているときのパラメータは、パラメータとして渡された文字列の配列です。

それでは、myApp.jarJavaアプリケーションをコンパイルしてパッケージ化したとします。もちろん、OSでアプリをダブルクリックしてアプリを実行できますが、コマンドラインを使用して実行することもできます(例:Linux)。

user@computer:~$ java -jar myApp.jar

次のようないくつかのパラメーターを渡してアプリケーションを呼び出す場合:

user@computer:~$ java -jar myApp.jar update notify

java -jarこのコマンドは、あなたの文字列を渡しますupdateし、notifyあなたへpublic static void main()方法。

その後、次のようなことができます:

System.out.println(args[0]); //Which will print 'update'
System.out.println(args[1]); //Which will print 'notify'

0

以前のすべてのコメントに加えて。

public static void main(String[] args) 

次のように書くことができます

 public static void main(String...arg)

または

 public static void main(String...strings)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.