this关键字在Java语言里非常重要,也是一个高频使用的关键字,但是很多人并不理解this关键字的真正含义,只是简单机械的使用。本文将带你从编译器的视角,深度解读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关键字表示对“调用方法的那个对象”的引用,只能在类的内部使用。
我们来为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
*****************************************************************************************/
?
扩展类型 底层扩展(基于C语言): PECL 上层扩展(基于PHP 语言): PEAR Compo...
四、XML应用分类 总的说来的XML的应用可分为四类: (1)应用于客户需要与不同的...
关于如题这几个概念,大部分人应该比较熟悉,但是我昏了好久,所以写下来加深印...
1.另一个世界 010 editor打开看到结尾有一串二进制编码。尝试解这串二进制。 二...
iframe使用方法: 复制代码 代码如下: DIV align=centerIFRAME src="a href="htt...
Android系统源码编译网上流传着很多优秀的文章为什么我要写这个呢主要的原因是记...
本文实例为大家分享了ajax实现输入提示效果的具体代码,供大家参考,具体内容如...
这本初学者指南向你展示了在 Linux 中可以使用 pacman 命令做什么,如何使用它们...
ylbtech_html_print html打印代码,支持翻页 复制代码 代码如下: html head meta...
数据库索引在平时的工作是必备的,怎么建好索引,怎么使用索引,可以提高数据的...