this()必须位于构造方法第一行且只能出现一次,用于调用本类其他构造方法;不能与super()共存;仅限构造方法内使用;需避免循环调用,推荐统一指向全参构造方法。

在 Java 中,this() 调用必须放在构造方法的第一行,且只能出现一次,用于调用本类的其他构造方法。这是编译器强制要求,违反会导致编译错误。
必须是第一行语句
Java 规定 this() 必须紧随构造方法签名之后、任何其他代码(包括变量声明、打印语句、if 判断等)之前执行。哪怕只有一条空语句或注释在它前面,也会报错。
- ✅ 正确写法:this(10); // 第一行
- ❌ 错误写法:System.out.println("before"); this(10); // 编译失败
不能与 super() 同时存在
一个构造方法里,this() 和 super() 是互斥的——二者都用于控制构造链起点,只能选其一,且都必须位于首行。如果没显式写 super(),编译器会自动插入 super();,此时再写 this() 就会冲突。
- 若使用 this(),则隐式的 super() 不再插入,由被调用的另一个构造方法负责处理父类初始化
- 常见错误:在已有 super(...) 的构造方法里又加 this(...) → 编译不通过
只能调用本类构造方法
this() 的括号内参数必须匹配本类中某个构造方法的签名。它不是普通方法调用,而是构造链跳转指令,因此不支持传入表达式以外的复杂逻辑(如带副作用的方法调用),且不能在静态上下文或普通方法中使用。
立即学习“Java免费学习笔记(深入)”;
- ✅ 可以:this(name, age); 或 this(getDefaultName());
- ❌ 不允许:static void init() { this(); }(语法错误)
- ⚠️ 注意:getDefaultName() 若有副作用(如修改状态),需谨慎,因它在对象完全构造前执行
避免循环调用
多个构造方法通过 this() 相互调用时,必须确保最终能抵达一个不调用 this() 的“终点构造方法”。否则编译器会检测到循环引用并报错。
- 例如:A() → this(B);B() → this(A) → 编译失败
- 推荐模式:所有重载构造方法都指向一个参数最全的构造方法(通常含全部字段),由它完成实际初始化


















