java中局部变量会遮蔽同名成员变量,此时需用this明确访问成员变量;this只能用于非静态上下文,不能在静态方法等场景使用。

当成员变量和局部变量(比如方法参数或方法内定义的变量)名字一样时,Java 会优先使用局部变量——成员变量就被“遮蔽”了。这时候必须用 this 来明确告诉编译器:我要操作的是当前对象的成员变量。
构造方法里最常见
构造方法参数经常和成员变量同名,这是最典型的使用场景。不加 this,赋值就只作用在参数上,成员变量根本没变。
- 写法是:this.name = name; 左边 this.name 指成员变量,右边 name 是参数
- 如果写成 name = name;,相当于参数自己赋给自己,成员变量还是 null 或默认值
- 这种模式在 setter 方法里也一样,比如 public void setAge(int age) { this.age = age; }
普通方法里也要注意
不只是构造方法,任何实例方法中,只要局部变量和成员变量重名,就得靠 this 区分。
- 比如方法里定义了 String name = "temp";,同时类里也有 private String name;,想改成员变量就得写 this.name = "new value";
- 调用本类其他实例方法时,虽然 print(); 和 this.print(); 效果一样,但加 this 能避免和静态方法同名时的混淆
哪些地方不能用 this
this 代表当前对象实例,所以它只存在于非静态上下文中。
- 静态方法、静态代码块、静态内部类里不能用 this,编译直接报错
- 内部类中访问外部类成员变量,要用 OuterClass.this.field,而不是单纯 this.field
- 局部变量声明、赋值语句左边不能写 this,比如 this = obj; 是非法的
不用 this 的情况
只要没有命名冲突,this 就不是必需的。
- 成员变量名和参数/局部变量不同,比如参数叫 userName,成员变量叫 name,直接写 name = userName; 就行
- 团队规范可能要求统一加 this 提高可读性,但这属于风格选择,不是语法要求
- Lombok 自动生成的 setter 方法里已经内置了 this,你不用手写
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











