在Java中,构造器内可用this()调用同类其他构造器,但必须是首条语句、仅一次、不可与super()共存。典型用于参数归一化委托,如Person(String)→Person(String,int)→Person(String,int,String)。
在 Java 中,构造器内部可以使用 this() 调用同一个类中的其他构造器,但必须满足严格条件:它必须是构造器中的第一条语句,且只能出现一次。
使用 this() 调用其他构造器时,编译器会强制要求:
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() 前调用,因对象尚未完全构建)