【发布时间】:2013-01-04 19:49:36
【问题描述】:
非公共类Out中的静态初始化块不运行,而静态嵌套类snOut中的静态初始化块运行。这如何以及为什么会这样?
public class staticNested {
static{
System.out.println("In staticNested");
}
static class sn{
static{
System.out.println("sn in staticNested");
}
void p(){
System.out.println("In static nested class method p");
}
}
public static void main(String [] args){
sn n = new sn();
n.p();
Out.snOut no = new Out.snOut();
no.p();
}
}
class Out{
static{
System.out.println("In Out"); //Skips this
System.out.println("Here"); //Skips this
}
static class snOut{
static {
System.out.println("In snOut in Out");
}
private int x;
void p(){
System.out.println("In snOut in outside Class out: " + x);
}
}
}
这是输出:
In staticNested
sn in staticNested
In static nested class method p
In snOut in Out
In snOut in outside Class out: 0
【问题讨论】:
-
我不认为
Out类已加载。当您访问其静态字段或静态方法或创建实例时,它会加载。 我的初学者知识> -
啊。我懂了。在 main 方法中创建一个新实例会使块运行。谢谢
-
Out不加载和staticNested加载的不同之处在于 main 在staticNested中,它像您所期望的那样自动加载。