静态代码块在类加载时执行且仅一次,用于初始化静态资源;构造代码块在每次创建对象时执行,用于共用实例初始化逻辑。执行顺序为:静态代码块 → 构造代码块 → 构造方法。如示例所示,首次new时输出1.2.3,后续仅输出2.3。
在Java中,构造代码块和静态代码块都是用来初始化的代码结构,但它们的执行时机、运行条件和用途有明显区别。理解这些差异对掌握类的加载和对象创建过程非常重要。
静态代码块使用 static {} 定义,属于类级别,只在类被加载时执行一次。
特点:static {
System.out.println("静态代码块执行");
}
构造代码块用 {} 定义,没有 static 关键字,属于实例级别,在每次创建对象时都会执行。
特点:{
System.out.println("构造代码块执行");
}
当创建一个对象时,各代码块的执行顺序如下:
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 都会执行。
基本上就这些。关键在于:静态代码块属于类,只执行一次;构造代码块属于对象,每次创建都执行。