非公共(public)类 Out
中的静态初始化 block 不运行,但静态嵌套类 snOut
中的静态初始化 block 运行。这是如何以及为何可能的?
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
最佳答案
其声明发生在静态上下文中的内部类I的实例没有词法封闭实例。
在您的代码中,您尝试访问静态类sn,因此根据规范,它不会有任何封闭类。这就是为什么封闭类的静态 block 没有执行的原因。
关于java - 静态初始化 block 跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163917/