0
点赞
收藏
分享

微信扫一扫

Java基础却常被忽略:全面讲解this的实战技巧!



大家好,我是小米,一个热爱分享技术的 29 岁程序员。最近,一位朋友跟我诉苦,说他参加了一场 Java 社招面试,面试官问了一个看似简单却让人抓狂的问题——“请讲讲 this 关键字的用法。”

“这不是基础到不能再基础的问题吗?居然问这个!”朋友心里这么想,但冷静下来才发现,虽然每天用 this,但真要系统解释却有点卡壳。于是,我决定整理一篇文章,帮大家理清楚 this 的各种妙用,顺便解答几个常见的面试陷阱。

this 是什么?

this 是 Java 中的一个关键字,简单说,它代表当前对象的引用。当我们在类中调用它时,this 指向当前类的实例。它的主要作用包括:

  • 区分类的成员变量和局部变量。
  • 在构造方法中调用其他构造方法。
  • 返回当前对象(链式调用)。
  • 作为参数传递。

来看几个场景化的例子,理解它的用法。

区分成员变量和局部变量

先来看一个场景,小明是个初级开发,刚写完以下代码:

Java基础却常被忽略:全面讲解this的实战技巧!_静态方法

小明很疑惑,为什么他调用 setName("小米") 后,getName() 返回的还是 null?其实问题出在 name = name; 这行代码。

这里的两个 name 指的是同一个局部变量!如果想赋值给类的成员变量,必须用 this 来指明。

正确代码如下:

Java基础却常被忽略:全面讲解this的实战技巧!_静态方法_02

这就是 this 的最基础用法之一:区分同名变量。

在构造方法中调用其他构造方法

接下来,假设你要写一个 Person 类,有多个构造方法。面试官可能会问:“如何避免构造方法中代码重复?”

用 this 来调用另一个构造方法就是最佳答案!

来看代码:

Java基础却常被忽略:全面讲解this的实战技巧!_构造方法_03

上面的代码中,this(name, 0) 调用了第二个构造方法。这样既减少了重复代码,又方便统一管理逻辑。

注意:

  • 构造方法中调用其他构造方法时,this 必须是方法的第一行。
  • 不允许循环调用构造方法,否则会编译错误。

支持链式调用

面试中,很多人会提到链式调用。比如我们希望下面的代码可以运行:

Java基础却常被忽略:全面讲解this的实战技巧!_成员变量_04

实现链式调用的关键就在于方法返回 this。代码如下:

Java基础却常被忽略:全面讲解this的实战技巧!_构造方法_05

通过返回 this,我们可以在一个语句中完成多个调用,大大提升代码的可读性和优雅度。

作为参数传递

有时候,我们希望把当前对象传递给另一个方法或对象,这时候 this 就派上用场了!

比如,有一个 Printer 类,负责打印对象的信息。我们可以这样实现:

Java基础却常被忽略:全面讲解this的实战技巧!_静态方法_06

调用 person.print() 时,this 会将当前对象传递给 Printerprint 方法,从而实现打印。

面试陷阱:this 的几个误区

1. 静态方法中能不能使用 this?

不能!因为静态方法是属于类的,而 this 是属于实例的。在静态方法中,this 根本不存在。

错误示例:

Java基础却常被忽略:全面讲解this的实战技巧!_静态方法_07

2. this 可以出现在匿名内部类中吗?

可以!但是要注意 this 的含义。

匿名内部类中,this 指的是匿名类实例,而不是外部类实例。如果需要引用外部类,可以用 外部类名.this 的方式。

示例代码:

Java基础却常被忽略:全面讲解this的实战技巧!_成员变量_08

总结

通过今天的学习,我们知道了 this 的四种常见用法:

  • 区分成员变量和局部变量。
  • 在构造方法中调用其他构造方法。
  • 实现链式调用。
  • 作为参数传递。

同时,我们也提醒自己:静态方法中不能使用 this,匿名内部类中要注意 this 的指向。

小练习:试试看!

最后,留个小作业给大家:实现一个 Student 类,包含 name 和 score 两个属性,支持以下操作:

  • 使用构造方法初始化对象。
  • 通过链式调用设置 name 和 score。
  • 打印对象信息。

欢迎在评论区留言你的答案,我会第一时间帮你点评!

END

记住,写代码不在于记住多少,而在于动手实践!加油,我们下期见!

举报

相关推荐

0 条评论