Java代码块执行顺序为:父类静态代码块→子类静态代码块→父类实例代码块→父类构造方法→子类实例代码块→子类构造方法;静态优先于实例,父类优先于子类,代码块在对应构造方法前执行。

Java代码块的执行顺序主要涉及静态代码块、实例代码块、构造方法以及变量初始化。理解它们的执行顺序对掌握对象创建过程和类加载机制非常重要。
1. 静态代码块(static block)
静态代码块在类第一次被加载时执行,且只执行一次。它用于初始化静态变量或执行仅需运行一次的操作。
特点:
- 随着类的加载而执行
- 一个类中可以有多个静态代码块,按书写顺序执行
- 优先于所有实例相关的内容执行
2. 实例代码块(instance initializer block)
实例代码块在每次创建对象时执行,位于类中但不在任何方法或构造器内,用{}表示。
立即学习“Java免费学习笔记(深入)”;
执行时机:
- 在调用构造方法之前执行
- 每次new对象时都会执行一次
- 如果有多个实例代码块,按出现顺序执行
3. 构造方法(constructor)
构造方法在实例代码块执行完后立即调用,用于完成对象的初始化。
注意点:
- 如果没写构造方法,编译器会提供默认无参构造
- 子类构造中会隐式或显式调用父类构造
4. 综合执行顺序规则
当创建一个对象时,整体执行顺序如下:
- 父类静态成员和静态代码块(按定义顺序)
- 子类静态成员和静态代码块
- 父类实例代码块
- 父类构造方法
- 子类实例代码块
- 子类构造方法
举个例子:
static class Parent {static { System.out.println("父类静态代码块"); }
{ System.out.println("父类实例代码块"); }
Parent() { System.out.println("父类构造方法"); }
}
static class Child extends Parent {
static { System.out.println("子类静态代码块"); }
{ System.out.println("子类实例代码块"); }
Child() { System.out.println("子类构造方法"); }
}
执行new Child()输出为:
父类静态代码块子类静态代码块
父类实例代码块
父类构造方法
子类实例代码块
子类构造方法
基本上就这些。记住:静态先于实例,父类先于子类,代码块在构造方法前。不复杂但容易忽略细节。











