this()用于调用本类其他构造器,必须位于首行、不可与super()共存、禁止递归调用,能避免重复代码并提升可维护性。

在 Java 中,用 this() 调用本类其他构造器,能有效避免重复代码,让构造逻辑更清晰、更易维护。
this() 必须放在第一行
调用本类构造器的 this(...) 语句必须是构造方法中的第一条可执行语句。编译器会强制校验这一点,否则直接报错。
- 不能放在条件分支、循环或任意表达式之后
- 不能和
super()同时出现(二者都要求首行,冲突) - 若没显式写
this()或super(),编译器默认插入super()
常见简化场景:参数多、有默认值
当一个类有多个构造器,且部分参数有合理默认值时,可以用最全参数的构造器作为“主构造器”,其余构造器通过 this() 委托给它。
- 例如:用户类支持无参、仅姓名、姓名+年龄三种初始化方式,可统一交由三参数构造器处理
- 避免在每个构造器里重复赋值字段、校验逻辑或初始化操作
- 后续修改初始化规则时,只需改一处,不易遗漏
注意 this() 和 super() 的互斥性
子类构造器中,this() 和 super() 都用于构造链起点,Java 不允许两者共存。一旦用了 this(),就表示当前构造器把初始化责任委托给了本类另一个构造器,而那个被调用的构造器最终仍需调用父类构造器(显式或隐式)。
- 若本类所有构造器都通过
this()链式调用,只需在一个终点构造器里写super(...) - 错误写法:
this(); super();—— 编译不通过 - 正确顺序:this(...) → (内部)super(...) 或隐式 super()
不能递归调用,编译期即拦截
Java 编译器会检查构造器调用链,禁止直接或间接的递归调用(比如 A 调 B,B 又调回 A)。这类错误在编译阶段就被发现,不会等到运行时报 StackOverflowError。
- 有助于提前暴露设计问题,比如构造逻辑耦合过紧
- 提醒开发者重新梳理构造职责,明确主入口
- 即使通过中间构造器绕行,编译器也能追踪完整调用路径并拒绝非法循环
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











