this()用于构造方法中调用本类其他构造方法,必须为首条语句、仅限构造方法内使用、不可与super()共存、禁止循环调用,括号内参数须严格匹配目标构造方法。

在 Java 中,this() 是一种在构造方法中调用本类其他构造方法的语法,必须写在构造方法的第一行,且只能出现一次。
什么时候需要用 this()?
当一个类有多个构造方法,而它们之间存在重复逻辑(比如都初始化某些字段)时,可以用 this() 把公共初始化逻辑集中到一个“主构造方法”里,避免代码冗余。
- 只能在构造方法内部使用,不能在普通方法或静态上下文中用
- 必须是构造方法里的第一条语句,否则编译报错
- 不能和
super()同时出现(二者都要求第一行) - 不能形成循环调用,比如 A 调 B、B 又调 A,编译会拒绝
怎么写 this()?
this() 后面的括号里填的是目标构造方法的参数列表,类型和个数要严格匹配。
例如:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
public class Person {
private String name;
private int age;
// 主构造方法(含完整初始化)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 用 this() 复用上面的构造逻辑
public Person(String name) {
this(name, 0); // 相当于 new Person(name, 0)
}
// 无参构造也复用
public Person() {
this("unknown"); // 先调用单参构造,再间接调用双参构造
}
}
常见错误提醒
初学者容易踩这几个坑:
- 把
this()写在第二行——编译失败 - 在已有
super(...)的构造里再加this()——冲突,只能选其一 - 参数类型不匹配,比如传
"abc"却想调用Person(int)——编译报错 - 误以为
this()是普通方法调用,试图赋值或写条件判断——语法不允许
和 super() 的关系
每个构造方法最终都要调用父类构造器。如果没显式写 super(),编译器会自动插入 super()(无参)。但一旦用了 this(),就代表你把初始化委托给了本类另一个构造方法,那个被调用的构造方法负责处理父类调用。
换句话说:this() 链条末端的那个构造方法,必须包含 super(...) 或依赖默认的无参 super()。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










