this关键字用于构造器链,必须作为首条语句调用同类其他构造器,不可与super()共存,且禁止循环调用;典型场景是减少重复代码,如Person类中通过this(name,0)和this("unknown")实现链式初始化。
在 Java 中,this 关键字可用于在一个构造器中调用同一个类的其他构造器,这称为构造器链(constructor chaining)。这种调用必须是构造器中的第一条语句,且只能出现一次。
使用 this(参数列表) 语法调用同类其他构造器:
当多个构造器逻辑高度相似(比如都需初始化某些字段),可用 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"); // 调用单参数构造器 }}
以下写法会导致编译失败:
立即学习“Java免费学习笔记(深入)”;
子类构造器默认或显式调用父类构造器(super()),而 this() 是对当前类构造器的调用。二者互斥——每个构造器最多有一个首行调用,要么是 this(...),要么是 super(...)(或隐式 super())。若未显式写 super() 或 this(),编译器自动插入 super()(无参父类构造器)。