はじめに
Javaの学習を始めると、最初にこんなコードを見ます。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
しかし初心者の頃の私は、
- publicって何?
- staticって何?
- String[] argsって何?
- そもそもなぜ毎回書くの?
という状態でした。
今回は、Java学習で必ず登場する
public static void main(String[] args)
について、初心者向けに整理してみます。
mainメソッドとは?
mainメソッドはJavaプログラムのスタート地点です。
Javaプログラムを実行すると、
JVM(Java Virtual Machine)は
public static void main(String[] args)
を探します。
そして見つけると、
そこから処理を開始します。
イメージとしては、
家の玄関
のようなものです。
どんな立派な家でも玄関がなければ入れません。
Javaプログラムも同じで、
mainメソッドが入口になります。
なぜこの形で書くの?
Javaでは、
public static void main(String[] args)
という形が決められています。
JVMはこの形を探して実行します。
例えば次のように書くと、
public static void start(String[] args)
JVMは見つけられません。
そのためプログラムを実行できません。
1つずつ意味を見てみよう!
初心者の頃は呪文のように見えますが、
実はそれぞれ意味があります。
public
public
どこからでも呼び出せる
という意味です。
JVMがmainメソッドを呼び出すため、
アクセスできる必要があります。
static
static
オブジェクトを作らなくても呼び出せる
という意味です。
JVMはプログラム開始時に
new Hello();
のような処理を行いません。
そのため、
インスタンス生成なしで実行できる
static が必要になります。
void
void
戻り値なし
という意味です。
mainメソッドは
何かを返す必要がありません。
main
main
メソッド名です。
JVMは
main
という名前を探します。
別の名前にすると認識されません。
String[] args
String[] args
文字列の配列
です。
プログラム実行時に渡された値が入ります。
String[] args は何に使うの?
例えば次のように実行します。
java Hello Tokyo Osaka Kyoto
すると
args[0]
には
Tokyo
が入ります。
args[1]
には
Osaka
args[2]
には
Kyoto
が入ります。
実際に表示してみましょう。
public class Hello {
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
}
実行
java Hello Tokyo Osaka Kyoto
結果
Tokyo
Osaka
Kyoto
String[] args と String args[] の違い
実は次の2つは同じです。
String[] args
String args[]
どちらも
文字列配列
を表しています。
そのため、
どちらでもmainメソッドとして動きます。
ただし
String[] args
の方が一般的です。
String... args とは?
時々こんな書き方を見ます。
public static void main(String... args)
これは
可変長引数(varargs)
と呼ばれます。
難しく見えますが、
mainメソッドの場合は
String[] args
とほぼ同じです。
例えば次のコード。
public static void main(String... args) {
System.out.println(args.length);
}
実行
java Hello A B C
結果
3
内部的には配列として扱われています。
逆にこれはNG
次のコードは動きません。
public static void main(String args)
理由は簡単です。
JVMは
String[]
または
String...
を探しているからです。
これは単なる
String
なので、
入口として認識されません。
どの書き方を覚えればいい?
まずはこれだけ覚えれば十分です。
public static void main(String[] args)
実務でも学習教材でも、
ほぼこの形が使われています。
まとめ
今回のポイントを整理します。
- mainメソッドはJavaプログラムの入口
- JVMは
public static void main(String[] args)を探して実行する -
String[] argsはコマンドライン引数を受け取るための配列 -
String args[]でも動く -
String... argsも動く -
String argsは動かない
私自身、Java学習を始めた頃は
public static void main(String[] args)
をただの呪文のように書いていました。
しかし、
「Javaプログラムの入口」
という考え方が分かると、一気に理解しやすくなりました。
まずは
public static void main(String[] args)
を「Javaの玄関」として覚えておくとよいと思います。
