this(...) 是在构造方法中调用本类其他构造方法的语法,用于委托初始化流程、避免重复代码,必须位于第一行且不能与 super(...) 共存。

在 Java 中,构造方法重载时,可以用 this(...) 调用本类其他构造方法,实现逻辑复用、避免重复代码,但必须是构造方法的第一条语句。
什么是 this() 调用?
this(...) 是在构造方法内部调用本类其他构造方法的语法。它不是创建新对象,而是将初始化流程委托给另一个构造器,常用于参数较多时统一收口到一个“主构造器”。
注意:this(...) 必须出现在构造方法第一行,否则编译报错;且不能和 super(...) 同时出现(二者都需首行)。
典型使用场景与写法
常见于有多个参数组合的类,例如表示坐标的 Point 类:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
- 提供无参构造器,默认设为 (0, 0)
- 提供单参数构造器,认为是 x 坐标,y 默认为 0
- 提供双参数构造器,完整指定 x 和 y
可让前两个构造器都通过 this(...) 委托给双参数构造器:
public class Point {
private int x, y;
public Point() {
this(0, 0); // 委托给双参构造
}
public Point(int x) {
this(x, 0); // 委托给双参构造
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
关键规则与易错点
-
this(...)只能调用本类构造方法,不能调用父类或静态方法 - this(...) 的构造器(即真正执行初始化的构造器)
- this(...) 或重写无参构造
和 super() 的关系
每个构造方法最终都要确定调用哪个父类构造器:要么显式写 super(...),要么隐式调用 super()(无参父构)。而 this(...) 的本质是把“确定父构”的责任移交给了被调用的构造器。所以只要保证整个构造链中某处有合法的 super(...)(显式或隐式),就满足继承要求。
例如:A 类继承 Object,它的双参构造里没写 super(),但因 Object 有无参构造,所以隐式生效;而它的单参构造写了 this(x, 0),也就间接完成了父类初始化。

















