发布于2026-07-04 阅读(0)
扫一扫,手机访问
先聊一个几乎所有Ja va新手都会踩的坑——给成员变量赋值,结果却赋了个寂寞。
假设你在构造器里写了 name = name,编译能通过,但运行后发现对象的 name 还是 null。原因很简单:左右两边都是参数 name,成员变量压根没被碰过。这就是典型的变量命名冲突问题,也是 this 关键字最经典的应用场景。

当方法参数、构造器参数或局部变量与类的成员变量同名时,就会发生命名冲突。此时直接使用变量名会访问到局部作用域的变量,导致无法访问同名的成员变量——这就产生了所谓的“遮蔽”现象。
name = name,右边的 name 是参数,左边也是参数(赋值无效),成员变量根本没被赋值那么,this 是怎么解决这个问题的呢?在实例方法或构造器中,用 this.变量名 可以明确指代当前对象的成员变量,从而避开局部变量遮蔽(shadowing)。
this.name → 当前对象的成员变量 namename(无 this)→ 参数或局部变量 namethis 访问(会编译报错)来看两种最常见的写法:
// 构造器中解决参数与成员变量同名
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name; // this.name 是成员变量,name 是参数
this.age = age; // 同理
}
}
// setter 方法中避免歧义
public void setName(String name) {
this.name = name; // 必须用 this,否则赋值的是参数本身(无效果)
}
当然,不是所有情况都需要 this。只有存在同名遮蔽时才需要显式使用。
userName 和 name),可不写 thisthis() 是调用本类其他构造器,和变量访问无关,别混淆this(因为静态方法不属于任何实例)this 的赋值,可借助工具减少手误
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8