Java中this()实现构造器链式调用,必须为首行语句、仅调用本类构造器、不可与super()共存、参数严格匹配、禁止循环调用,最终链必须终止于一个不调用this()的主构造器。

在 Java 中,this 关键字可用于在一个构造器中调用同一类的其他构造器,从而避免重复代码,实现构造器之间的重用。这种写法叫“构造器链”(constructor chaining),是构造器重载复用的核心方式。
必须放在第一行
使用 this(...) 调用其他构造器时,该语句必须是当前构造器的第一条可执行语句,否则编译报错。这是因为 JVM 需要确保对象初始化顺序可控,不允许先执行其他逻辑再委托构造。
- ✅ 正确:
this("default", 0);在首行 - ❌ 错误:任何变量声明、打印、赋值等语句都不能出现在
this(...)之前
只能调用本类构造器
this(...) 只能用于调用当前类中定义的其他构造器,不能调用父类构造器(父类要用 super(...))。它和 super(...) 是互斥的——一个构造器里最多只能出现其中一个,且都必须在第一行。
- 例如:有
Person(String name)和Person(String name, int age),前者可用this(name, 0)复用后者 - 不能写成
this(); super();或先super()再this(...)
参数需严格匹配重载签名
this(...) 的实参类型和个数,必须能唯一匹配某个已定义的构造器签名。Java 不会自动类型提升或装箱来“凑”匹配,也不支持模糊匹配。
立即学习“Java免费学习笔记(深入)”;
- 比如只有
Person(String, int),就不能用this("a", null)(null无法匹配int) - 若同时存在
Person(Object)和Person(String),传字符串字面量可能引发歧义,编译失败
避免循环调用
所有构造器通过 this(...) 形成的调用链,最终必须终止于一个不调用 this 的构造器(即“链尾”)。否则会导致编译错误。
- ❌ 错误示例:
A(){ this(1); }和A(int x){ this(); }构成死循环 - ✅ 正确做法:至少有一个构造器不调用
this,通常是最全参数的那个,负责实际字段初始化


















