class Super { static String ID = "SUPER_ID"; }
class SubClass extends Super{
static { System.out.print("In SubClass"); }
}
class Test{
public static void main(String[] args) {
System.out.println(SubClass.ID);
}
}
为什么我有输出
SUPER_ID
而不是
In SubClass
SUPER_ID
SubClass将在第一次调用对象时加载。那么为什么
static
init block 不执行呢?
谢谢。
最佳答案
因为在编译期间,SubClass.ID 会被编译器更改为 Super.ID。 就像 @Kugathasan Abimaran 所说,继承和静态是两个不同的东西。
示例:
public class SampleClass {
public static void main(String[] args) {
System.out.println(SubClass.ID);
System.out.println(SubClass.i);
}
}
class Super {
static String ID = "SUPER_ID";
}
class SubClass extends Super {
static {
System.out.println("In SubClass");
}
static int i;
}
Output :
SUPER_ID
In SubClass // only when accessing a variable of subclass, the class will be initialized.
0
关于java - 为什么静态 block 不加载到被调用的对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191846/