java代码块执行顺序为:静态代码块最先执行且仅一次,普通代码块次之并在构造方法前执行,构造方法最后执行;继承场景下遵循先父后子、先静态后实例、先代码块后构造方法的原则。

Java代码块的执行顺序,核心在于理解类加载和对象创建两个阶段中,不同代码块的触发时机和优先级。静态代码块最先执行,且只执行一次;普通代码块和构造方法在每次实例化时按声明顺序依次执行。
静态代码块(static {})优先执行
静态代码块属于类级别,随类加载而执行,且仅执行一次。它早于main方法、早于任何对象创建,也早于非静态代码块。
- 多个静态代码块按源码中从上到下的顺序执行
- 父类静态代码块先于子类静态代码块执行
- 即使没创建对象,只要类被主动使用(如调用静态方法、访问静态字段),就会触发类加载和静态代码块执行
普通代码块({})紧随其后,在构造前执行
普通代码块(也称实例初始化块)属于对象级别,每次new对象时都会执行,且在构造方法体之前运行。
- 多个普通代码块按声明顺序依次执行
- 父类普通代码块先于子类普通代码块执行(因父类构造器先被调用)
- 它在构造方法的隐式super()之后、构造方法主体代码之前执行
构造方法最后执行,完成对象初始化
构造方法是对象创建流程的终点,负责最终的定制化初始化。它的执行依赖于前面所有准备工作的完成。
- 子类构造方法默认第一行调用super()(若未显式写出)
- super()会触发父类构造方法,进而触发父类普通代码块(已在super()内部完成)
- 子类构造方法体中的代码,在本类普通代码块执行完毕后才开始运行
继承场景下的完整执行链(以Son extends Father为例)
当执行 new Son() 时,实际执行顺序如下:
- 1. Father类静态代码块 → 2. Son类静态代码块(类加载阶段,仅首次)
- 3. Father类普通代码块 → 4. Father类构造方法体
- 5. Son类普通代码块 → 6. Son类构造方法体
这个链条清晰体现了“先父后子、先静后实、先块后构”的原则,是分析复杂初始化逻辑的关键依据。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











