🟢 はじめに
Javaの学習を始めたばかりの時、public static void main(String[] args) の args って一体何だろう?と疑問に思ったことはありませんか?
今回は、プログラム実行時に渡す「コマンドライン引数」の仕組みと、ちょっと引っかけになりやすい「スペース」や「ダブルクォーテーション("")」の扱い方について、分かりやすく解説します!☕️
今回のお題:3つの言葉を繋げてみよう!
例えば、AIを使ってオリジナル楽曲を作るプログラムがあるとします。
プログラムを実行する時に、外から「ジャンル」「曲名」「状態」の3つの言葉を渡して、画面に繋げて表示させてみましょう。
public class MusicRelease {
public static void main(String[] args) {
// 3つの引数をそのままピタッと連結して表示します
System.out.println(args[0] + args[1] + args[2]);
}
}
【目指す実行結果】
AI音楽 夏色の航路 完成!
よく見ると、文字と文字の間にスペースが入っていますね。
これをコマンドプロンプト(黒い画面)から実行して、この通りの結果を出すにはどうコマンドを打てばいいのでしょうか?
💡 ポイント1:引数は「スペース」で区切られて別々の箱に入る!
まず大前提として、コマンドライン引数(args)は「番号札のついた箱📦」のようなものです。
コマンドを打つ時、言葉と言葉の間にスペースを空けると、Javaは「あ、ここで別の箱に入れるんだな!」と判断します。
❌ 失敗例:そのまま打ってみる > java MusicRelease AI音楽 夏色の航路 完成!
これを実行すると、箱の中身はこうなります。
📦 args[0] = AI音楽
📦 args[1] = 夏色の航路
📦 args[2] = 完成!
これらを args[0] + args[1] + args[2] でピタッと連結すると……
結果: AI音楽夏色の航路完成! (スペースが消えて、文字が全部くっついてしまいました💦)
💡 ポイント2:スペースごと1つの箱に入れたい時は「""」で包む!🎁
スペースを「区切り」としてではなく、「文字の一部」として認識させたい時に登場するのが、魔法のアイテムダブルクォーテーション("")です!
⭕️ 成功例:ダブルクォーテーションを使う > java MusicRelease "AI音楽 " "夏色の航路 " 完成!
"" で包んであげると、中のスペースも含めて「これで1つのセットですよ」とJavaに伝えることができます。
📦 args[0] = AI音楽 (後ろにスペースあり!)
📦 args[1] = 夏色の航路 (後ろにスペースあり!)
📦 args[2] = 完成!
これを連結すれば、見事 AI音楽 夏色の航路 完成! と綺麗に表示されます🎉
⚠️ 初心者がハマりやすい落とし穴
全部 "" で囲んでしまう > java MusicRelease "AI音楽 夏色の航路 完成!"
これをやると、全部まとめて0番の箱(args[0])に入ってしまいます。
プログラムは1番と2番の箱も開けようとするので、「箱がありません!」とエラー(例外)になってプログラムが強制終了してしまいます💥。
\" を使ってしまう > java MusicRelease "\"AI音楽\"" ... \" は「ダブルクォーテーションそのものを文字として表示したい」という特別な書き方(エスケープシーケンス)です。
実行結果に " という記号自体が混ざってしまうので注意しましょう!
💡 ポイント3:java Main でも java Main.java でも動く!?🚀
実は、Java 11というバージョンから、「コンパイル(javac)しなくても、.java ファイルを直接実行できる」という超便利な機能が追加されました!
つまり、先ほどの成功例は以下の書き方でも全く同じように動きます。
⭕️ もう一つの成功例(直接実行) > java MusicRelease.java "AI音楽 " "夏色の航路 " 完成!
ちょっとしたプログラムの動作確認をしたい時に、いきなり java ファイル名.java と打って実行できるのは、開発のスピードが上がってとても便利ですね!
📝 まとめ
引数はスペースで区切られて別々の箱(配列)に入る📦
スペースを含めたい時は **""(ダブルクォーテーション)で包む🎁
全部を "" で包むと、大きな1つの箱に入ってしまうので注意!
Java 11以降なら java Main.java のように直接実行も可能🚀
コマンドライン引数の扱いは、Javaの基本でありながら意外と奥が深いです。
同じように「コマンドライン引数の仕組みと、「スペース」や「ダブルクォーテーション("")」の扱い方がいまいち分からない😵💫」と悩んでいる方の参考になれば幸いです🙌