最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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()(无参父类构造器)。
相关文章
- 《Disney Lorcana: Wilds Unknown》预购开启 首批《Toy Story》及皮克斯卡牌购买指南 07-29
- 车来了赶车闹钟如何设置 07-29
- 崩坏星穹铁道余晖残卷巨剑守护打法攻略 07-29
- 崩坏星穹铁道砂金角色部分背景介绍 07-29
- 崩坏3雷电芽衣什么时候上线 07-29
- 玩具熊的五夜后宫4代噩梦气球男孩Nightmare Balloon Boy介绍 07-29