Java中"this"关键字的用法...


第一种用法:可省略的this.

首先引入一个我之前遇到的一个疑惑:

我的疑惑是:创建的n方法没有static关键字,证明是实例方法,a是实例变量,方法调用时需要"引用."的方法,而n方法没有,直接输出a,也没有报错,我有些疑惑,后来明白了,其实这就是this的作用。

在上图中,n方法可以写成另一种写法:

public void n(){
   
System.out.println(this.a);
}

所以,事实上,输出的a其实是<mark>this.a省略的写法</mark>,这是为什么呢?
n方法是实例方法,a是实例变量,需要"引用.“的方式来,换个说法就是需要创建对象,创建了不同对象,a可能也会发生变化。
而在n方法定义时,不可能在System.out.println();中写固定的哪个引用.的a,而这个时候,<mark>this.就代表的是"当前调用对象."</mark>,换个说法就是:<mark>谁调用它,这个this就是谁</mark>。也就是说,创建了新的对象,命名为引用"d”,那么d调用这个n方法,this.a就等同于d.a。如果创建了新的对象d1,d1调用了n方法,也就是输出d1.a。
这样一来,就十分灵活。
这就是this的用法之一,在此用法下this.可以省略


第二种用法:区分局部变量和方法变量

我们再来看一段代码


存在什么问题?我们可以发现在setNo和setAge方法里,形参名为int a和int b,再分别把a的值赋给no,b的值赋给age,其实这样定义意义不便于让人理解,改动一下,利用this,改成下列代码。

结果:

我们可以发现,setNo方法和setAge方法中的形参变量是no和age我们再把局部变量no的值赋给成员变量no,局部变量age的值赋给成员变量age,可是我们应该如何区分局部变量和成员变量呢?所以我们用了this,this.no代表的是成员变量,同理,this.age代表的也是成员变量。
所以,this的作用很重要的一点就是<mark>区分同名的成员变量和局部变量</mark>,且在这种情况下this不可省略


第三个用法:this();

第三个用法就是this();


我们在代码里无参构造方法里重新规定一下,默认给定的no和age是200和30;
可是如果有大量这样类似的代码,这样写会很麻烦,利用this();可以快捷。
作用:<mark>this();代表在一个构造方法里调用另一个构造方法,且只能出现在构造方法里的第一行来使用,也就意味着只能使用一次</mark>

我们把无参构造方法里的代码修改一下:

public Demo06(){
   
this(200,30);
}

这样就和图片中的代码作用一样了。


以上就是this的三个用法…

全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
bLanK的小号:建议自己写一个比较新颖的项目,比如思维导图,在线文档,仿造postman,仿造一个组件库
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务