this关键字

1.问题

如图,我们定义了成员变量name,又写了一个方法sayhello,里面的形参之前说过本质也是一个变量,即是局部变量,也叫name。

这时,我们给成员变量赋值为钢门吹雪,局部变量是西域狂鸭,我们输出name,得到的是哪个名字?

答案是西域狂鸭,原因有两点,第一点java中存在就近原则,我们调用sayhello方法时,西域狂鸭离方法近,所以优先打印西域狂鸭。

第二点,我们并没有打印成员变量,而是只给了成员变量赋值,所以打印的肯定只有西域矿鸭


2.那如果我们就不想直接打印成员变量而要通过方法中的name打印出钢门吹雪呢?

这时就可以使用this关键字,this关键字可以区分成员变量和局部变量的重名


3.this关键字的作用和省略规则


.

4.this的介绍

1.代表地址

如图

之前我们直接打印对象的时候出现的是地址,这里我们直接打印this发现出现的也是地址,并且和对象的地址一模一样,说明,this就是对象的地址。

2.谁调用this,this就代表谁


如图,stu1和stu2都调用了print,this分别打印了stu1和stu2的地址

.

5.this内存图

https://kdocs.cn/l/cuQvFYJirzaR?linkname=150996219

主方法进栈,有new进堆,空间中还存在this。

调用sayhello方法,方法中的形参也是变量,并且是局部变量。你给我什么,我就有什么,所以局部变量的name记录到西域狂鸭。

调用sayhello的是stu,所以把stu写上,打印西域狂鸭。

接着往下走,碰到this,之前说过,哪一个对象调用方法,方法中的this就代表哪一个对象的地址,所以方法中的this代表的是stu,this.name也就可以理解为stu.name,根据stu的地址找到name打印了钢门吹雪

6.总结

posted @ 2024-11-20 23:13  直実  阅读(8)  评论(0编辑  收藏  举报