何时使用‘this’访问类自身成员?代码审查中的使用合理性疑问
关于Java中
this关键字的两个常见问题解答 嘿,这两个关于this关键字的问题问得特别实在,我来结合实际开发经验给你唠清楚~
1. 何时应当使用this关键字访问类的自身成员?
简单来说,分必须使用和推荐使用两种场景:
必须用的场景:
- 当成员变量和方法参数/局部变量重名时:这是最核心的使用场景。比如你写构造器时,参数名和成员变量同名,必须用
this来区分:public class User { private String name; public User(String name) { // 这里不用this的话,编译器会把两边都当成局部参数name this.name = name; } } - 构造器之间的链式调用:如果一个类有多个构造器,想复用其他构造器的逻辑,就得用
this(参数),而且这行代码必须放在构造器的第一行:public User() { // 调用带参数的构造器,设置默认名称 this("默认用户"); } - 内部类中访问外部类的同名成员:如果内部类里的变量和外部类成员重名,必须用
外部类名.this.成员来明确指向外部类的成员,避免混淆。
- 当成员变量和方法参数/局部变量重名时:这是最核心的使用场景。比如你写构造器时,参数名和成员变量同名,必须用
推荐用的场景(风格选择):
即使没有重名问题,有些开发者会用this来明确标记这是类的成员变量/方法,让读代码的人一眼就能区分开局部变量和成员变量,尤其是在较长的方法里,能大幅提升代码的可读性。
2. 始终用this访问自身成员,是否有合理理由?
当然有不少合理的原因,很多成熟的团队会把这个作为编码规范强制执行,主要包括:
- 避免后续代码修改时出bug:如果一开始就用
this.成员访问,以后有人在方法里添加了和成员重名的局部变量时,不会突然出现逻辑错误。比如原来的代码是name = "测试";,后来有人加了String name = "局部变量";,这时候原来的赋值就变成给局部变量了,要是一开始就用this.name = "测试";,就完全不会踩这个坑。 - 统一代码风格,提升可读性:对刚接手项目的开发者来说,看到
this.xxx就立刻知道这是类的成员,不用去翻类的定义判断变量来源,尤其是在大型项目里,这点能节省不少时间。 - IDE操作更便捷:很多IDE里,点击
this.成员可以直接跳转到成员的定义处,比直接写变量名更方便导航;而且IDE也能更准确地给出代码提示,减少拼写错误。 - 适配链式调用等场景的一致性:比如有些方法需要返回
this来实现链式调用(比如public User setName(String name) { this.name = name; return this; }),如果所有成员访问都用this,代码风格会更统一,不会一会儿用一会儿不用,显得杂乱。
内容的提问来源于stack exchange,提问作者Przemysław Czechowski
相关产品推荐
相关产品推荐

