Spring系列:java程序设计期末试题

python输出漏斗图形(暴力版)

  返回  

封装-this关键字

2021/7/20 14:09:55 浏览:

目录

  • 一、为什么要用this关键字
  • 二、this用法总结
  • 三、this的内存原理


一、为什么要用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方法执行完毕从栈内存消失,留下这两个
在这里插入图片描述

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号