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
查看评论