java构造器中用this调用本类其他构造器必须是首条语句、仅一次、不可与super共存、参数须精确匹配、禁止循环调用。

Java 中构造器里用 this 调用本类其他构造器,是实现初始化逻辑复用、避免重复代码的常用方式,但必须严格遵守语法规则。
调用必须是构造器的第一条语句
在构造器中使用 this(...) 调用同类其他构造器时,它必须出现在方法体的第一行,且只能出现一次。编译器会检查这个位置,否则报错。
- 合法写法:
this(10);放在首行 - 非法写法:先声明变量、打印日志或调用其他方法后再写
this(...) - 错误示例:
System.out.println("start"); this(10);→ 编译失败
只能调用本类构造器,不能与 super 共存
this(...) 和 super(...) 都用于构造器链的起点,二者互斥。每个构造器最多只能有一个显式构造器调用(this 或 super),且 JVM 需要明确知道对象初始化的入口。
- 如果没写
this或super,编译器自动插入super()(无参父类构造器) - 写了
this(...),就不再自动补super(),由被调用的构造器负责向上委托 - 同时写
this(...)和super(...)→ 编译错误
参数需匹配被调构造器签名
this(...) 的实参列表必须能唯一匹配某个本类构造器的形参类型和数量。不涉及重载解析的复杂规则,只看是否精确匹配或可隐式转换。
- 有
Person(String name)和Person(String name, int age) -
this("Alice")→ 调用前者;this("Alice", 25)→ 调用后者 -
this(25)→ 若无Person(int)构造器,则编译失败
不能形成构造器调用循环
编译器会检测 this 调用链是否构成闭环,比如 A 调 B,B 又调回 A。这种递归调用在编译期就被禁止,防止运行时栈溢出。
- 构造器 A:
this(); - 构造器 B:
this("default"); - 构造器 C:
this();→ 若 A 调 C,C 又调 A,编译报错 - IDE 通常会在编辑时标红并提示 “Recursive constructor invocation”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











