this()是在构造器首行调用本类其他构造器以复用初始化逻辑的语法,必须独占第一行、不可与super()共存、仅限构造器内使用,典型用于参数多寡不同的重载场景。

构造器重载时用 this() 复用代码,核心是让多个构造器共享初始化逻辑,避免重复写相同的赋值或校验语句。
什么是 this() 调用
this() 是在构造器第一行调用本类其他构造器的语法。它不是创建新对象,而是把当前对象的初始化任务委托给另一个构造器来完成。
- 必须放在构造器的第一行,否则编译报错
- 只能在构造器中使用,普通方法里不能写
this() - 一个构造器里最多调用一次
this() - 不能和
super()同时出现(二者都必须在第一行)
典型复用场景:参数多寡不同
比如定义一个 Person 类,支持只传姓名、传姓名和年龄、传全部信息三种方式:
public class Person {
private String name;
private int age;
private String id;
// 全参构造器(核心初始化逻辑放这里)
public Person(String name, int age, String id) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("姓名不能为空");
}
this.name = name.trim();
this.age = Math.max(0, age);
this.id = id != null ? id.trim() : "";
}
// 复用全参构造器:只传 name 和 age
public Person(String name, int age) {
this(name, age, null); // 委托给全参构造器
}
// 复用全参构造器:只传 name
public Person(String name) {
this(name, 0, null); // 委托给全参构造器
}
}
这样所有校验和规范化逻辑(如去空格、防负数)只写一次,在全参构造器里集中维护。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
注意事项和常见错误
- 参数类型或个数必须能唯一匹配某个重载构造器,否则编译失败。例如
this("a", 1)会匹配Person(String, int),不会误调Person(String, String) - 不要在
this()调用后还对字段赋值——可能被后续构造器覆盖。初始化应由被调用的构造器统一完成 - 如果多个构造器都要做相同预处理(如日志、计数),可以提取成私有静态方法,再在各构造器开头调用
不推荐的做法对比
不用 this() 的写法容易导致重复和遗漏:
// ❌ 重复校验和赋值,难维护
public Person(String name) {
if (name == null || name.trim().isEmpty()) throw ...;
this.name = name.trim();
this.age = 0;
}
public Person(String name, int age) {
if (name == null || name.trim().isEmpty()) throw ...; // 又写一遍!
this.name = name.trim(); // 又写一遍!
this.age = Math.max(0, age);
}
用 this() 就自然消除了这类问题。

















