解析java中的this关键字

解析java中的this关键字

1 含义

是一种引用(特殊变量),用来存储当前实例化对象的内存地址。

this的中文词义为本,即自己这方面的。

2 为什么需要用this关键字?

2.1 分析

因为方便调用者,我们通常会把set方法里面的形参名与属性名保持一致,这样调用者就知道你应该传个什么样子的数据过去了,知道是给哪位属性赋值了;如果形参名为aa这种,调用者可能会蒙了,不知道到底该怎样传,不知道传递的内容就是给哪位属性赋值的。

2.2 知道是给那个属性赋值

示例代码

Cat里面的setAge方法

 public void setAge(int age) {
        this.age = age;
}

TestCat

public class TestCat {
    public static void main(String[] args) {
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        cat.showInfo();
        cat.setName("小梦");
        System.out.println("五年后: ");
        System.out.println("修改猫的年龄: ");
        cat.setAge(cat.getAge()+5);
        cat.showInfo();
    }
}

示例代码展示效果图

在这里插入图片描述

示例代码运行截图

在这里插入图片描述

2.3 不知道是给那个属性赋值

示例代码

Cat里面的setAge方法代码

//形参名为a
public void setAge(int aa) {
   if(age<0||age>20){
       System.out.println("猫的年龄输入有误,请检查后重新输入!!!!");
       return;
    }
    this.age = aa;
}

TestCat

public class TestCat {
    public static void main(String[] args) {
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        cat.showInfo();
        cat.setName("小梦");
        System.out.println("两年后: ");
        System.out.println("修改猫的年龄: ");
        cat.setAge(10);
        cat.showInfo();
    }
}

示例代码展示效果图

在这里插入图片描述

示例代码运行截图

在这里插入图片描述

2.4 总结

a.简单来说,就是在同一个方法中,区分同名的属性和局部变量的途径。

b.在方法里,局部变量就是形参或者方法体里面定义的变量

c.若局部变量和属性同名,那么在方法里面会默认找离它最近的那个变量值,因此相当于同一个变量进行互相赋值,这是没有意义的,因此取了this关键字来作为区分的条件

3 怎么使用this关键字

3.1 记忆口诀

谁调用,代表谁。

它是一个引用,存放着当前实例化对象在堆内存的内存地址

3.2 语法

当你想使用当前实例化对象的属性时,语法如下所示:

this.属性名

当你想使用当前实例化对象的方法时,语法如下所示:

this.方法名(形参列表)

4.this在内存图中的表示

4.1 示例代码

Cat
public class Cat {
    private String  name;
    private String type;
    private int age;
    public Cat(){

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
        this.name = name;
        this.type = type;
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //type(品种)属性只可以读取,不可以写入
    public String getType() {
        return type;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void showInfo(){
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}

TestCat
public class TestCat {
    public static void main(String[] args) {
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        cat.showInfo();
    }
}

4.2 this在内存图的展示

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SSS4362

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

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

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

打赏作者

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

抵扣说明:

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

余额充值