最初に呼び出されるクラスのメソッド
Javaのプログラムがクラスからモノを作成し、モノに処理を行ってもらうことは分かりました。では次にプログラムを作成し実行した時にはまず何が行われるのかを確認します。
ではJavaのプログラムの作成から実行までの流れをもう一度確認してみます。プログラムは例えば次のようなものでした。
class クラス名{ public static void main(String args[]){ System.out.println("こんにちは"); } }
このプログラムを保存する時、ファイル名は「クラス名.java」となります。そしてコンパイルを行うと実行ファイル「クラス名.class」が作成されます。最終的にプログラムを実行する時は「java 実行ファイル」で実行しました。この実行ファイル名は「クラス名.class」から「.class」を除いたもの、すなわすクラス名となります。
このように「java クラス名」で実行した場合、引数に指定したクラスの中に記述されたmainメソッドが呼び出されることになっています。つまり下記の赤い文字の箇所のメソッドです。
class クラス名{
public static void main(String args[]){
System.out.println("こんにちは");
}
}
mainメソッドの中でまず最初に実行する処理を記述して下さい。極めて簡単なプログラムであれば、ここに行いたい処理を記述することで処理を行うことができます。
mainメソッド
mainメソッドの詳細は別のページで詳しく解説しますが、次のような書式になっています。
public static void main(String args[]){ }
引数の変数名を何にするかを除けばmainメソッドはこのように記述すると決まっています。
ところでクラスは設計図であって、何か処理を行うにはクラスからモノを作り出し、そのモノに対してメソッドを呼び出すことで実行するというのがJavaの処理の方法でした。今回の場合はプログラム起動時とはいえ指定したクラスの中のメソッドをいきなり呼び出しています。
これはmainメソッドが静的メソッドと呼ばれるもののためです。この静的メソッドというのはクラスからモノを作らなくても呼び出すことができる特殊なメソッドです。静的メソッドはメソッド名の前に「static」が付いています。
mainメソッドが無い場合
プログラムの中で記述したクラス名とプログラムのファイル名が異なっていた場合、最終的にプログラムを実行した時に指定する実行ファイル名が表すクラスがプログラムの中に無いのでエラーとなります。(「コンパイルエラーと実行時エラー」参照)。
今度はプログラムの中で記述したクラス名とファイル名は同じでも、そのクラスの中にmainメソッドが無い場合も試してみます。
例として次のようなプログラムを作成します。
class errtest{ void hello(){ System.out.println("こんにちは"); } }
このプログラムを「errtest.java」として保存しコンパイルしてみます。
コンパイルはエラーがなく無事終了しました。次に作成された実行ファイルを使ってプログラムを実行してみます。
次のようなエラーが発生しました。
Exception in thread "main" java.lang.NoSuchMethodError: main
これはJavaの実行時に指定したクラスの中にあるmainメソッドを呼び出そうとしたが、そのような名前のメソッドが見つからなかった場合に出るエラーです。
mainメソッドがある場合でも、staticを記述し忘れた場合にも同じエラーが発生します。