this(...) 是构造方法中调用本类其他构造方法的专用语法,必须位于首行且仅出现一次,用于复用初始化逻辑,不可在普通方法中使用。

Java 中构造方法里用 this 实现参数传递,本质上是**构造器重载下的显式调用**,不是传统意义上的“参数传递”,而是通过 this(...) 语法在当前类的其他构造方法之间跳转,从而复用初始化逻辑。
什么是 this(...) 调用?
this(...) 是构造方法中的一条特殊语句,用于调用本类的另一个构造方法。它必须是构造方法中的**第一条可执行语句**,且只能出现一次。它的作用是避免重复写初始化代码,让多个构造方法共享核心逻辑。
例如:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
public class Person {
private String name;
private int age;
// 主构造方法(完整初始化)
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 辅助构造方法:只传 name,默认 age = 0
public Person(String name) {
this(name, 0); // ← this(...) 调用上面的双参构造
}
// 另一个辅助构造:无参,默认值
public Person() {
this("unknown", 0); // ← 同样调用双参构造
}
}
为什么不能在普通方法里用 this(...)?
this(...) 是构造专用语法,仅允许出现在构造方法的第一行。它和 super(...) 类似,属于对象创建过程中的“构造链”机制。普通方法中写 this(...) 会编译报错,因为此时对象已经创建完毕,不能再触发构造流程。
- 错误示例:
void init() { this("abc", 10); }→ 编译失败 - 正确替代:把共用逻辑提取成私有方法,在多个构造中调用
使用 this(...) 的关键规则
- 必须是构造方法中的第一行语句
- 不能和
super(...)同时出现(二者都要求首行) - 调用的目标构造方法必须存在,且参数类型、数量要匹配
- 不能形成循环调用,比如 A 调 B,B 又调 A → 编译报错
常见误区提醒
有人误以为 this.xxx = xxx 是“通过 this 传递参数”,其实这只是普通的字段赋值,和构造器调用无关。this(...) 和 this.字段 完全是两个概念:
-
this(name, age)→ 调用另一个构造方法(构造链) -
this.name = name→ 给当前对象的字段赋值(避免形参遮蔽)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










