this关键字

this关键字

1.作用:
用于调用本类的成员(变量、方法),区分局部变量和成员变量的重名,this修饰的变量用于指代成员变量

2.在局部变量中,若局部变量和成员变量同名,不带this修饰变量指的是形参变量,带this修饰变量指的是成员变量

3.为了见名之意,将上述代码中局部变量与成员变量改为一样的名字,在用局部变量给成员变量赋值时,用this指明谁是成员变量

4.this代表所在类的对象引用(即对象的地址)。方法被哪个对象调用,this就代表哪个对象

示例:
学生类:

在这里插入图片描述

测试类:
在这里插入图片描述

this内存图:
在这里插入图片描述

代码在内存中运行的步骤:

<1>首先有main方法的调用进入栈内存

<2>声明Student类型的s1变量进入栈内存
New Student 创建一个Student类的实例对象,在堆内存中开辟空间产生地址,成员变量也会存入堆内存,且成员变量有默认初始值

<3>堆内存中开辟的空间地址返回给栈内存告诉s1

<4>打印双引号内文字

<5>打印s1的地址

<6>s1.setName(“张三”) 将setName方法加载到栈内存,方法中的局部变量(形式参数)接收到“张三”。

<7>因为此方法被s1调用,所以方法中的this就指的是s1这个对象,s1又记录的是对象在堆内存中的地址。所以打印this,输出的就是s1对象在堆内存中的地址,和前面打印的s1的地址一样

<8>this.name指向堆内存中成员变量name的地址,this.name=name就是局部变量name值赋给成员变量,此时堆内存中成员变量默认初始化值改为了“张三”。

<9>setName方法执行完毕后退出栈内存

<10>再次声明Student类型的s2变量进入栈内存

<11>New Student 创建一个Student类的实例对象,在堆内存中开辟新空间

<12>堆内存中开辟的空间地址返回给栈内存告诉s2

<13>打印双引号内文字

<14>打印s2的地址

<15>s2.setName(“李四”) 将setName方法加载到栈内存,方法中的局部变量(形式参数)接收到“李四”。

<16>因为此方法被s2调用,所以方法中的this就指的是s2这个对象。栈内存中的s2记录的是对象在堆内存中的地址。所以打印this,输出的就是s2对象在堆内存中的地址,和前面打印的s2的地址一样

<17>this.name指向堆内存中成员变量name的地址,this.name=name就是局部变量name值赋给成员变量,此时堆内存中成员变量默认初始化值改为了“李四”。

<18>setName方法执行完毕后退出栈内存

<19>主方法也退出栈内存

总运行截图:

在这里插入图片描述

由输出结果可以看出,方法被哪个对象调用,this就代表哪个对象。
所以调用setName 时打印this打印的就是该对象的地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fy_1852003327

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值