java 静态代码块、构造代码块、构造函数调用顺序

时间:2023-02-11 18:44:44

检验一下java的静态代码块、构造代码块、构造函数的调用顺序问题。

 

父类

public class Father {

private int tag = 1;

public static String flag = "father";

public Father() {
System.out.println(
"construct father");
}

static {

System.out.println(
"staic father block");

}
{
System.out.println(
"father block");

}
public int getTag() {
return tag;
}
public void setTag(int tag) {
this.tag = tag;
}

}

子类

public class Sun extends Father{

private int tag = 10;
public static String flag = "sun";

public Sun(){
System.out.println(
"construct sun");
}

static {

System.out.println(
"static sun block ");
}

{
System.out.println(
"sun block");
}

public int getTag() {
return tag;
}

public void setTag(int tag) {
this.tag = tag;
}

}

父类运行结果图:

java 静态代码块、构造代码块、构造函数调用顺序

 

结论,静态代码块 > 构造代码块 > 构造函数

子类运行结果图:

java 静态代码块、构造代码块、构造函数调用顺序

 

结论,父静态 > 子静态 > 父构造代码块 > 父构造函数 > 子构造代码块 > 子构造函数

简单点记录就是 静态  > 父类 > 子类