|
|
mainメソッドと引数 |
H.Kamifuji . |
プログラムを実行すると最初に呼び出されるmainメソッドもメソッドの一つであり呼びだす時に引数を渡すことができます。ここではプログラムを実行する時に値を指定してmainメソッドで値を受け取る方法を確認します。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
|
Javaのプログラムが実行されるとまず最初に呼び出されるメソッドがmainメソッドです。mainメソッドの定義を改めて書くと次のようになっています。 class クラス名{ public static void main(String args[]){ /* ... */ } }見ていただくと分かりますがmainメソッドにもStringクラスの配列の引数が1つ設定されています。ただmainメソッドは特別なメソッドでプログラム内から呼び出されることはなくプログラムの実行時に一度だけ自動的に呼び出されるものです。mainメソッドを呼び出す時に引数に渡す値はいつどこで指定するのでしょうか。 実はmainメソッドに値を渡す場合にはプログラムを実行する時に値を指定することで、mainメソッドに対して値を渡すことが可能となります。値を指定してプログラムを実行する場合は次の書式となります。 java クラスファイル名 値1 値2 ...値を指定してプログラムを実行する場合は「java クラスファイル名」の後に半角スペースを一つ入れた後にmainメソッドに渡したい値を記述します。複数の値を記述する場合は半角スペースで区切り続けて記述して下さい。このようにプログラムの実行時に指定する値をコマンドライン引数と呼びます。 指定された値はmainメソッドが呼ばれる時にStringクラスの配列として渡さ、その配列の要素に順に値が格納されています。その為、mainメソッドの中で配列の要素を参照することでプログラム実行時に指定された値を取り出すことができます。 public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); }mainメソッドの引数をうまく利用することで、プログラム実行時に指定した値を処理するようなプログラムを作成することができます。 なお、引数のデータ型はStringクラスのオブジェクトですので、指定された値は全て文字列として扱われます。数値を指定した場合でも数値からなる文字列として扱われますので注意して下さい。 では簡単な例で試しておきます。 サンプルプログラム下記のサンプルを実行してみよう。class JSample1_1{ public static void main(String args[]){ System.out.println("「" + args[0] + "」"); } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxxxx@dddddddddd Main]$ java JSample1_1 hello 「hello」 [xxxxxxxx@dddddddddd Main]$ java JSample1_1 coffee 「coffee」 [xxxxxxxx@dddddddddd Main]$ java JSample1_1 bye 「bye」 [xxxxxxxx@dddddddddd Main]$実行する時に指定した値が引数としてmainメソッドに渡されている事が確認できます。 |
コマンドライン引数は任意の数を指定することができます。複数指定する場合はカンマではなく半角スペースを区切り文字として続けて記述します。 java クラスファイル名 値1 値2 ...mainメソッドではStringクラスの配列としてコマンドライン引数を受け取ります。 public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); }コマンドライン引数を2つ指定した場合は2つの要素を持つ配列となり、3つ指定した場合は3つの要素を持つ配列となります。 mainメソッドで引数を利用したプログラムを作成する場合、本当にコマンドライン引数をが指定されてプログラムが実行されているのか確認しなければなりません。またコマンドライン引数の数だけ何か処理を行うような場合でもコマンドライン引数がいくつ指定されたか確認する必要があります。確認するにはmainメソッドの引数に指定された配列の長さを取得します。 配列変数名.length例えばコマンドライン引数が必ず1つ指定されていなければいけない場合、例えば次のような記述を行います。 public static void main(String args[]){ if (args.length != 1){ System.out.println("引数を1つ指定して下さい"); System.exit(1); } /* 本来行うべき処理 */ }プログラム実行時に指定されたコマンドライン引数の数を配列の長さで確認し、もしも1つでなかった場合はメッセージを表示した上でプログラムを終了しています。「System.exit(1)」はプログラムを終了させるための式であり引数に0以外を指定するとステータスとして正常ではなく形で終了したことを表します。 コマンドライン引数を利用する場合には、異なった形で引数が指定されて実行された時にプログラムの実行方法を表示するような処理を記述しておくと親切です。 では簡単な例で試しておきます。 サンプルプログラム下記のサンプルを実行してみよう。class JSample2_1{ public static void main(String args[]){ if (args.length != 2){ System.out.println("引数を2つ指定して下さい"); System.out.println("JSample2_1 値1 値2"); System.exit(1); } System.out.println("「" + args[0] + "」"); System.out.println("「" + args[1] + "」"); } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxxxx@dddddddddd Main]$ java JSample2_1 引数を2つ指定して下さい JSample2_1 値1 値2 [xxxxxxxx@dddddddddd Main]$ java JSample2_1 Hello Bye 「Hello」 「Bye」 [xxxxxxxx@dddddddddd Main]$引数を2つ指定せずに実行すると実行の仕方が表示されプログラムは終了します。2つ指定して実行した場合だけ、その後の処理が実行されます。 |
|