Java中构造器链通过this(...)调用本类其他构造器,必须为首条语句且无循环调用;它与super(...)互斥,用于避免重复初始化逻辑。

在 Java 中,可以在构造器中使用 this(...) 调用同一个类中的其他构造器,这叫构造器链(constructor chaining)。但必须满足两个关键条件:调用必须是构造器的第一条语句;且不能出现循环调用。
语法和基本规则
this(...) 是显式调用本类其他构造器的唯一方式,它不是指当前对象实例,而是特指“调用另一个构造器”。编译器会确保它出现在第一行,否则报错。
- 只能在构造器内部使用,普通方法里写
this(...)是非法的 - 参数类型和数量必须匹配目标构造器的签名
- 一个构造器最多调用一次其他构造器(包括隐式的
super()) - 若没写
this(...)或super(...),编译器会自动插入无参super()
典型使用场景
常见于重载多个构造器时,避免重复初始化逻辑。例如一个类支持多种创建方式,但核心字段赋值逻辑一致:
public class Person {
private String name;
private int age;
public Person(String name) {
this(name, 0); // 调用三参数构造器,默认年龄为 0
}
public Person(String name, int age) {
this(name, age, "unknown"); // 调用完整构造器,默认职业未知
}
public Person(String name, int age, String job) {
this.name = name;
this.age = age;
this.job = job;
}
}
这样所有初始化最终都落到最全的构造器,便于统一维护。
立即学习“Java免费学习笔记(深入)”;
常见错误和注意事项
容易踩坑的地方集中在调用位置和递归限制上:
- 把
this(...)写在第二行或之后 → 编译错误:“Constructor call must be the first statement” - 两个构造器互相调用(A 调 B,B 又调 A)→ 编译错误:“Recursive constructor invocation”
- 误以为
this()是调用当前构造器自身 → 实际上这是非法的,Java 不允许自调用 - 混用
this(...)和super(...)→ 同一构造器里二者不能共存
与 super(...) 的关系
this(...) 和 super(...) 都是构造器调用语句,作用不同但互斥。前者调本类其他构造器,后者调父类构造器。两者都必须是首行语句,所以不能同时出现。如果用了 this(...),那被调用的那个构造器最终仍需负责调用 super(...)(或依赖默认的 super())来完成父类初始化。


















