Java中局部变量同名时优先级最高,会遮蔽成员变量;访问成员变量需用this.变量名,this不可在静态方法中使用;内部类同名变量需用OuterClass.this.field访问外部类字段。

当局部变量和成员变量同名,Java 默认使用局部变量。想访问成员变量,必须显式写 this.变量名。
局部变量优先级最高
Java 遵循“就近原则”:在方法内声明的局部变量,会覆盖同名的成员变量。编译器按作用域层级查找,第一层就是当前代码块里的局部变量。
- 方法参数、for 循环中定义的 int i、if 块里声明的 String msg,都属于局部变量
- 只要名字一样,哪怕只在某一行出现,它在整个方法体中都会遮蔽(shadow)同名成员变量
- 不加 this 直接写变量名,永远指向局部变量
用 this 显式访问成员变量
this 是当前对象的引用,只能在非静态方法或构造器中使用。加上它,就能明确告诉编译器:“我要的是这个对象的成员变量”。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 写法统一:this.id、this.name、this.getValue()
- 常见于 setter 方法:this.name = name,避免把参数值赋给参数自己
- 静态方法中不能用 this,因为没有“当前实例”的概念
内部类中的同名变量要更小心
成员内部类也有自己的成员变量。如果它和外部类同名,内部类默认访问自己的字段,不会自动跳到外部类。
立即学习“Java免费学习笔记(深入)”;
- 访问内部类自己的变量:直接写变量名
- 访问外部类同名变量:必须写 OuterClass.this.field
- 静态嵌套类不能用 OuterClass.this,需通过外部类实例访问
别混淆 this 和 super
this 解决当前类内的命名冲突;super 用于调用父类的成员或构造器,跟局部/成员变量遮蔽无关。
- super.name 访问的是父类的 name,不是本类的成员变量
- 即使子类没定义 name,super.name 也指向父类字段,不是解决本类遮蔽问题的工具
- 误用 super 可能导致逻辑错误或编译失败

















