this()用于构造方法间调用,必须为首句,实现参数委派与默认值填充,避免重复代码并保证状态一致;不可与super()共存,且禁止循环调用或访问未初始化成员。

Java 中构造方法里用 this 传递初始化参数,主要是为了实现构造方法之间的调用(也叫构造器链),避免重复代码,同时确保对象状态的一致性。
什么是 this() 调用构造方法
this(...) 是在构造方法内部调用本类其他构造方法的语法,必须是构造方法中的第一条语句。它不是指当前对象实例,而是触发另一个构造流程的指令。
- 只能出现在构造方法中,且必须是第一行
- 不能在普通方法或静态上下文中使用
- 不能和
super(...)同时出现(二者都需放在首行)
常见用法:参数委派与默认值填充
当一个类有多个构造方法,但核心初始化逻辑集中在一个“主构造方法”中时,其他构造方法可通过 this(...) 把参数转交过去,由它统一处理。
例如:
立即学习“Java免费学习笔记(深入)”;
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, "北京"); // ← this() 调用上面的三参数构造
}
// 最简版:只传姓名,其余设默认值
public Person(String name) {
this(name, 0, "北京"); // ← 仍委托给三参数构造
}
}
注意事项和易错点
使用 this(...) 时容易忽略几个关键约束:
- 循环调用会编译报错:比如 A 调 B,B 又调 A,编译器直接拒绝
- 不能访问实例成员(如字段、方法)在
this(...)之前——因为对象还没完全构建 - 如果没显式写任何构造方法,编译器会提供无参默认构造;一旦写了任意构造方法,默认构造就没了,此时若需无参入口,就得手动加并用
this(...)委托
和 super() 的关系
this(...) 和 super(...) 都是构造链的起点,但互斥:每个构造方法最多调用其中一个,且必须为首句。选择依据是想复用本类其他构造(this)还是父类构造(super)。如果没写,编译器默认插入 super()(无参父类构造)。


















