this()是java中在构造方法内调用同类其他构造方法的语法,须首行、唯一、非静态、不与super()共存,用于构造重载简化和链式委托,需避免循环调用。

this() 是 Java 中用于在同一个类的构造方法内部调用其他构造方法的关键语法,必须作为构造方法的第一条语句出现,且只能在构造方法中使用。
基本规则和限制
使用 this() 时需严格遵守以下几点:
- 必须放在构造方法的第一行,否则编译报错
- 一个构造方法中最多只能调用一次 this()
- 不能在静态上下文(如静态方法、静态代码块)中使用
- 不能与 super() 同时出现在同一个构造方法中(二者都要求首行)
- 调用的目标构造方法必须真实存在,参数类型和数量需匹配
典型使用场景:构造方法重载的简化
当一个类有多个构造方法,且部分逻辑(如字段初始化、校验、日志等)重复时,可用 this() 将公共操作集中到一个“主构造方法”中,其余构造方法通过 this() 委托执行。
例如:
class Person {private String name;
private int age;
// 主构造方法,完成核心初始化
public Person(String name, int age) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("Name cannot be null or empty");
}
this.name = name.trim();
this.age = Math.max(0, age);
}
// 仅传 name,age 默认为 0
public Person(String name) {
this(name, 0); // 调用上面两参数的构造方法
}
// 无参构造,name 默认 "Unknown",age 默认 0
public Person() {
this("Unknown"); // 先调用单参数构造,再间接调用双参数构造
}
}
链式调用与注意事项
this() 支持链式调用(如 A → B → C),但要注意避免循环调用,否则编译不通过。编译器会检查整个调用链是否最终指向一个不带 this() 的构造方法(即真正执行初始化的终点)。
- ✅ 正确:无参构造 → 单参构造 → 双参构造
- ❌ 错误:
Person() { this(); }或Person() { this("A"); }+Person(String s) { this(); }(形成死循环) - ⚠️ 提示:IDE 通常能高亮此类错误,编译时报 “Recursive constructor invocation”
与 super() 的关系
子类构造方法默认第一行隐含 super();若显式写了 this(),就不再自动插入 super(),但最终仍需确保父类构造被调用——这由被 this() 调用的“终点构造方法”来保证。也就是说,链上最后一个构造方法必须显式或隐式调用 super(...)(除非父类是 Object)。











