this() 是构造方法中调用本类其他构造方法的语法,必须位于首行,用于复用初始化逻辑;它与 super() 互斥,参数需严格匹配目标构造方法,避免重复代码和递归调用。

Java 中构造方法里用 this 进行参数传递,核心是通过 this(参数列表) 调用本类其他构造方法,实现构造逻辑复用,避免重复代码。
什么是 this() 调用?
this() 是构造方法内部的第一条语句,用于显式调用当前类的另一个构造方法。它必须出现在构造方法首行,且只能在构造方法中使用,不能在普通方法里出现。
例如:
public class Person {
private String name;
private int age;
public Person(String name) {
this(name, 0); // 调用三参数构造,复用初始化逻辑
}
public Person(String name, int age) {
this(name, age, "未知"); // 调用全参构造
}
public Person(String name, int age, String info) {
this.name = name;
this.age = age;
// 其他初始化操作...
}
}
this() 必须是第一行语句
编译器强制要求 this() 出现在构造方法最开头。如果前面有变量声明、打印语句或任何其他代码,会直接报错。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确写法:
this("张三");在第一行 - ❌ 错误写法:
System.out.println("start"); this("张三");—— 编译不通过 - ⚠️ 注意:不能同时使用 this() 和 super(),二者互斥,只能选其一(且都必须是首行)
参数匹配要严格对应
this(参数) 的实参类型和个数,必须与目标构造方法的形参完全匹配(遵循方法重载的解析规则)。编译期就确定调用哪个构造方法。
- 如果有多个重载构造,编译器按参数类型、数量、自动类型提升规则选择最匹配的一个
- 若无法唯一确定(如传入
null且多个构造接受不同引用类型),会编译报错 - 建议显式传入明确类型的值,或加类型转换避免歧义
常见用途和实用建议
利用 this() 主要解决构造逻辑冗余问题,让初始化职责集中、清晰。
- 把通用初始化(如校验、默认赋值、日志)放在参数最多的构造方法里,其余构造通过 this() 委托过去
- 避免在多个构造中重复写
if (name == null) throw new IllegalArgumentException(); - 配合 final 字段初始化很自然:所有构造最终都走到同一个“主构造”,确保字段只被赋值一次
- 注意递归调用风险:A → B → A 会编译报错,Java 能检测到循环调用

















