this 关键字

如果有同一类型的两个对象,分别是 a 和b。你可能想知道,如何才能分别为这两个对象调
用 f( )呢:
 
class Banana { void f(int i) { /* ... */ } }
Banana a = new Banana(), b = new Banana();
a.f(1);
b.f(2);
 
如果只有一个 f( )方法,它是如何知道被 a 还是被 b 所调用的呢?

 
为了能用简便、面向对象的语法来编写代码——即“发送消息给对象”,编译器做了一些幕
后工作。它暗自把“所操作对象的引用”作为第一个参数传递给 f( )。所以上述两个方法的
调用就变成了这样:
 
Banana.f(a,1);
Banana.f(b,2);
 

这是内部的表示形式。你并不能这样书写代码,并试图通过编译。但这种写法的确能帮你对
实际发生的事情有所了解。
 
假设你希望在方法的内部获得对当前对象的引用。由于这个引用是由编译器“偷偷”传入的,
所以没有标识符可用。因此,有个可供你使用的专门的关键字:this。this 关键字只能在方
法内部使用,表示对“调用方法的那个对象”的引用。this 的用法和其它对象引用并无不同。
但要注意,如果在方法内部调用同一个类的方法,就不必使用 this,直接调用即可。当前方
法中的 this引用会自动应用于同一类中的其他方法。所以你能写这样的代码:
 
class Apricot {
  void pick() { /* ... */ }
  void pit() { pick(); /* ... */ }
}
 
2
在pit( )内部,你可以写this.pick( ),但无此必要 。编译器能帮你自动添加。只有当你需要明
确指出当前对象的引用时,才需要使用this关键字。例如,当需要返回对当前对象的引用时,
就常常在return语句里这么写:

有些人执意将this放在每一个方法调用和字段引用前,认为这样“更清楚更明确”。但是,千万别这么做。
我们使用高级语言的原因之一就是它们能帮我们做一些事情。要是你把this放在一些没必要的地方,就会使
读你程序的人不知所措,因为别人写的代码不会到处使用this。遵循一种一致而直观的编程风格能节省时间
和金钱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值