this() 是 Java 中用于调用本类其他构造方法的关键语法,必须位于构造方法首行,不可与 super() 共存,且参数需精确匹配重载构造器;它支持链式调用以消除冗余,但严禁循环调用,否则引发 StackOverflowError。

在 Java 中,用 this() 调用本类其他构造方法,能有效避免字段重复赋值、逻辑重复,是消除构造器代码冗余的直接手段。
必须放在第一行
this() 是构造器链式调用的关键语法,它必须作为构造方法体内的第一条语句出现。编译器会强制校验这一点,否则报错。
- 不能放在条件分支里(比如 if 或 try 块内)
- 不能和 super() 同时存在(二者都需首行,冲突)
- 若没显式写
this()或super(),编译器会自动插入无参super()
参数匹配决定调用哪个构造器
编译器根据 this(...) 括号内的实参类型和个数,去匹配本类中已定义的构造方法。匹配失败则编译不通过。
- 例如:
this(name)会去找只有一个 String 参数的构造器 - 类型不兼容(如传 int 给期望 long 的参数)会导致匹配失败
- 重载构造器之间应保持参数组合清晰,避免歧义
典型应用场景:多参数构造器简化
当一个类提供多个构造器,且部分参数有默认值时,可让参数少的构造器通过 this() 委托给参数多的版本,统一初始化逻辑。
立即学习“Java免费学习笔记(深入)”;
- 比如:无参构造器设默认 name="unknown"、age=0,可写成
this("unknown", 0) - 含 name 的构造器可写成
this(name, 0),复用 age 初始化逻辑 - 所有字段赋值、校验、日志等共通操作,集中写在最全参数的构造器里
注意:不能形成调用循环
构造器之间通过 this() 调用必须构成有向无环结构。Java 编译器虽不直接检测运行时循环,但递归调用会导致 StackOverflowError。
- A 构造器调用 B,B 又调回 A → 编译可能通过,运行时报错
- 建议画出调用关系图,确保每条路径最终抵达一个不调用
this()的构造器 - IDE 通常能高亮潜在循环,留意警告提示


















