构造方法链式调用是通过this()在构造器中调用本类其他构造器实现的初始化逻辑复用机制,要求this()必须为首行唯一语句、不可与super()共存、调用链须终止于无this()的构造器且禁止循环。

在 Java 中,this 关键字可用于在一个构造方法中调用本类的另一个构造方法,从而实现构造逻辑的复用和链式调用。这种写法要求调用必须是构造方法中的第一条语句,且只能调用一次。
什么是构造方法链式调用
构造方法链式调用是指通过 this(...) 语法,在一个构造方法内部调用本类的其他构造方法,避免重复编写初始化代码。它不是方法链式调用(如 builder 模式),而是构造器之间的委托。
- 必须写在构造方法的第一行
- 只能调用本类的其他构造方法,不能与
super()同时出现 - 可形成调用链,例如:A → B → C,但最终必须指向一个不带
this(...)的构造方法
基本写法与常见结构
典型做法是定义一个“全参构造方法”作为核心,其他构造方法通过 this 委托给它,统一初始化逻辑。
例如:
public class Person {private String name;
private int age;
private String city;
// 全参构造(承担主要初始化)
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// 仅姓名和年龄
public Person(String name, int age) {
this(name, age, "Unknown"); // 调用全参构造
}
// 仅姓名
public Person(String name) {
this(name, 0, "Unknown"); // 再次委托
}
}
注意事项与易错点
使用 this(...) 时容易因顺序或条件引发编译错误或逻辑问题。
- 调用
this(...)必须是第一行,否则编译失败 - 不能在
this(...)前声明变量、写日志或执行任何语句 - 构造方法链不能循环,比如 A 调 B,B 又调 A,会导致编译报错
- 如果类有父类,最终那个不带
this(...)的构造方法必须显式或隐式调用super()
和 setter 链式调用的区别
注意:构造方法中的 this(...) 和对象创建后的 obj.setX().setY() 是两回事。前者发生在实例化阶段,用于参数分发;后者是返回 this 实现 fluent 接口,属于运行时行为,两者目的不同、机制无关。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











