this关键字用于构造器链,必须作为首条语句调用同类其他构造器,不可与super()共存,且禁止循环调用;典型场景是减少重复代码,如person类中通过this(name,0)和this("unknown")实现链式初始化。

在 Java 中,this 关键字可用于在一个构造器中调用同一个类的其他构造器,这称为构造器链(constructor chaining)。这种调用必须是构造器中的第一条语句,且只能出现一次。
语法与基本规则
使用 this(参数列表) 语法调用同类其他构造器:
- 必须放在构造器第一行,否则编译报错
- 不能与 super() 同时出现(二者都要求首行)
- 参数类型和数量需匹配目标构造器签名
- 不能形成循环调用(如 A 调 B,B 又调 A),否则编译不通过
典型使用场景:减少代码重复
当多个构造器逻辑高度相似(比如都需初始化某些字段),可用 this 链式调用统一到一个“主构造器”中处理:
public class Person {
private String name;
private int age;
// 主构造器(完成全部初始化)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 仅传 name,age 默认为 0
public Person(String name) {
this(name, 0); // 调用双参数构造器
}
// 无参构造器,默认 name="unknown",age=0
public Person() {
this("unknown"); // 调用单参数构造器
}
}
常见错误与注意事项
以下写法会导致编译失败:
- this(...) 写在第二行或之后 → 编译错误:“call to this must be first statement”
- 在普通方法中使用 this(…) → 编译错误:仅限构造器内使用
- 试图在静态上下文(如 static 块或静态方法)中调用 → 编译错误:this 指向实例,静态环境无实例
- 参数不匹配导致重载解析失败 → 编译错误:“cannot resolve constructor”
与 super() 的关系
子类构造器默认或显式调用父类构造器(super()),而 this() 是对当前类构造器的调用。二者互斥——每个构造器最多有一个首行调用,要么是 this(...),要么是 super(...)(或隐式 super())。若未显式写 super() 或 this(),编译器自动插入 super()(无参父类构造器)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











