一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです。

【Java】 コマンドライン引数って何?

time 2013/03/15

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を実行してみましょう。まずコンパイルします。これは普通です。

command

で、次にclassの実行です。この時に、class名の後に続いてスペースを空けて、引数に渡したい文字列を入力します。さらに続けてスペースを挟んで何個でも文字列を追加していけます(残念ながら渡せるのは半角英数字のみですAlt+半角/全角キーで全角かな入力に切り替えることも出来ます)。それがStringの配列となってmainメソッドに渡されます。こんな感じです。

command2

これでenterを押して実行すると、

command3

渡した文字列が順番に全部出力されました。ちゃんとmainメソッドに渡せてますね。for文を使っているので渡された配列の要素の数だけ出力されます。ぜひ、いろいろ文字列を渡してみてください。

 一つ注意。mainメソッドの定義には仮引数「String[ ] args」を入れても(引数を受け取れるように定義しても)、実行する際に別に何も渡さなくても問題なく実行されますよね。けど、普通の(mainメソッド以外の)メソッドの場合、その定義部分で仮引数を入れると(引数を受け取れるように定義すると)、そのメソッドを呼ぶ際には絶対に引数を渡さないと駄目です。なぜmainメソッドは引数を渡さなくてもいいのか?はちょっと難しいので割愛させて下さい。。
 引数を受け取れるように定義したメソッドを呼び出す時には、その型の引数を過不足なく渡さないといけないと覚えていて下さい。もし、いろんな引数を柔軟に受け取って処理させたい場合は、そのメソッドをオーバーロードする事で可能になります(参考:メソッドのオーバーロードについて)。

 なんとか基本中の基本部分はクリアできたと思うので、次回はいよいよeclipseを使ってみたいと思います。eclipseは非常に高性能なプログラミングツールです。高性能すぎて、右も左も分からないうちに使っても余計にややこしいだけですが、ここまでの当入門講座をクリアする程度の知識があればその恩恵を少しは受けられると思います。さっそくインストールして使ってみましょう!

sponsored link

Androidアプリを作ろう

コメント

  • こんにちは。いつもお世話になっております。
    経験は全くないのですが、プログラミング関係の仕事をしたくて勉強のために拝見しております。
    専門書では理解しにくかったのですが、こちらのサイトは非常に理解しやすいです。
    一言お礼を言いたくて挨拶させていただきました。ありがとうございます。
    どうしても理解出来ないことを質問させていただくかもしれませんが、よろしくお願いします。

    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

down

コメントする



CAPTCHA


一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

私の作ったWordPressテーマ

プロに教わるオンライン学習

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

[オススメpoint]

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

[オススメpoint]

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊!

只今、急拡大中

ゲームを作りたい人専門

個人フットサル予約サイト

ガチ専門

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門