当局部变量与成员变量同名时,java优先使用局部变量,需用this.明确访问成员变量;this只能用于非静态上下文,常见于构造方法和setter方法中初始化成员变量。

当方法的局部变量和类的成员变量同名时,Java 会优先使用局部变量,导致无法直接访问同名的成员变量。这时用 this 关键字可以明确指代当前对象的成员变量,从而消除歧义。
用 this.成员变量 访问被遮蔽的成员变量
在构造方法或普通方法中,如果参数名或局部变量名与成员变量名相同,编译器会“遮蔽”(shadow)成员变量。此时必须通过 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.age 指成员变量,age 指参数
}
}
常见场景:构造方法初始化和 setter 方法
这是 this 消除命名冲突最典型的两个地方:
- 构造方法中用同名参数初始化成员变量——必须用 this.field = param
- setter 方法中接收同名参数并赋值给成员变量——同样依赖 this.field = value
- 若不加 this,语句如
name = name;实际是把参数赋给自己,成员变量未被修改
注意:this 只能用于非静态上下文
this 代表当前对象的引用,因此只能在实例方法、构造方法中使用。不能在 static 方法或 static 块中使用 this,否则编译报错。
public static void printName() {
// 编译错误!static 方法中不能使用 this
// System.out.println(this.name);
}
小技巧:IDE 通常自动补全 this.(可选但清晰)
有些开发人员习惯在所有成员变量前都加 this.,即使没有命名冲突,也能一眼看出这是实例变量。虽然不是必须,但在团队协作或复杂类中能提升可读性。
- 例如:
this.id = id;、return this.name; - 但注意:不要在静态字段或局部变量前误加 this











