Java构造方法中this有两种用法:一是this.字段=参数,用于区分同名形参与成员变量;二是this(参数),用于构造器链调用其他构造方法,须为第一句且不可与super()共存。

在 Java 构造方法中用 this 可以避免重复赋值、提升可读性,并支持构造方法重载时的代码复用——关键在于区分 this.字段 和 this(参数) 两种用法。
用 this.字段 = 参数 明确区分形参与成员变量
当构造方法参数名和成员变量名相同时,this 能明确指向当前对象的成员变量,避免歧义。
例如:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name; // this.name 指成员变量,name 指形参
this.age = age;
}
}
不加 this 会导致赋值无效(形参覆盖自身),加了之后逻辑清晰、编译通过。
立即学习“Java免费学习笔记(深入)”;
用 this(参数) 复用其他构造方法(构造器链)
在一个构造方法里调用同类的另一个构造方法,减少重复初始化逻辑,特别适合多参数组合场景。
- 必须是构造方法的第一条语句
- 只能调用一次,且不能和
super()同时出现 - 常用于提供默认值或简化调用入口
示例:
public class Rectangle {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
// 利用 this() 复用双参构造,设置默认高度为 1.0
public Rectangle(double width) {
this(width, 1.0); // 调用上面的构造方法
}
// 无参构造,设为正方形
public Rectangle() {
this(1.0); // 最终也落到双参构造
}
}
注意事项:this 的使用边界
this 在构造方法中很实用,但要注意几点:
-
this不能在静态上下文(如静态方法、静态块)中使用 -
this(参数)必须放在第一行,否则编译报错 - 避免循环调用:
A调B,B又调A,会编译失败 - 字段初始化优先于构造方法执行,所以不要在
this(…)前对成员变量赋值
替代方案对比:Lombok 的 @AllArgsConstructor 和 @RequiredArgsConstructor
如果项目允许引入 Lombok,可以用注解自动生成构造方法,省去手写 this 赋值:
@Data
@AllArgsConstructor // 生成含全部字段的构造方法(自动用 this 赋值)
public class User {
private String username;
private String email;
}
但理解底层 this 的作用,有助于调试、阅读反编译代码,以及在不依赖工具的场景下写出健壮构造逻辑。


















