创建一个父类只含有一个静态代码块以及一个静态属性
public class SupClass {
static{
System.out.println("SupClass init()");
}
static int value = 20;
}
创建一个该父类的子类
public class SubClass extends SupClass {
static{
System.out.println("Subclass init() 子类");
}
}
创建一个测试类
public class Test {
public static void main(String[] args) {
System.out.println(SubClass.value);
}
}
按照之前的经验,对子类进行初始化那么必定会执行父类的构造器,而静态代码块是先于构造器执行的,所以肯定是执行 ”Supclass init()“ 然后执行 子类的 ”Subclass init() 子类 “ 接着输出20 但是实际情况并不是这样,如下
这是因为对于静态字段,只有直接定义这个字段的类才会被初始化,因此,通过子类引用父类中定义的字段,只会触发父类的初始化而不会触发子类的初始化