一文彻底弄懂this关键字用法

简介: 大家好,我是指北君。PS:最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,我连日加班好多天,终于整理好了,16000+ 道,295多份,多份面试题大全,我会持续更新中,马上就会整理更多!【文末有领取方式】

介绍完 native、static、final 关键字后,指北君再接再厉,接着为大家介绍另一个常用的关键字——this。

this 也是Java中的一个关键字,在《Java编程思想》第四版第五章5.4小节对 this 关键字是这样介绍的:

this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。

其实简单来说 this 关键字就是表示当前对象,下面我们来具体介绍 this 关键字在Java中的用法。


1、调用成员变量


在一个类的方法内部,如果我们想调用其成员变量,不用 this,我们会怎么做?

40.png

看上面的代码,我们在 ThisTest 类中创建了一个 name 属性,然后创建了一个 setName 方法,注意这个方法的形参也是 String name,那么我们通过 name = name 这样赋值,会改变成员变量 name 的属性吗?

41.png

打印结果是 Tom,而不是我们重新设置的 Marry,显然这种方式是不能在方法内部调用到成员变量的。因为形参的名字和成员变量的名字相同,setName 方法内部的 name = name,根据最近原则,编译器默认是将这两个 name 属性都解析为形参 name,从而导致我们设值操作和成员变量 name 完全没有关系,当然设置不了。

解决办法就是使用 this 关键字。我们将 setName 方法修改如下:



42.png

在调用上面的 main 方法进行赋值,打印的结果就是 Marry 了。

this 表示当前对象,也就是调用该方法的对象,对象.name 肯定就是调用的成员变量。


2、调用构造方法


构造方法是与类同名的一个方法,构造方法没有返回值,但是也不能用 void 来修饰。在一个类中,必须存在一个构造方法,如果没有,编译器会在编译的时候自动为这个类添加一个无参构造方法。一个类能够存在多个构造方法,调用的时候根据参数来区分。


43.png


通过 this("Marry") 来调用另外一个构造方法 ThisTest(String name) 来给成员变量初始化赋值。

注意:通过 this 来调用构造方法,只能将这条代码放在构造函数的第一行,这是编译器的规定,如下所示:放在第二行会报错。

44.png

3、调用普通方法

this 表示当前对象,那么肯定能够调用当前类的普通方法。


45.png

第 2 行代码,在 printName() 方法内部调用了 say() 方法。


4、返回当前对象


46.png


这表示的意思是谁调用 newObject() 方法,那么就返回谁的引用。


5、小结


好了,这就是Java中对 this 关键词的介绍,记住一句话 this 代表的就是当前。

指北君后续的文章会给大家介绍Java中的各种关键字。

我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

面试大全包括:包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!

领取方式:扫描下方公众号【Java技术指北】回复【面试大全】即可获取47.jpg

相关文章
|
5月前
|
编译器 C++ 开发者
通俗讲解 初学者一文看懂!虚函数、函数重载、重写的区别
函数重载允许在同一作用域内定义同名但参数列表不同的函数,提高代码灵活性和可读性,避免命名冲突。通过参数类型自动选择合适版本,如C++中的`print()`可处理整数、浮点数和字符串。虚函数实现运行时多态,基类指针调用时调用实际对象的版本。抽象类至少有一个纯虚函数,不能实例化,用于定义接口规范。抽象类和纯虚函数是构建多态和继承体系的基础,提供接口标准,减少代码冗余,增强代码清晰性和可维护性。
|
6月前
|
Java 编译器
还没搞懂重写和重载吗?这篇文章可以帮助你
还没搞懂重写和重载吗?这篇文章可以帮助你
46 1
|
6月前
|
Java
Java面向对象编程,构造函数和方法的区别是什么?
Java面向对象编程,构造函数和方法的区别是什么?
115 2
|
存储 JavaScript 前端开发
📕 重学JavaScript:函数的入参(arguments)是什么类型?我能怎么使用它?
arguments是一个特殊的对象👏,它可以存储我们给函数传递的所有参数。只不过它的属性从0开始排,依次为0,1,2…最后还有callee和length属性。我们也把这样的对象称为类数组。
98 0
|
安全 Java 编译器
重温C与C++之构造函数
C++进阶之构造函数
133 0
|
Java
Java面向对象进阶7——代码块
Java面向对象进阶7——代码块
92 0
Java面向对象进阶7——代码块
|
Java
Java内部类大全(含代码例子)
写在一个类里面的类就叫内部类
97 0
|
Java C++ Python
详解Python函数的作用域是干嘛的
Python是静态作用域语言,尽管它自身是一个动态语言。也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的。
|
测试技术
软件测试面试题:请讲一讲析构函数和虚函数的用法和作用?
软件测试面试题:请讲一讲析构函数和虚函数的用法和作用?
94 0
|
Java Go Python
一文搞懂参数传递原理(上)
最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深究一些细节与原理。 就拿参数传递一事来说各个语言的实现细节各不相同,但又有类似之处;在许多新手入门时容易搞不清楚,导致犯一些低级错误。
下一篇
无影云桌面