本記事の目次
あともう一言:なぜmain()メソッドにstaticを付けるのか
Java言語の勉強を始めた筆者の若かりしころ、main()
メソッドになぜstatic
を付けるのか不思議でした。先輩に聞いても「仕様だから」という返事。でも、staticをしっかり理解したときに納得できました。
理由は、Java実行環境(JVM)はクラスを実行するとき、そのクラスを自動的にはインスタンス化しないためです。Java実行環境が最初に実行するmain()
メソッドは、インスタンス化なしにアクセスできるstaticメソッドでなければなりません。
例えば、main()
メソッドを持つTest
クラスをコンパイル後、java Test
コマンドで実行すると、Java実行環境はTest.main()
というstaticメソッドを最初に呼び出そうとします。ここでmain()
メソッドが非staticメンバだと、最初に実行すべきメソッドにアクセスできず、プログラムは動き出せません(エラーになります)。
main()
メソッドのアクセス修飾子、戻り値、引数リストは、Java言語の仕様で決められています。この仕様に従う必要がある理由をまとめておきます。
public |
どこからでも呼び出せる → main() メソッドはJava実行環境が呼び出すため、パッケージが異なってもアクセスできなくてはいけない |
---|---|
void | Java実行環境に返す戻り値はない |
main |
java コマンド実行時は、Java実行環境がクラス名.main() と呼び出す仕様になっており、名前を合わせる必要がある |
String[] args |
もし、実行時にコマンドライン引数があれば、String 型の配列でJava実行環境がプログラムへ渡す仕様になっている |
次回は「オーバーロードとオーバーライド」を取り上げます。お楽しみに。