第一种用法:可省略的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的三个用法…
转载:https://blog.csdn.net/weixin_44307737/article/details/104771508