静态代码块在类加载时执行且仅一次,用于初始化静态资源;构造代码块在每次创建对象时执行,用于共用实例初始化逻辑。执行顺序为:静态代码块 → 构造代码块 → 构造方法。如示例所示,首次new时输出1.2.3,后续仅输出2.3。

在Java中,构造代码块和静态代码块都是用来初始化的代码结构,但它们的执行时机、运行条件和用途有明显区别。理解这些差异对掌握类的加载和对象创建过程非常重要。
静态代码块(Static Block)
静态代码块使用 static {} 定义,属于类级别,只在类被加载时执行一次。
特点:- 随着类的加载而执行,且仅执行一次
- 优先于构造代码块和构造方法执行
- 用于初始化静态变量或执行仅需一次的准备工作,比如加载配置、注册驱动等
- 多个静态代码块按定义顺序执行
static {
System.out.println("静态代码块执行");
}
构造代码块(Instance Initialization Block)
构造代码块用 {} 定义,没有 static 关键字,属于实例级别,在每次创建对象时都会执行。
特点:- 每次创建对象时都会执行,执行时间在调用构造方法之前
- 用于为所有构造方法共用的初始化逻辑,减少重复代码
- 多个构造代码块按定义顺序执行
- 可以访问实例变量和静态变量
{
System.out.println("构造代码块执行");
}
执行顺序对比
当创建一个对象时,各代码块的执行顺序如下:
立即学习“Java免费学习笔记(深入)”;
- 静态代码块(只在类首次加载时执行)
- 构造代码块(每次 new 对象时执行)
- 构造方法(根据 new 的具体构造函数决定)
class Example {
static {
System.out.println("1. 静态代码块");
}
{
System.out.println("2. 构造代码块");
}
public Example() {
System.out.println("3. 构造方法");
}
}
// 调用
new Example();
new Example();
输出结果:
1. 静态代码块 2. 构造代码块 3. 构造方法 2. 构造代码块 3. 构造方法
可见静态代码块只执行一次,而构造代码块和构造方法每次 new 都会执行。
基本上就这些。关键在于:静态代码块属于类,只执行一次;构造代码块属于对象,每次创建都执行。










