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は非常に高性能な統合開発環境です。高性能すぎて、右も左も分からないうちに使っても余計にややこしいだけですが、ここまでの当入門講座をクリアする程度の知識があればその恩恵を少しは受けられると思います。さっそくインストールして使ってみましょう!
今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート
フリーランスエンジニアの収入例を見てみる→レバテックフリーランス
コメント
こんにちは。いつもお世話になっております。
経験は全くないのですが、プログラミング関係の仕事をしたくて勉強のために拝見しております。
専門書では理解しにくかったのですが、こちらのサイトは非常に理解しやすいです。
一言お礼を言いたくて挨拶させていただきました。ありがとうございます。
どうしても理解出来ないことを質問させていただくかもしれませんが、よろしくお願いします。
by 超初心者 2014/12/04 22:02
嬉しいコメントありがとうございます。
>どうしても理解出来ないことを質問させていただくかもしれませんが、よろしくお願いします。
答えられるかどうか分かりませんが、いつでも質問して下さい。
頑張って勉強して下さい!
by Nobuo@管理人 2014/12/04 22:34
起動引数には全角文字も渡せるはずですが、『残念ながら渡せるのは半角英数字のみです』と書かれているのはどういう意図でしょうか。
by js 2015/04/09 11:24
コマンドプロンプトで全角を入力出来ることを知らなかっただけです。大した意図はございません。ご指摘ありがとうございました。
by Nobuo@管理人 2015/04/09 12:42
こんにちは。いつも参考にさせてもらっています。
「classの実行です。この時に、class名の後に続いてスペースを空けて、引数に渡したい文字列を入力します。」の部分なのですが、この通りにすると、エラー:メインクラスCommandLineがみつからないかロードできませんとなるのです。
他のclassファイルは問題なく実行できるのですが、、どうもこのclassファイルだけ実行できないです。このファイルはなにか特別なのでしょうか?
コンパイルは問題なくおこなえました。
by natukusa 2015/04/25 11:17
何も特別なことないですよ。
どこかにスペルのミスなどはないかよく確認してみて下さい。
by Nobuo@管理人 2015/04/25 13:14
こんにちわ
コマンドプロンプトで
java CommandLine hikisuu1 hikisuu2
とやるのは出来るのですが、エクリプスでも同じように値を入力したいです
やり方を教えていただけると助かります
by 匿名 2016/06/09 09:27
こんにちは
教材だけでは訳がわからず色々とウェブ上で探していて、こちらにたどり着きました。
コマンドラインに値を渡して表示する方法は分かったのですが、実際の作業でどんな時にこの機能を使うのでしょうか?
by モリタ 2018/04/20 19:24
>モリタさん
メインメソッドに引数を渡したい時です。まあ特に実用的ではないかと思います。
by Nobuo@管理人 2018/04/20 23:05
[…] 【Java】 コマンドライン引数って何? […]
by eclipse フレーム に ドロップ | eclipseブログ 2019/07/02 23:53