当前位置:主页 > 查看内容

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

发布时间:2021-06-10 00:00| 位朋友查看

简介:this关键字在Java语言里非常重要也是一个高频使用的关键字但是很多人并不理解this关键字的真正含义只是简单机械的使用。本文将带你从编译器的视角深度解读this关键字知其然并知其所以然。 1、this关键字的起源 我们先来讨论一个有趣的问题假如有一个BooK类它……

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
 *****************************************************************************************/

?

;原文链接:https://blog.csdn.net/l312770312/article/details/115533289
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:一维数组中重复元素的去除 下一篇:没有了

推荐图文


随机推荐