java中用this调用本类其他构造器必须是第一条语句且仅一次,参数需按顺序、类型、数量严格匹配,支持自动提升和装箱拆箱但不支持隐式转换,不能与super()共存。

Java 中用 this 调用本类其他构造器,必须是构造器的第一条语句,且只能调用一次;传参方式和普通方法调用一致,按形参顺序、类型、数量匹配实参。
语法要求:this() 必须放在第一行
编译器强制要求:this(...) 必须是构造器中第一条可执行语句,否则编译失败。这是因为构造器链必须从最源头开始初始化对象状态。
- ✅ 正确写法:
this("hello", 10);(第一行) - ❌ 错误写法:
System.out.println("before"); this("hello", 10);(编译报错) - ❌ 不允许在 if/for/try 等块内调用
this()
参数传递:按声明顺序和类型严格匹配
调用 this(参数列表) 时,传入的实参必须能被目标构造器的形参接收,支持自动类型提升、装箱拆箱,但不支持隐式类型转换(如 int → String)。
- 若构造器定义为
Person(String name, int age),则this("Alice", 25)合法 -
this("Bob", "25")会编译失败(String 无法赋给 int) -
this("Charlie", (short)30)合法(short 可自动提升为 int)
常见使用场景:参数重载 + 默认值委派
通常用于减少重复初始化逻辑,把参数少的构造器委托给参数多的主构造器。
public Person() { this("unknown", 0); }public Person(String name) { this(name, 18); }public Person(String name, int age) { this.name = name; this.age = age; }
注意:不能和 super() 同时出现
一个构造器里,this(...) 和 super(...) 互斥——因为两者都必须是首句,且 JVM 只允许一次显式父类或本类构造调用。
- 如果写了
this(...),就不再需要(也不允许)写super(...) - 未写
this或super时,编译器默认插入super() - 若父类没有无参构造器,又没显式调用
super(...),且本类也没用this(...)委派,则编译失败
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











