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

开发 前端
通过今天的学习,我们知道了 this 的四种常见用法:区分成员变量和局部变量。在构造方法中调用其他构造方法。实现链式调用。作为参数传递。

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

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

this 是什么?

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

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

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

区分成员变量和局部变量

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

图片图片

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

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

正确代码如下:

图片图片

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

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

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

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

来看代码:

图片图片

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

注意:

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

支持链式调用

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

图片图片

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

图片图片

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

作为参数传递

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

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

图片图片

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

面试陷阱:this 的几个误区

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

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

错误示例:

图片图片

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

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

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

示例代码:

图片图片

总结

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

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

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

责任编辑:武晓燕 来源: 软件求生
相关推荐

2009-12-29 16:37:35

Ubuntu 9.10

2024-01-10 16:46:13

Kubernetes容器

2024-06-13 08:00:00

MySQLMySQLDump数据库

2010-08-13 14:44:26

思科路由器IOS软件

2022-05-10 09:33:50

Pandas技巧代码

2024-06-27 08:41:21

2009-08-26 08:42:09

思科认证考试资料CCNA实战技巧

2018-10-30 12:15:26

CDN网络技巧

2024-05-17 08:38:22

2021-08-17 11:20:25

Vue前端技巧

2009-12-24 16:15:17

2024-10-10 14:50:02

编程Java开发

2025-02-13 08:06:54

2009-10-23 18:29:02

linux Debia

2024-11-11 10:00:00

2024-08-30 14:21:04

2013-09-29 10:37:32

2010-04-15 16:03:19

Hyper-V灾难恢复

2021-07-14 23:57:26

Vue高级技巧

2024-11-19 15:22:37

点赞
收藏

51CTO技术栈公众号