标签:
如果有同意类型的两个对象,分别是a和b,如何让两个对象都能调用某个方法呢?
如
1 class Banana { 2 void peel(int i ){ 3 /*……*/ 4 } 5 public class BananaPeel { 6 public static void main(String[] args){ 7 Banana a = new Banana(); 8 Banana b = new Banana(); 9 a.peel(1); 10 b.peel(2); 11 } 12 } 13 }
如果只有一个peel方法,它如何知道是被a还是被b调用的呢?
为了能用简便、面向对象的语法来编写代码,即“发送消息给对象”,编译器做了一些幕后工作。它暗自把所操作对象的引用作为第一个参数传递给peel,因此上面的两个方法就变成了
Banana.peel(a, 1);
Banana.peel(b, 2);
这是内部表示形式,我们不能这么写!
假设你希望方法的内部获得对当前对象的引用,由于这个引用时由编译器偷偷传入的,所以没有标识符可用,但是,为此有个专门关键字:this。this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this用法和其他对象并无不同。但要注意,如果方法内部调用同一个类的盈利一个方法,就不能使用this。直接调用即可。即可以这样写:
public class Apricot{ void pick(){ /*……*/ } void pit(){ pick(); /*……*/ } }
在pit内部,可以写this.pick();但是无必要,编译器可自动添加。
this关键字对于将当前对象传递给其他方法也是很有用的。如:
1 class Person{ 2 public void eat(Apple apple){ 3 Apple peeled = apple.getPeeled(); 4 System.out.println("Yummy"); 5 } 6 7 class Peeler(){ 8 static Apple peel(Apple apple){ 9 return apple; 10 } 11 } 12 13 class Apple { 14 Apple getPeeled(){ 15 return Peeler.peel(this); 16 } 17 } 18 19 public class PassingThis{ 20 public static void main(String[] args){ 21 new Person.eat(new Apple()); 22 } 23 } 24 25 }
这里Apple 需要调用Peeler.peel()方法,他是一个外部的工具方法,将执行由于某种原因而必须放在Apple外部的操作,为了将其自身传递给外部方法,Apple必须使用this关键字。
以上就是this的基本用法,复杂用法留待以后补充。
标签:
原文地址:http://www.cnblogs.com/Pillar/p/4218073.html