コマンドライン引数の利用

最終更新日: 2019年9月15日 14時30分

目次

講義の目的

コマンド引数を使ってJavaが実行できる

1. コマンドライン引数

プログラムを実行するとき、入力したデータによって処理内容を変更したいことがあります。 そういった場合、コマンドライン引数を利用することがあります。

例えば、「プログラムを実行するときに任意の日付を使いたい。」

このような場合に、実行するプログラムの引数に日付を渡して実行します。

2. コマンドライン引数を使ったJavaの実行

コマンドラインからプログラムに引数を渡すには、以下のコマンドを使います。

java クラスファイル名 値1

引数は一つだけでなく、複数渡すこともできます。複数渡す場合は、コマンドを以下のように変更します。

java クラスファイル名 値1 値2 ...

コマンドを実行すると、mainメソッドはStringクラスの配列args引数を受け取ります。

より理解を深めるためにコードを実装して動きを確認していきましょう。

public class HelloWorldOption {
    public static void main(String[] args) {
        System.out.println("option 1 is " + args[0]);
        System.out.println("option 2 is " + args[1]);
    }
}

mainメソッドの仮引数の配列を指定して出力しているだけのコードです。コマンド引数を指定してコードを実行します。

$ java HelloWorldOption.java Hello World
option 1 is Hello
option 2 is World

値1に「Hello」、値2に「World」の文字列を指定してHelloWorldOption.javaファイルを実行しています。

ファイル名の後にオプションで指定した「Hello」「World」がString型のargs配列に格納されます。

配列String argsの中
fig1. 配列String argsの中

なのでargs[0]を出力すると「Hello」、args[1]を出力すると「World」の文字列が表示されます。

では、上記の内容が理解できているか確認するために問題を一つ出します。

上記のプログラムをオプション引数なしで実行すると、結果はどうなるでしょうか。

考えてみてください。

答えがわかったら、実際にオプションなしでプログラムを実行してみましょう。

$ java HelloWorldOption.java
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
  at HelloWorldOption.main(HelloWorldOption.java:3)

正解は「ArrayIndexOutOfBoundsExceptionの例外を投げる」でした。

これは配列データが0なのに、配列データにアクセス(System.out.println("option 1 is " + args[0]);)しているために発生します。

正解できたでしょうか。間違えた場合は、きちんと復習してください。

3. まとめ

この講義では、Java言語のコマンドライン引数の利用について学習しました。

これはツールの作成やバッチ処理のときによく利用する技術です。必ず押さえておいてください。