を拡張I'am 2つのクラスは、単一のクラスファイルにコンパイルされている初期化ブロック初期化ブロックは、ここで
class Father{
Father() {
System.out.println("Father constructor runs...");
}
static {System.out.println("static init block of Father...");}
{System.out.println("instance init block of Father...");}
}
class Child extends Father {
Child() {
System.out.println("Child constructor runs...");
}
static {System.out.println("static init block of Child ...");}
{System.out.println("instance init block of Child ...");}
public static void main (String[] argv) {
new Child();
}
}
と自信を取って自分のコードスニペットです:Child.class 私は実行
static init block of Father...
static init block of Child ...
static init block of Child ...
instance init block of Father...
Father constructor runs...
instance init block of Child ...
Child constructor runs...
:コマンドラインのjava子供を持つことは
これが私の出力に含まです
"静的initブロックof Child ..."が2回印刷されていることを除いて、この出力でうまくいきます。 Javaのドキュメントから、「静的initブロックは、クラスが最初にロードされたときに実行されます。
これは、私のクラスのChildが2回ロードされたことを意味しますか?
すべてのヘルプを再現する アルベルト
これを試してみました。「静的initブロックの子」は、OpenJDK Runtime Environment(IcedTea6 1.9.13)(6b20-1.9.13-0ubuntu1〜10.10.1)を使用して)一度だけ印刷されました。このコードでメッセージを2回受け取ってもよろしいですか? – esaj