this() 是 java 中用于同一类构造器间调用的关键字,必须位于首行且不可与 super() 共存;参数须严格匹配目标构造器签名;仅限构造器内首行使用,支持参数递进式设计。

this() 是 Java 中用于在同一个类的不同构造器之间进行调用的关键语法,它必须是构造器的第一条语句,作用是复用已有构造逻辑、避免代码重复,实现参数的“平滑传递”。
必须放在第一行,且不能和 super() 共存
Java 规定:一个构造器里只能有一个显式调用(this() 或 super()),且必须是首行。如果你写了 this(...),就不能再写 super(...);反之亦然。
- 错误写法:
public Person(String name) {
super(); // 编译报错!this() 和 super() 不能共存
this(name, 0);
} - 正确写法:
public Person(String name) {
this(name, 0); // 首行,调用含两个参数的构造器
}
参数要严格匹配被调用构造器的签名
this(...) 括号里的实参,类型和数量必须与目标构造器的形参完全一致(支持自动类型提升,但不支持隐式转换如 String → int)。
- 有构造器:
Person(String name, int age) - 可合法调用:
this("Alice", 25)、this(name, 18) - 不可调用:
this("Alice", "25")(String 无法自动转 int)、this("Alice")(少一个参数)
常用于“参数递进式”构造设计
典型模式是定义一个最全参数的“主构造器”,其他构造器通过 this() 把缺省值补上,统一委托给它处理初始化逻辑。
- 例如:
public Person(String name, int age, String id) { ... } // 主构造器public Person(String name, int age) { this(name, age, null); }public Person(String name) { this(name, 0, null); }- 这样所有对象最终都走同一套初始化路径,字段赋值、校验、日志等逻辑只写一次
不能在静态上下文或普通方法中使用
this() 只能在构造器内部、且必须为首行出现。它不是普通方法调用,而是构造流程的跳转指令。
- 以下全部非法:
void init() { this("x"); } // 不在构造器里
static { this("x"); } // 静态块里
public Person() { System.out.println("hi"); this("x"); } // 不在首行











