/**
* @author: zhangweiqiang
* @date: 2021/6/30 9:12
*/
public class Father {
public Father() {
System.out.println(Son.F);
}
static {
System.out.println(Son.F);
}
}
class Son extends Father {
public static String F = "abc";
public Son() {
System.out.println("3333");
}
}
class Test {
public static void main(String[] args) {
new Son();
}
}
输出:
解析:
父类static块初始化(因为此时子类static块还未初始化,所以会输出null,相当于先加载了父类,再加载子类) -> 子类static块初始化 -> 父类构造(此时才会输出abc)
/**
* @author: zhangweiqiang
* @date: 2021/6/30 9:12
*/
public class Father {
public Father() {
System.out.println(Son.F);
}
static {
System.out.println(Son.F);
}
//public static int value = 123;
}
class Son extends Father {
public static String F = "abc";
public Son() {
System.out.println("3333");
}
}
class Test {
public static void main(String[] args) {
new Father();
}
}
输出:
解析:
父类static块初始化, 打印之前,使用到了Son.F,此时发现子类未加载,便会加载子类,加载时会初始化静态变量,这时便会打印abc -> 父类构造,此时F已经初始化,再次打印abc