Java中可通过this()在构造方法内调用本类其他构造方法,但必须是首句、仅一次、不可与super()共存、不可循环调用且仅限构造方法内使用。

Java 中可以通过 this() 在一个构造方法里调用本类的另一个构造方法,但有严格限制:必须是构造方法的第一条语句,且只能调用一次。
语法和基本规则
this(...) 是显式调用本类其他构造方法的语法,括号内传入对应参数。它不是普通方法调用,而是构造链的起点控制机制。
- 必须放在构造方法的第一行,否则编译报错
- 不能在普通方法、静态上下文或已含
super(...)的构造方法中使用 - 不能形成循环调用(比如 A 调 B,B 又调 A),否则编译不通过
典型用法:参数重载与默认值简化
常用于减少重复初始化逻辑。例如,提供多个构造入口,把核心初始化集中到一个“主构造方法”中:
public class Person {
private String name;
private int age;
// 主构造方法(完成实际初始化)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 仅传姓名,年龄默认为 0
public Person(String name) {
this(name, 0); // 调用上面的两参构造
}
// 无参构造,设置默认值
public Person() {
this("Unknown", 0); // 调用两参构造
}
}
常见错误和注意事项
初学者容易踩坑的地方:
立即学习“Java免费学习笔记(深入)”;
-
this()和super()不能共存于同一个构造方法——二者都必须是首句,只能选其一 - 如果没写任何构造方法,编译器会自动生成无参构造;但一旦写了任意构造方法,就不会再自动加无参构造,此时若需无参入口,就得自己写并用
this(...)委托 -
this()调用的是运行时确定的构造方法签名,所以参数类型和数量必须严格匹配已有构造方法
不能替代的情况
this() 只能用于构造方法之间跳转,不能用于:
- 在普通方法里调用(语法错误)
- 调用父类构造方法(要用
super()) - 条件分支中调用(如
if (...) { this(...); }不合法)


















