在java中,构造代码块是用一对大括号直接写在类里的代码段,它不属于任何方法。每次使用new创建对象时,构造代码块都会先于构造方法执行,用来完成一些公共的初始化工作。

构造代码块的基本写法
下面通过一个简单例子看构造代码块长什么样:
public class User {
// 构造代码块
{
System.out.println("构造代码块执行");
}
public User() {
System.out.println("无参构造方法执行");
}
public User(String name) {
System.out.println("有参构造方法执行");
}
}
构造代码块有什么用
它的核心价值在于复用初始化逻辑。如果一个类有多个构造方法,它们都要做同一件事,比如给某个字段设默认值、打印日志、加载资源,就可以把这部分放到构造代码块里。
- 减少重复代码,避免每个构造方法都写一遍相同逻辑
- 保证对象创建时某些操作必定执行
- 让构造方法更专注于接收参数和差异化处理
和构造方法的区别
构造方法需要写方法名且可带参数,而构造代码块没有名字。执行顺序上,构造代码块总是比构造方法先跑。参考下面代码:
public class Demo {
{
System.out.println("块1");
}
public Demo() {
System.out.println("构造方法");
}
{
System.out.println("块2");
}
public static void main(String[] args) {
new Demo();
}
}
运行后输出顺序为:块1、块2、构造方法。说明多个构造代码块按书写顺序执行,且都在构造方法前。
使用场景小结
| 场景 | 适合用构造代码块 | 适合用构造方法 |
|---|---|---|
| 所有对象都要做的初始化 | 是 | 否 |
| 根据参数做不同初始化 | 否 | 是 |
总的来说,java构造代码块用来集中处理对象创建时的公共逻辑,和构造方法配合能让类结构更干净。日常开发中如果发现多个构造方法开头都在做同样的事,就可以考虑提取到构造代码块中。