一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java 中如何用 this 关键字调用同类其他构造器

时间:2026-07-07 09:54:52 编辑:袖梨 来源:一聚教程网

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"); // 调用单参数构造器    }}

常见错误与注意事项

以下写法会导致编译失败:

立即学习“Java免费学习笔记(深入)”;

  • this(...) 写在第二行或之后 → 编译错误:“call to this must be first statement”
  • 在普通方法中使用 this(…) → 编译错误:仅限构造器内使用
  • 试图在静态上下文(如 static 块或静态方法)中调用 → 编译错误:this 指向实例,静态环境无实例
  • 参数不匹配导致重载解析失败 → 编译错误:“cannot resolve constructor”

与 super() 的关系

子类构造器默认或显式调用父类构造器(super()),而 this() 是对当前类构造器的调用。二者互斥——每个构造器最多有一个首行调用,要么是 this(...),要么是 super(...)(或隐式 super())。若未显式写 super() 或 this(),编译器自动插入 super()(无参父类构造器)。

热门栏目