プロが教えるわが家の防犯対策術!

class Test{
public static void main(String args[]){
ObjectVector vect = new ObjectVector();
vect.at(0, "HogeHoge");
vect.at(1, new Test());

String str1 = (String)vect.at(0);
String str2 = (String)vect.at(1);
}
}
このサンプルプログラムで、「Testクラスのインスタンス」がObjectVectorに入っているのですが、Testクラスはmain()を含んでいるのでmainの中に、mainを含んでいる場合の動作が分かりません。教えてください。

A 回答 (1件)

public static void main(String[] args)


という宣言から分かるように、Testクラスのメソッドmainは静的なメソッドです。静的なメソッドは、JavaVM上で一つしか存在しません(インスタンスメソッドでもJavaVM上には一つしか存在しませんが)。なので、ObjectVectorクラスの中でインスタンス化しているTestクラスのインスタンスがそれぞれmainを持っている訳ではないので、Testクラスをいくらインスタンス化しても影響はありません。
 仮に静的メソッドではなくインスタンスメソッドだったとしても、ObjectVectorクラスの中でインスタンス化したTestクラスのmainメソッドを呼び出さない限りは何も起こりません。
 mainメソッドは、あくまでJavaVMから起動される時に最初に実行されるもので(コマンドラインから java Test という風にクラス名を指定する事でJavaVMがTest#main()を実行します)、それ以外は単なる静的メソッドがあるだけと何も変わりません。mainはスタートアップメソッドに「なる事ができる」だけであって、mainメソッドが含まれるクラスをインスタンス化しただけで自動的にmainが呼ばれる訳ではありません。
    • good
    • 0
この回答へのお礼

ありがとうございました。よく分かりました。

お礼日時:2009/03/31 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!