复习类的加载顺序(主要是静态代码块/同步代码块/构造代码块)
public class Base {
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类同步代码块 ==== 这是放在父类构造代码块之前的");
}
public Base() {
System.out.println("父类构造代码块");
}
{
System.out.println("父类同步代码块 ==== 这是放在父类构造代码块之后的");
}
}
public class BaseSon extends Base {
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类同步代码块 ==== 这是放在子类构造代码块之前的");
}
public BaseSon() {
System.out.println("子类构造代码块");
}
{
System.out.println("子类同步代码块 ==== 这是放在子类构造代码块之后的");
}
public static void main(String[] args) {
new BaseSon();
}
}
结果
分析
- 静态代码块/同步代码块/构造代码块 的执行顺序
- 静态代码块优先级最高,不管是父类还是子类的, 会在子类和父类的同步代码块和构造方法之前执行
- 在同一个类中, 同步代码块的执行顺序在构造代码块之前在子父类关系之中, 父类的同步代码块和构造方法会在子类的同步代码块和构造方法之前执行
总结:
一句话总结: 1.父类静态代码块 > 2.子类的静态块 > 3.父类的同步代码块 > 4.父类的构造方法 > 5.子类的同步代码块 > 6.大于子类的构造方法
如果加上静态变量和变量的话
1.静态变量 > 2.父类静态代码块 > 3.子类的静态变量 > 4.子类的静态块 > 5.父类的变量 > 6.父类的同步代码块 > 7.父类的构造方法 > 8.子类的变量 >9.子类的同步代码块 > 10.大于子类的构造方法