站在编译器的角度理解this关键字

this关键字在Java语言里非常重要,也是一个高频使用的关键字,但是很多人并不理解this关键字的真正含义,只是简单机械的使用。本文将带你从编译器的视角,深度解读this关键字,知其然,并知其所以然。

1、this关键字的起源

我们先来讨论一个有趣的问题,假如有一个BooK类,它有一个sell()方法,Book类创建两个对象,分别是book1和book2,当sell()方法被调用的时候,书的数量就减少一本,问题来了哈!编译器是如何知道sell()方法被book1调用的还是被book2调用的呢?

public class Book {
    private int bookNumber; //书的数量

    public void sell(int price){
        bookNumber = bookNumber -1;//卖出去一本,书的数量就减1
    }
}

public class Main {
    public static void main(String[] args){
        //创建对象
        Book book1 = new Book();
        Book book2 = new Book();

        book1.sell(10);
        book2.sell(20);
    }
}

原因就在于编译器在后台对sell()方法做了一个小改动,它把调用该方法的对象作为第一个参数传递给了sell()方法。所以上述两个对象对方法的调用就变成了这样:

BooK.sell(book1,10);
Book.sell(book2,20);

这是编译器的内部表达形式,不需要我们自己写成这样。我们如何使用sell()方法传过来的对象呢?为此,有个专门的关键字就是this。this关键字表示对“调用方法的那个对象”的引用,只能在类的内部使用。

2、this的使用场景

我们来为Book类增加一个书籍数量初始化方法setBookNumber,在setBookNumber(int bookNumber)中,当形参int bookNumber和类的成员变量private int bookNumber重名时,我们就可以使用this关键字,调用类的内部成员变量,对成员变量bookNumber赋值。

public class Book {
    private int bookNumber; //书的数量

    public void setBookNumber(int bookNumber) {
        this.bookNumber = bookNumber;
    }

    public void sell(int price){
        bookNumber = bookNumber -1;//卖出去一本,书的数量就减1
    }
}

此外,我们也可以在类的内部通过this关键字,返回当前对象。

/******************************************************************************************
 * 需要Java学习视频和项目外包信息的小伙伴,可以关注我的公众号【码农充电站】或者联系我的微信
 * 公众号:码农充电站
 * 作者微信:it1529577
 *****************************************************************************************/

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猿码驿站

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

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

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

打赏作者

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

抵扣说明:

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

余额充值