java中构造函数可通过this()调用本类其他构造器实现复用,但必须是首句、不可与super()共存、禁止循环调用;其本质是构造过程的编译期确定跳转指令,仅限构造器首行使用。

Java 中,一个构造函数可以通过 this() 调用本类中其他重载的构造方法,实现代码复用,避免重复初始化逻辑。
调用规则必须遵守
使用 this() 调用其他构造器时,有几条硬性约束:
- 必须是构造函数中的第一条语句(否则编译报错)
- 只能调用本类的其他构造方法,不能和 super() 同时出现
- 不能形成循环调用(比如 A 调 B,B 又调 A),否则编译不通过
典型用法:参数精简与默认值封装
常用于把多个参数的构造逻辑集中到一个“主构造器”,其余构造器通过 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, int age) {
this(name, age, "未知"); // ← this() 调用三参数构造器
}
// 重载:只提供姓名,其余设默认值
public Person(String name) {
this(name, 0, "未知"); // ← 同样委托给主构造器
}
}
和 super() 的关系要分清
this() 和 super() 都必须放在第一行,因此二者互斥。如果父类没有无参构造器,而子类构造器又用了 this() 委托,那被委托的那个构造器里必须显式调用 super(...) 来确保父类正确初始化。
- 没写任何构造器时,编译器自动提供无参 super()
- 只要写了构造器,又没显式调用 super(),且父类没有无参构造器 → 编译失败
- this() 是本类内部跳转,不解决父类初始化问题;最终链条末端的构造器必须负责调用 super()
不支持静态上下文或普通方法中使用
this() 只能在构造函数里出现,且只能在第一行。它不是普通方法调用,而是构造过程的“跳转指令”。以下写法都是非法的:
- 在普通成员方法里写 this(...) → 编译错误
- 在构造器中间或条件分支里调用 this() → 编译错误
- 用变量、表达式动态决定调哪个重载构造器 → 不允许,必须编译期确定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











