最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java 中构造器内部使用 this 调用其它构造器方法
时间:2026-07-07 09:52:03 编辑:袖梨 来源:一聚教程网
在Java中,构造器内可用this()调用同类其他构造器,但必须是首条语句、仅一次、不可与super()共存。典型用于参数归一化委托,如Person(String)→Person(String,int)→Person(String,int,String)。
在 Java 中,构造器内部可以使用 this() 调用同一个类中的其他构造器,但必须满足严格条件:它必须是构造器中的第一条语句,且只能出现一次。
调用规则与限制
使用 this() 调用其他构造器时,编译器会强制要求:
- 必须位于构造器的第一行,否则编译报错(如放在变量声明或 if 语句后,直接拒绝编译)
- 一个构造器中最多只能有一个
this()调用(不能链式多次调用) - 不能和
super()同时存在(二者都需首行,互斥) - 不能在静态上下文、普通方法或初始化块中使用
典型使用场景:参数归一化
常见做法是把复杂参数转换为统一形式,再委托给最全的构造器处理。例如:
public class Person {
private String name;
private int age;
private String id;
// 主构造器(含全部参数)
public Person(String name, int age, String id) {
this.name = name;
this.age = age;
this.id = id != null ? id : "N/A";
}
// 重载:只传 name 和 age → 补默认 id
public Person(String name, int age) {
this(name, age, null); // ✅ 正确:首行调用
}
// 重载:只传 name → 补默认 age 和 id
public Person(String name) {
this(name, 0); // ✅ 正确:间接委托到三参数构造器
}
}
立即学习“Java免费学习笔记(深入)”;
常见错误示例
以下写法均非法:
-
this(); System.out.println("hello");——this()不在首行 -
this("a"); this("b");—— 多次调用 -
if (x > 0) this("valid");—— 条件语句中调用 -
this(); super();—— 与super()冲突
替代方案:避免过度嵌套
当构造逻辑较复杂时,可考虑:
- 提取共用初始化逻辑到私有方法(但注意:不能在
this()前调用,因对象尚未完全构建) - 改用静态工厂方法(更灵活,可命名、可缓存、可返回子类型)
- 使用 Builder 模式(适合参数多、可选字段多的场景)
相关文章
- 《Disney Lorcana: Wilds Unknown》预购开启 首批《Toy Story》及皮克斯卡牌购买指南 07-29
- 车来了赶车闹钟如何设置 07-29
- 崩坏星穹铁道余晖残卷巨剑守护打法攻略 07-29
- 崩坏星穹铁道砂金角色部分背景介绍 07-29
- 崩坏3雷电芽衣什么时候上线 07-29
- 玩具熊的五夜后宫4代噩梦气球男孩Nightmare Balloon Boy介绍 07-29