java中构造函数链式调用通过this(参数)实现,必须位于构造函数首行,仅能调用本类其他构造函数且不可循环,用于复用初始化逻辑。

Java 中构造函数链式调用通过 this 实现,本质是在一个构造函数内部,用 this(参数) 调用本类的另一个构造函数,从而复用初始化逻辑、避免代码重复。
必须是构造函数的第一条语句
this(...) 必须出现在构造函数体的第一行,否则编译报错。这是因为 JVM 要求对象在完成自身初始化前,必须先明确由哪个构造函数主导初始化流程。
- ✅ 正确写法:this("default"); 在第一行
- ❌ 错误写法:int x = 1; this("default"); —— 编译不通过
只能调用本类其他构造函数
this(...) 只能用于调用当前类中定义的其他构造函数,不能调用父类构造函数(那是 super(...) 的职责),也不能调用静态方法或普通方法。
- ✅ this(); 或 this("abc");
- ❌ this.super();、this.someMethod();、this(null);(若无匹配构造函数)
避免循环调用
多个构造函数通过 this 相互调用时,必须确保最终能抵达一个“终点”构造函数(即不包含 this(...) 的构造函数),否则编译失败。
- ✅ 合理链路:
A() → this("x") → this("x", 0) - ❌ 循环链路:
A() → this("x");且A(String s) → this();—— 编译报错 “Recursive constructor invocation”
典型实用示例
常见于有多个可选参数的场景,用“全参构造函数”作为统一入口,其余构造函数通过 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) {
this(name, 0, "Unknown"); // → 调用全参
}
// 姓名 + 年龄
public Person(String name, int age) {
this(name, age, "Unknown"); // → 调用全参
}
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











