带有extends的初始化块

时间:2012-03-24 10:21:56

标签: java initialization

这是我的代码片段,我对初始化块充满信心

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 我用命令行java Child

运行它

这是我的输出:

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...

我对这个输出很好,除了“Child的静态初始化块...”打印两次这一事实。从java文档中我读到“静态初始化块在首次加载类时运行ONCE”。

这是否意味着我的班级Child被加载两次?

感谢任何帮助 谢谢 阿尔贝托

1 个答案:

答案 0 :(得分:2)

无法重现 - 这是我从代码中通过命令行运行它得到的输出:

static init block of Father...
static init block of Child ...
instance init block of Father...
Father constructor runs...
instance init block of Child ...
Child constructor runs...

你还没有说过你是如何运行代码的,但是我怀疑输出并不是你想象的那样,或者你是以某种奇怪的方式运行它

您的期望是正确的:静态初始化程序块只能运行一次。

相关问题