this()是Java中构造方法内调用本类其他构造方法的语法,属构造器链机制,必须首行且唯一,用于委托初始化、避免重复代码并提升灵活性。

Java中用this()在构造方法里调用本类其他构造方法,能避免重复代码,让对象属性初始化更清晰、更灵活。关键在于调用必须是构造方法的第一条语句,且只能出现一次。
什么是this()调用?
this()是构造方法内部调用本类其他构造方法的语法,属于“构造器链”(constructor chaining)机制。它不是创建新对象,而是把初始化逻辑委托给另一个构造方法执行。
- 必须写在构造方法第一行,否则编译报错
- 不能和
super()共存(二者都需首行) - 可形成多层调用链,比如 A → B → C,但最终必须落到一个不带
this()的构造方法上
用this()实现属性链式初始化
当类有多个字段,用户可能只提供部分参数时,可以用this()把简略构造方法“补全”为完整初始化流程。例如定义一个Person类:
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 != null ? city : "Unknown";
}
// 只传姓名:默认年龄0,城市未知
public Person(String name) {
this(name, 0, null); // 委托给全参构造
}
// 传姓名和年龄:城市设为默认
public Person(String name, int age) {
this(name, age, null); // 同样委托
}
}
这样无论调用哪个构造方法,最终都走统一赋值逻辑,校验、默认值、转换等集中维护,不易出错。
立即学习“Java免费学习笔记(深入)”;
常见陷阱与注意事项
初学者容易在这里踩坑,尤其涉及字段赋值顺序和null处理时:
- 别在
this()调用前对字段赋值——语句无效,因为构造链还没开始;所有初始化应放在被调用的构造方法里 - 如果被调用构造方法中用了
this.xxx,要确保该字段已在当前对象实例中可访问(即构造链已启动) - 避免循环调用,如 A 调 B,B 又调 A,编译会直接拒绝
- 静态字段或方法不能在
this()调用前使用,因此时对象尚未完全构建
结合Builder模式的轻量替代方案
当构造参数特别多或组合复杂时,纯this()链可能变得冗长。这时可考虑搭配静态内部类Builder,但仍保留this()做底层统一初始化:
public Person(Builder builder) {
this(builder.name, builder.age, builder.city);
}
public static class Builder {
private String name;
private int age = 0;
private String city = "Unknown";
public Builder name(String name) { this.name = name; return this; }
public Builder age(int age) { this.age = age; return this; }
public Person build() { return new Person(this); }
}
这样既保持构造逻辑集中,又提升API易用性。



















