0
点赞
收藏
分享

微信扫一扫

静态代码块的加载问题1

杨沐涵 2022-07-14 阅读 99


创建一个父类只含有一个静态代码块以及一个静态属性

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 但是实际情况并不是这样,如下

静态代码块的加载问题1_初始化

这是因为对于静态字段,只有直接定义这个字段的类才会被初始化,因此,通过子类引用父类中定义的字段,只会触发父类的初始化而不会触发子类的初始化

举报

相关推荐

0 条评论