“全栈2019”Java第四十章:this关键字

149 阅读5分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.this关键字

在讲解this关键字之前,我们先来看一个例子。

演示:

分别创建两个Student类的对象tom和jack。然后显示输出两个对象的info方法。

实现:

Student类:

“全栈2019”Java第四十章:this关键字

Main类:

“全栈2019”Java第四十章:this关键字

结果:

“全栈2019”Java第四十章:this关键字

从运行结果来看,准确无误。

但有个疑问,Student类里面只有一个info方法,它怎么知道谁被调用的?

“全栈2019”Java第四十章:this关键字

换言之,我们可以在Main类里面显示输出Student对象的name字段:

“全栈2019”Java第四十章:this关键字

这样我们可以明确的知道是tom调用了它的name字段和jack调用了它的name字段,但是info方法里面是通过什么知道的呢?

“全栈2019”Java第四十章:this关键字

name字段前面没有写哪个对象名,但是它省略了this关键字。

下面我们来聊聊this关键字:

在实例方法或构造方法中,this是对当前对象的引用 - 正在调用其方法或构造方法的对象。 我们可以使用this从实例方法或构造函数中引用当前对象的任何成员。

改造info方法:

“全栈2019”Java第四十章:this关键字

字段前面都加上了this关键字,也就是当tom对象调用info方法时,this就代表tom,也就是tom.name;当jack对象调用info方法时,this就代表jack,也就是jack.name。

2.this与方法参数遮蔽

使用this关键字的最常见原因是因为字段被方法或构造方法参数遮蔽。

演示:

在Student类中提供一个可以设置name字段值的方法。

实现:

Student类:

“全栈2019”Java第四十章:this关键字

Main类:

“全栈2019”Java第四十章:this关键字

结果:

“全栈2019”Java第四十章:this关键字

从运行结果来看,准确无误。

我们着重来看一下setName方法:

“全栈2019”Java第四十章:this关键字

左边的this.name换成实例对象就是tom.name或jack.name;

右边的name是方法参数列表中的参数名name。

如果你不使用this关键字:

“全栈2019”Java第四十章:this关键字

左右两边的name都是参数名name。自己赋值给自己,这种写法肯定是错误的。

3.this与构造方法

当我们有多个构造方法,构造方法之间想调用时,可以使用this关键字。

在构造方法中,您还可以使用this关键字来调用同一个类中的另一个构造方法。 这样做称为显式构造方法调用。

演示:

Student类中使用this关键字调用构造方法。

实现:

Student类:

“全栈2019”Java第四十章:this关键字

Main类:

“全栈2019”Java第四十章:this关键字

结果:

“全栈2019”Java第四十章:this关键字

大家看到这个结果,有没有和你想象中的不一样?

为什么显示输出的顺序是“三个参数的构造方法”、“两个参数的构造方法”、“一个参数的构造方法”?

我们来看一下调用方法的时序图:

“全栈2019”Java第四十章:this关键字

其中,我们可以很清楚的看到,1.1调用Student的一个参数的构造方法,接着调用了两个参数的构造方法、三个参数的构造方法,最后一个参数的构造方法才被执行完毕:

“全栈2019”Java第四十章:this关键字

一个参数的构造方法要等待两个参数的构造方法执行完毕才能继续执行,两个参数的构造方法要等待三个参数构造方法执行完毕才能继续执行。所以,三个参数的构造方法最先执行完毕,其次是两个参数的构造方法,最后是一个参数的构造方法。

3.方法参数传递中使用this

演示:

在Utils类中定义一个显示输出Student信息的方法,然后Student类中的info方法调用其方法。

实现:

Utils类:

“全栈2019”Java第四十章:this关键字

Student类:

“全栈2019”Java第四十章:this关键字

Main类:

“全栈2019”Java第四十章:this关键字

结果:

“全栈2019”Java第四十章:this关键字

我们来看一下Student类中info方法:

“全栈2019”Java第四十章:this关键字

printStudent是一个静态方法,这不用再说,直接用类名就可以调用。我们看方法参数传递的是this,这里的this,当tom对象调用info方法时,this就代表tom对象;当jack对象调用info方法时,this就代表jack对象。我们也看到Utils类中的printStudent方法参数接收一个Student对象:

“全栈2019”Java第四十章:this关键字

4.返回值为this

我们还可以将this作为方法的返回值。

演示:

在Student类中,分别定义设置名字、年龄、身高三个方法,将它们的返回值设为this。

实现:

Student类:

“全栈2019”Java第四十章:this关键字

Main类:

“全栈2019”Java第四十章:this关键字

结果:

“全栈2019”Java第四十章:this关键字

我们可以看到的是这种链式调用非常方便,可以不停的继续调用对象方法。后面在Build设计模式的时候还会再讲解。

总结

  • 在实例方法或构造方法中,this是对当前对象的引用 - 正在调用其方法或构造方法的对象。 我们可以使用this从实例方法或构造函数中引用当前对象的任何成员。
  • 使用this关键字的最常见原因是因为字段被方法或构造方法参数遮蔽。
  • 方法参数传递中使用this。
  • 将this作为方法的返回值。

至此,Java中this关键字相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第三十九章:构造函数、构造方法、构造器

下一章

“全栈2019”Java第四十一章:static关键字

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第四十章:this关键字

版权声明

原创不易,未经允许不得转载!