gpt4 book ai didi

java - 静态初始化 block 跳过

转载 作者:行者123 更新时间:2023-11-30 06:26:33 25 4
gpt4 key购买 nike

非公共(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

最佳答案

根据 JLS 8.1.3

声明发生在静态上下文中的内部类 I 的实例没有词法封闭实例

在您的代码中,您试图访问静态类 sn,因此根据规范,它不会包含任何封闭类。这就是封闭类的静态 block 未执行的原因。

关于java - 静态初始化 block 跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com