2019/02/06
sponsored link
mainメソッドに渡す引数
メソッドについての理解が深まったところで、意味も分からず覚えたmainメソッドについてもう一度よく見てみましょう。
public static void main(String[] args){ }
初めは意味不明なアルファベットの羅列だったと思いますが、ちょっと意味が分かるようになってませんか?
「public」と「static」は残念ながらまだ横へ置いておくとして、「void」は「戻り値を返しません」という意味でした。
そして後ろの( )の中には「String[ ] args」が入っていますね。これは、このメソッドはString[ ]を引数として受け取りますってことです。String[ ]というのは、Stringの配列ですね。argsはその配列変数名です(これはただの名前なんで別に「args」じゃなくても良いみたいです)。
つまり、mainメソッドを呼ぶ時に、引数にString配列を渡して処理させることができるんです。
引数を渡すと言っても、mainメソッド以外の普通のメソッドの場合なら呼び出す時に( )の中に引数を渡すことができますが、mainメソッドはclassを実行した時に勝手に呼ばれるメソッドなので、
main("引数");
こんな風に( )の中に引数を渡して呼ぶことができません。(自分でmainメソッドを呼ぼうと思えば呼べるのですが、mainメソッドの中でmainメソッドを呼んでしまうと無限ループになるので現実的に無理です。)
では、mainメソッドに引数を渡すには一体どうすればいいのか?を説明します。
コマンドライン引数
mainメソッドに渡す引数のことをコマンドライン引数と言います。
コマンドプロンプトを立ち上げて、javaファイルのコンパイルとclassの実行を行っていると思いますが、そのコンパイルコマンド(javac)や実行コマンド(java)を打ち込むところをコマンドラインと言います。そこから引数を渡すからコマンドライン引数と言うみたいです。
具体的にどうやって渡すのか見てみる前に、コマンドライン引数を受け取って処理するclassを簡単に作りましょう。受け取れるのはStringの配列です。受け取った配列の要素を一つずつ画面に出力するだけのclassにします。
CommandLine.java
public class CommandLine{ public static void main(String[] args){ for(int i=0; i<args.length; i++){ System.out.println(args[i]); } } }
for文を使って、受け取った配列の要素を全部順番に出力します。for文が分かりにくい人はこちらをどうぞ→(参考:for文って何?)
では実際に引数を渡してこのclassを実行してみましょう。まずコンパイルします。これは普通です。
で、次にclassの実行です。この時に、class名の後に続いてスペースを空けて、引数に渡したい文字列を入力します。スペースを挟んで何個でも文字列を追加していけます。
クラス名の後ろに入力した文字列がStringの配列となってmainメソッドに渡されます。これでenterを押して実行すると、
渡した文字列が順番に全部出力されました。ちゃんとmainメソッドに渡せてますね。for文を使っているので渡された配列の要素の数だけ出力されます。ぜひ、いろいろ文字列を渡してみてください。
一つ注意なのですが、mainメソッドはこのように引数を受け取れるように定義されたメソッドなのですが、別に引数無しでも問題なく実行されますよね。
けど、普通の(mainメソッド以外の)メソッドの場合、何らかの引数を受け取れるように定義すると、そのメソッドを呼ぶ際には必ず指定の型の引数を渡さないと駄目です。定義通りに引数を渡さずにそのメソッドを使うとコンパイルエラーになります。
引数を受け取れるように定義したメソッドを呼び出す時には、その型の引数を過不足なく渡さないといけないと覚えていて下さい。もし、いろんな引数を柔軟に受け取って処理させたい場合は、そのメソッドをオーバーロードする事で可能になります(参考:メソッドのオーバーロードについて)。
なんとか基本中の基本部分はクリアできたと思うので、次回はいよいよeclipseを使ってみたいと思います。
eclipseは非常に高性能な統合開発環境です。高性能すぎて、右も左も分からないうちに使っても余計にややこしいだけですが、ここまでの当入門講座をクリアする程度の知識があればその恩恵を少しは受けられると思います。さっそくインストールして使ってみましょう!
今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート
フリーランスエンジニアの収入例を見てみる→レバテックフリーランス
コメント
[…] 【Java】 コマンドライン引数って何? […]
by eclipse sysout ショートカット できない | eclipseブログ 2019/08/13 05:07