考虑以下示例:
class Super{
static String ID = "1234";
}
class Sub extends Super{
static{ System.out.println("In Sub");
}
public static void main(String ...args){
System.out.println(Sub.ID);
}
我的理解方式是:如果这是 main 中的 new Sub() ,它将调用 Super 类的 super() 构造函数,显然首先执行静态初始化程序(如果有),然后执行 Sub 中的静态初始化程序,然后是非静态 init block 和按此特定顺序构造函数。
话虽如此,这个程序打印了“1234”,如果 Sub 没有继承静态字段怎么办,这不应该是一个编译错误吗?
最佳答案
您可以通过该类型的子类型的表达式来访问该类型的(可访问的)静态
成员。在编译时,它被解析为通过声明类型(本例中为 Super
)的访问。
关于java - Java 静态字段的访问和初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28550536/