this关键字

this 关键字

1 this 修饰的变量用于指代成员变量
    ▲方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
    ▲方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

2 什么时候使用 this 呢?
    在 局部变量 和 成员变量 同名的时候,解决 局部变量 隐藏 成员变量 的问题

3 this:代表所在类的对象引用
    ▲记住:方法被哪个对象调用,this就代表哪个对象

在这里,控制台没有赋值成功。

这个 name 是局部变量

这个 name 是成员变量

而在方法中直接写 name ,它看到的只能是 局部变量这个 name ,也就是说  name = name; 参照的都是 (String name) 里的name

想把 局部变量 赋值给 成员变量 该怎么办?

this关键字 修改这个代码

输出成功

this 修饰 这个 name 它指代的就是成员变量


this 内存原理

1. 程序执行从 main方法开始。(图 1)
首先main方法进入栈内存中

图 1

2,创建了第一个对象 s1 
堆内存出现一块内存空间,最终的地址是 001,把 001 赋值给 s1  (图 2)

图 2

3. s1 调用 setName 方法   (图 3)
setName 方法进入栈内存
setName方法 有一个 形参 name,它的值是传递过来的 “林青霞”
这个方法是被 s1 调用的,调用者是 s1 
方法中的 this 就是 s1

图 3

4. setName里面方法的执行 (图 4)
this.name = name;
this通过 001 指向堆内存的内存空间,name 找到 001这块地址的 name
最后,参数“林青霞”赋值给 this.name,也就是修改name的值为“林青霞”  (图5)

图 4
图 5

5. setName 方法 调用完毕,从栈内存消失

6. 创建第二个对象 (图 6)
堆内存出现一块内存空间,最终的地址是 002,把 002 赋值给 s2

图 6

7.  s2调用 setName 方法   (图 7)
方法首先加载到栈内存,这次参数 name 的值是“张曼玉”,调用者是 s2,this 是 s2

   图 7

8. this.name = name;   (图 8)
this通过 002 指向堆内存的内存空间,name 找到 002这块地址的 name
最后,参数“张曼玉”传递过去修改它的值

图 8

9. setName 方法 调用完毕,从栈内存消失

10. 再往下,main方法执行完毕,从栈内存消失

方法被哪个对象调用,哪个方法里面的 this就代表的是哪个对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容