java父子类代码块执行顺序为:先父后子、先静态后实例、先上后下;即parent static → child static → parent instance → parent constructor → child instance → child constructor。

Java 中父子类的代码块执行顺序是固定的,遵循“先父后子、先静态后实例、先上后下”的原则。理解这个顺序对调试初始化逻辑、避免空指针或未初始化异常非常关键。
静态代码块(static {})优先执行,且只执行一次
静态代码块在类加载时执行,按声明顺序从父类到子类依次执行,且整个生命周期中仅执行一次。
- 父类 static {} 先执行
- 子类 static {} 后执行
- 即使创建多个对象,静态块也只运行一遍
实例代码块和构造器按对象创建流程执行
每次 new 对象时,会依次执行:父类实例代码块 → 父类构造器 → 子类实例代码块 → 子类构造器。
- 实例代码块({})和构造器中的代码,在同一类中按书写顺序执行
- 父类构造器默认调用 super(),若没显式写,编译器自动插入在第一行
- 子类实例代码块在父类构造器执行完之后、子类构造器主体代码之前运行
字段初始化与代码块的混合顺序
类中字段的显式初始化(如 int x = 10;)本质上等价于写在实例代码块开头;静态字段初始化等价于写在静态代码块开头。
- public static int a = print("a"); 相当于在 static {} 中赋值
- private int b = print("b"); 相当于在 {} 实例块开头赋值
- 所以字段初始化也严格遵循上述静态→实例、父→子的顺序
一个典型执行顺序示例
假设有父类 Parent 和子类 Child,都含 static 块、实例块、字段初始化和构造器,则一次 new Child() 的完整输出顺序为:
- Parent static block
- Child static block
- Parent instance block
- Parent constructor
- Child instance block
- Child constructor
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











