質問: JAVAのオブジェクト指向を勉強・練習している者です。 説明が下手ですいませんが、「スッキリわかるJava入門 第2版 (スッキリシリーズ) 」(P304~P305)にて **「mainメソッドを持つクラスがないと、その他のクラスを起動して動かすことはできない」**と書かれていたのですが、 なぜ**mainメソッドを含むクラスがないと、動かすことができない**のですか? **mainメソッドを含むクラス**等は**現実世界に模している訳でもない**し、**インスタンス化して利用するものでもない**と思うのですが なぜJavaはmainメソッドから含むクラスから起動されるようになっているのですか? よろしくお願いします。
回答: もし、プログラムの各命令文をトップレベルに並べて書くことができるのであれば、上から順番に実行するだけで済むでしょう。実際にそのような言語も数多くあります(特にスクリプト言語)。 では、Javaのような必ずクラスを作ってその中にメソッドを作るような場合や、Cのように各命令文は関数の中にしか書けないような言語の場合はどうなるでしょうか?コードに存在するのは、クラスやメソッド(関数)の定義だけで、それがすぐさま実行されるわけではありません。こんな時に、一体どこから始めれば良いのでしょうか? その最初に始めるところを**エントリーポイント**と言います。Javaではクラスのsaticなmainというメソッドをエントリーポイントにし、javaコマンドで実行時に指定したクラスのstaticなmainというメソッドから始めると**言語の仕様として決めました**。なぜmainという名前なのかはJavaを作った人に聞かないとわからないでしょう。 なお、なぜstaticなメソッドなのかは、Javaにはオブジェクトそのものを定義する方法がなく、起動時にインスタンスが存在しないからです。クラスしか無いため、staticなメソッドを使うしかありません。Scalaという同じJava VMを使う言語では、オブジェクトそのものを作れるため、オブジェクトのメソッドとしてmainを定義するようになっています。(それ以外にも、Scalaをスクリプトとして実行した場合は、トップレベルがmainとみなされます)