【发布时间】:2012-03-24 10:21:55
【问题描述】:
这是我的代码 sn-p,我对初始化块充满信心
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 文档中,我读到“静态初始化块在第一次加载类时运行一次”。
那么这是否意味着我的类 Child 被加载了两次??
感谢任何帮助 谢谢 阿尔贝托
【问题讨论】:
-
我试过了,
static init block of Child只打印了一次(使用 OpenJDK 运行时环境 (IcedTea6 1.9.13) (6b20-1.9.13-0ubuntu1~10.10.1))。您确定您收到了两次使用此代码的消息吗?
标签: java initialization