java中this()调用本类其他构造器必须为首条语句、仅一次、不可与super()共存、参数须严格匹配、禁止循环调用,本质是编译期确定的构造器链,用于复用初始化逻辑。

在 Java 构造器中调用同一类的其他构造器,要用 this(...) 语法,且必须是构造器的第一条语句。
调用规则和写法
只能在构造器内部使用 this(参数) 调用本类的其他构造器,不能在普通方法里用,也不能放在第二行或之后。编译器会检查是否为首行,否则报错。
- 必须是构造器的第一条可执行语句(前面可以有注释或空行)
- 不能和 super(...) 同时出现(二者都要求首行)
- 不能形成循环调用,比如 A 调 B、B 又调 A,编译会拒绝
常见写法示例
比如一个 Person 类有多个构造器:
public class Person {
private String name;
private int age;
public Person(String name) {
this(name, 0); // 调用三参数构造器,年龄默认为 0
}
public Person(String name, int age) {
this(name, age, "unknown"); // 调用全参构造器,城市默认 unknown
}
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
// city 暂不赋值,仅作演示
}
}
为什么不能在普通方法里调用构造器
构造器本质是创建对象时的初始化入口,不是普通方法。Java 不允许运行时“重新构造”已存在的对象,this(...) 是编译期就确定的构造链,只在 new 对象那一刻触发一次。
- 想复用初始化逻辑,可把公共代码提取成 private 初始化方法
- 例如:把字段赋值逻辑写在 init(...) 里,多个构造器都调它
和 super(...) 的区别
this(...) 是调本类其他构造器;super(...) 是调父类构造器。两者互斥,因为都得写在第一行。如果没显式写 super() 或 this(),编译器会自动插入无参 super()。
- 子类构造器中,若要调父类带参构造器,必须显式写 super(参数)
- 此时就不能再写 this(...),反之亦然
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











