封装-this关键字

本文详细介绍了Java中this关键字的作用,通过实例展示了this如何用于区分成员变量和局部变量,以及this的内存原理。文章指出,this关键字用于引用当前对象的成员变量,确保在方法中正确地访问和修改对象属性。同时,总结了this的常见用法,包括在构造函数中的使用和链式调用等。
摘要由CSDN通过智能技术生成


一、为什么要用this关键字

我们先写不用this关键字的代码:

Student类:

package 封装;

public class Student {
    private String name;
    private int age;

    public void setName(String name) {
        name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int a) {
        if (a < 0) {
            System.out.println("您输入的年龄有误!!!");
            return;
        }
        age = a;
    }

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println("name=" + name + ", " + "age=" + age);
    }
}



main类:

package 封装;

public class class_1 {
    public static void main(String[] args){
        Student student=new Student();
        student.setName("奥特曼");
        student.setAge(18);
        student.show();
    }
}

输出:

name=null, age=18

此时name等于null,使用setName并没有把"奥特曼"传进去
这是因为Student类中的name=name,这两个name都是setName这个方法的局部变量,成员变量的内容可以被show方法输出,而局部变量的不可以,所以要把“奥特曼”传到成员变量才可以

此时修改代码:

修改Student类中setName方法中的name = name;
改为this.name = name;

输出为:

name=奥特曼, age=18

二、this用法总结

this可以指代一个变量,变量被指代之后,这个变量就是成员变量
在这里插入图片描述

setName被s1调用那么this代表的就是s1这个对象
setName被s2调用那么this代表的就是s2这个对象

三、this的内存原理

第一步:

首先执行main方法,main方法进栈,进栈之后创建了第一个对象s1

在这里插入图片描述

第二步:

s1调setName方法,setName 方法进栈

在这里插入图片描述
第三步:

在setName方法中有一个形参name,他的值是我们传递过来的林青霞
在这里插入图片描述
第四步:

这个方法是被s1调用的,所以调用者是s1,s1的地址是001
在这里插入图片描述
第五步:

这个时候在setName方法中有一个this,这个this就是s1
在这里插入图片描述
第六步:

this通过001访问到堆内存的空间
在这里插入图片描述
第七步:

然后name就找到了001的name

在这里插入图片描述
第八步:

最后把参数“林青霞”赋值给this.name,也就是修改name的值为“林青霞”
在这里插入图片描述
第九步:

调用完setName方法,setName就从栈内存里消失
在这里插入图片描述
第十步:

然后创建第二个对象,堆内存多了第二个对象

在这里插入图片描述
第十一步:
s2的修改name方式与s1相同

第十二步:

最后main方法执行完毕从栈内存消失,留下这两个
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诸葛东_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值