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


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

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

问题

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

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

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

所以,事实上,输出的a其实是this.a省略的写法,这是为什么呢?
n方法是实例方法,a是实例变量,需要"引用.“的方式来,换个说法就是需要创建对象,创建了不同对象,a可能也会发生变化。
而在n方法定义时,不可能在System.out.println();中写固定的哪个引用.的a,而这个时候,this.就代表的是"当前调用对象.",换个说法就是:谁调用它,这个this就是谁。也就是说,创建了新的对象,命名为引用"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的作用很重要的一点就是区分同名的成员变量和局部变量,且在这种情况下this不可省略


第三个用法:this();

第三个用法就是this();

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

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

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

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


以上就是this的三个用法…

冷漠

发布了19 篇原创文章 · 获赞 28 · 访问量 1244

猜你喜欢

转载自blog.csdn.net/weixin_44307737/article/details/104771508
今日推荐