this()用于在构造方法中调用本类其他重载构造方法,必须是第一行语句,不可与super()共存,需严格匹配参数且避免循环调用,常用于参数精简与默认值封装。

在Java中,this()关键字可用于在一个构造方法中调用同一个类的其他重载构造方法,从而避免代码重复、提升可维护性。这种调用必须是构造方法中的**第一条语句**,且不能与super()同时出现。
调用规则与基本写法
使用this(参数)语法时,需满足以下条件:
- 只能出现在构造方法内部,且必须是第一行代码
- 括号内的实参类型和个数必须严格匹配某个已定义的重载构造方法
- 不能形成循环调用(例如A调用B,B又调用A)
- 不可与
super()共存于同一构造方法中
典型应用场景:参数精简与默认值封装
当多个构造方法存在包含关系时(如一个含全部字段,另一个只含必要字段),可用this()将逻辑统一到最全参数的构造方法中:
public class Person {
private String name;
private int age;
private String city;
// 全参构造(核心初始化逻辑集中在此)
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// 只传name和age,city默认为"未知"
public Person(String name, int age) {
this(name, age, "未知"); // 调用全参构造
}
// 只传name,age默认0,city默认"未知"
public Person(String name) {
this(name, 0, "未知"); // 仍调用全参构造
}
}
注意事项与常见错误
实际编写时容易忽略的关键细节:
-
this()不是普通方法调用,它代表“本次对象创建过程转向另一个构造流程”,因此不返回值,也不能放在if或try块中
对比:this() 与 super() 的分工
this()用于类内构造复用,super()用于调用父类构造。二者互斥,因为对象初始化必须明确是从本类开始还是从父类开始。例如:
class Student extends Person {
private String studentId;
public Student(String name, int age, String city, String id) {
super(name, age, city); // ✅ 正确:先初始化父类
this.studentId = id;
}
public Student(String name, String id) {
this(name, 0, "未知", id); // ✅ 正确:调用本类另一构造
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











