JavaのHello,Worldにくっついてくる例のおまじないは一体何なのか?
最初に入力するのはいつもHello,Worldということで、まずは実行結果。
実行はIntelliJであればコードを入力してすぐ左側の再生ボタン→実行とするか、キーボードショートカット Ctrl+Shift+F10で実行する。
public class Main {
public static void main(String[] args) {
System.out.println("Hello,World!);
}
}
これで下段にHello,Worldが出る。けどおまじないの方が長い。
何なんだコレは。気になる。
ということで、おまじないを分解してスッキリしたいので、出来るだけ和訳してみた。
外枠を和訳してみる
public …これはどこからでもアクセス可能な、
class …クラスです。
Main …Mainという名前の。
外枠はクラス宣言。Javaは基本的にファイル名=クラス名になるので、Mainというファイルを作ればMainというクラス名が自動的に宣言される。
続いて内枠の和訳
public …これはどこからでもアクセス可能で
static …静的メソッドの
void …戻り値の無い
main …mainという名前のメソッドです。
(String[] args) …文字列の配列を引数に取り、argsという変数に入れて扱います
内枠はメソッド宣言。mainメソッドはString配列を取る戻り値の無い静的メソッドです。という宣言をしている。
publicはいいとして、staticは?
mainメソッドが走るとき、何もインスタンスが無いから。
voidも変更できない。変更するとこんな風に怒られる。
このmainというメソッド名にも意味があって、変更するとエラーになる。
じゃこのややこしい書き方をしてる引数は一体何なのか?
これはコマンドライン引数。
コマンドライン引数とは?
コマンドラインからプログラムを起動するときに渡される引数のこと
IntelliJの通常の実行ではコマンドライン引数を使えないが、コマンドラインでjavaを実行する時には引数を渡してプログラムを実行することが可能になる。
そのためにまずはjavacコマンドでコンパイルする必要がある。
javac Main.java
このコマンドを打ち込むことでjvmがMain.javaファイルをコンパイルし、Main.classファイルを作る。
次にこのクラスファイルを実行する。
java Main
このとき.classというファイル名は不要。
そしてこの後ろに付け加えるのがコマンドライン引数の渡し方。
試しにMainクラスがコマンドライン引数を使うようにプログラムを変更してみる。
public class Main {
public static void main(String[] args) {
System.out.println(args[0]);
System.out.println(args[1]);
}
}
プログラム内でコマンドライン引数はargsという名前の配列として扱われる。
このプログラムをコンパイルし、実行時に引数を渡してみよう。
java Main apple orange
//apple
//orange
javaを初めて触る人はしばらくの間定型文としてお世話になるこのおまじない。実はちゃんと意味と仕事があるということで、少しはスッキリできたような気がする。