Javaのmainメソッドとは、必ずはじめに実行されるJavaプログラムのメソッドのことだ。
何もわからないうちもなんとなく「void main」と打っていたと思うが、これもmainメソッドさえあればJavaプログラムは実行できるためだ。
このページではmainメソッドについてお伝えしよう。
mainメソッドとは?
Javaプログラムには最初に実行されるメソッドがある。それはmainメソッドと呼ばれるもので、プログラムの開始はすべてこのmainメソッドから開始される。次のサンプルプログラムを見てみよう。
1 2 3 4 5 |
public class ClassSample { public static void main(String args[]){ System.out.println("Hello! World!"); } } |
Javaの入門書や初心者向けWebサイトでよく見かける「Hello!World!」という文字をコンソールに表示するだけのプログラムだが、このプログラムを見るとmainメソッドに書かれていることがわかる。
このような短いプログラムでも、数多くのクラスで構成されているプログラムでも、Javaプログラムはこのmainメソッドから始まるということを覚えておこう。
mainメソッドがないとどうなる?
プログラムにmainメソッドがないとどうなるのだろうか?次のサンプルプログラムを見てみよう。
1 2 3 4 5 |
public class ClassSample { public static void start(String args[]){ System.out.println("Hello! World!"); } } |
mainの代わりにstartという名前を付けている。このプログラムの場合、コンパイルは成功するが、実行すると次のようなエラーが返される。
1 2 |
java.lang.NoSuchMethodError: main Exception in thread "main" |
"java.lang.NoSuchMethodError:main"は「mainというメソッドがないためにエラーが発生している」という意味で、プログラムが最初に実行すべきmainメソッドを探したが、見つけられなかったために発生している。
このように、Javaプログラムではmainメソッドがプログラムの入り口となって実行されるため、mainメソッドを正しく準備しておく必要があるのだ。
mainメソッドの書式
mainメソッド次のような書式で設定される。
1 2 3 4 5 |
public static void main(String args[]){ (処理内容) } |
"public"とはアクセス修飾子のことで、プログラムの公開範囲を意味している。mainメソッドのアクセス修飾子はpublicでなければならない。"public"を省略したり、別のアクセス修飾子を指定したりすると実行できないので注意しよう。
"static"とは「静的」という意味だ。詳しくはまた別の機会に説明するが、"static"なクラスは特別な宣言をしなくても実行することができる。
それでは、mainメソッドの引数に設定されている"args[]"とは何を意味するのだろうか。mainメソッドはプログラムの入り口となっていることは説明したが、"args[]"はプログラムが実行されるときに渡される情報を意味している。
これはコマンドラインでJavaプログラムを実行するとよくわかる。コマンドラインから前出のサンプルプログラム"SampleClass"を実行する場合、コマンドは次のようになる。
$ java SampleClass
通常はこのように実行するが、次のように引数を渡して実行することもできる。
$ java SampleClass "SampleArg1" "SampleArg2"
この場合、"SampleArg1"、"SampleArg2"がSampleClassの実行時の引数として渡されているが、この引数がmainメソッドの引数"args[]"にあたる。
外部プログラムから連携する際など、引数を指定して実行するケースがあるが、そのような場合に使われているので覚えておこう。
まとめ
このページでは基礎的な知識としてJavaのmainメソッドについてお伝えしてきた。
Javaを触っていく上で必ず知っておきたい知識だ。参考にしていただければと思う。