java中this()调用本类其他构造器必须位于首行且仅一次,参数需严格匹配目标构造器签名,不可与super()共存,支持传入字面量、形参或简单表达式。

在 Java 中,构造方法里用 this() 调用本类其他重载构造器,必须是该构造方法的第一条语句,且只能调用一次。传参方式和普通方法调用一样:按目标构造器的参数列表顺序,传入对应类型、数量、顺序匹配的实参。
必须放在第一行
this(...) 必须作为构造方法体内的首行代码,否则编译报错。这是因为 JVM 需要确保对象初始化逻辑的确定性和唯一性。
- ✅ 正确:
this("hello", 123);(第一行) - ❌ 错误:
System.out.println("a"); this("hello", 123);(非首行) - ❌ 错误:
this(); this("x");(重复调用,只允许一次)
参数要严格匹配重载构造器签名
括号里的参数列表,必须能被某个本类的其他构造器接收——即类型、个数、顺序完全兼容(支持自动类型提升或装箱,但不能靠隐式转换如字符串转 int)。
- 有构造器
Person(String name, int age),可写this("Alice", 25) - 有构造器
Person(String name),可写this("Bob")或this(name)(传入当前参数) - ❌ 不能写
this("Tom", "25")(String 无法自动转 int)
可以传递当前构造器的参数或计算结果
参数可以是直接字面量、当前构造器的形参、局部变量,甚至简单表达式(只要编译期可确定类型和值)。
-
this(name, defaultAge);(传入另一个参数) -
this(name.toUpperCase(), age + 1);(支持简单表达式) -
this(getDefaultName(), getDefaultAge());(调用私有工具方法也允许)
不能和 super() 同时出现
一个构造器里,this(...) 和 super(...) 互斥。因为两者都必须是第一句,且都用于触发初始化链。用了 this() 就意味着由另一个本类构造器负责调用父类构造器。
- ✅
this(name);→ 被调用的构造器里应含super(...)或默认调用无参父构造器 - ❌
this(name); super();→ 编译错误
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











