Java中继承,子类和父类的静态代码块、普通代码块、构造方法的执行顺序
Java中继承,子类和父类的静态代码块、普通代码块、构造方法的执行顺序
父类代码
public class Fl {
static {
System.out.println("我是父类的静态代码块");
}
{
System.out.println("我是父类的构造代码块");
}
Fl(){
System.out.println("我是父类的构造方法");
}
}
子类代码
public class Zl extends Fl {
static {
System.out.println("我是子类的静态代码块");
}
{
System.out.println("我是子类的构造代码块");
}
Zl(){
System.out.println("我是子类的构造方法");
}
}
测试
public class Demo {
public static void main(String[] args) {
new Zl();
}
}
结果
我是父类的静态代码块
我是子类的静态代码块
我是父类的构造代码块
我是父类的构造方法
我是子类的构造代码块
我是子类的构造方法
结论(个人结论仅供参考)
在Java中 静态代码会随着类的加载而加载。
测试时 JVM调用main方法,main进栈。
执行new Zl(); 会将Fl.class 和 Zl.class 载入内存。
Fl中静态代码会随着Fl的加载而加载,Zl同理
所以输出:
我是父类的静态代码块
我是子类的静态代码块
然后 构造代码块优先于构造
所以输出顺序:
我是父类的构造代码块
我是父类的构造方法
我是子类的构造代码块
我是子类的构造方法
PS:Java中是分层初始化的,所以先初始化父类所以出现以顺序
我是父类的构造代码块
我是父类的构造方法
我是子类的构造代码块
我是子类的构造方法