Java中this(...)用于构造器链,必须为首行语句,调用本类其他构造器以复用初始化逻辑,不可与super(...)共存,参数需精确匹配,仅限构造器内使用。

Java中没有this()调用本身,真正存在的是this(...)——即从一个构造器内部调用本类的另一个构造器,用于复用初始化逻辑、避免代码重复。它不是方法调用,而是构造器链(constructor chaining)的关键机制。
必须放在第一行
this(...)必须是构造器中的第一条语句,否则编译失败。这是因为JVM要求对象的初始化必须从最基础的构造路径开始,不能中途“跳转”。
- ✅ 正确:
this("default", 0);(首行) - ❌ 错误:先声明变量或调用其他方法,再写
this(...) - ⚠️ 注意:不能和
super(...)共存于同一构造器中——二者都需首行,只能选其一
参数需匹配目标构造器签名
this(...)括号里的实参,必须能被本类中某个其他构造器的形参列表精确匹配(类型、数量、顺序一致),支持自动类型提升和装箱,但不支持隐式转换(如int→String)。
- 例如有
public Person(String name, int age),可写this("Alice", 25) - 若只有
Person(String name)和Person(int age),则this("Bob", 30)会编译报错 - 可借助重载+默认值逻辑,把复杂初始化收敛到一个“主构造器”
常用于简化多参数构造场景
当类有多个字段,用户可能只提供部分信息时,用this(...)把简化的构造器委托给更完整的构造器,统一处理默认值或校验逻辑。
立即学习“Java免费学习笔记(深入)”;
- 比如
public Rectangle() { this(0, 0, 1, 1); } -
public Rectangle(double w) { this(w, w); }→ 再由Rectangle(double w, double h)完成实际赋值 - 所有非主构造器最终指向一个含完整参数的构造器,便于集中做null检查、范围校验等
不能在静态上下文或普通方法里使用
this(...)仅限构造器内调用,且只能调用本类其他构造器。它不是普通方法调用,也不支持循环调用(A→B→A会编译失败)。
- ❌ 静态工厂方法中不能写
this(...) - ❌ 普通成员方法里写会直接报语法错误
- ❌ 构造器A调
this(...)指向B,B又调回A → 编译器拒绝


















