1 class Banana { 2 void peel(int i){ /* statement */ } 3 } 4 public Class BananaPeel { 5 public static void main(String [] args){ 6 Banana a = new Banana(), 7 b = new Banana(); 8 a.peel(1); 9 b.peel(2); 10 }}
同一类型的两个对象 a , b 都调用着统一方法 peel()
如何知道它是被谁调用编辑器做了内幕工作-将对象作为第一参数传递给peel。
Banana.pell(a,1)
Banana.pell(b,2) 并不能这么书写,只是帮我们理解实际所发生的事情。
假设要在方法内部获得当前对象的引用,this 就是表示“调用方法的那个对象” 的引用。
public class Leaf{ int i = 0; Leaf test(){ i++; return this; } void print(){ System.out.print("i = " + i) } public static void main(String[] args){ Leaf x = new Leaf(); x.test().test().test().print() } } /*output: i = 3 *///:~
test方法返回了对当前对象的引用,所以很容易在一条语句中对同一对象执行多次操作。
class person { public void eat(Apple apple){ Apple peeled = apple.getPeeled(); System.out.println("lol"); }} class Peeler{ static Apple peel(Apple apple){ return apple }} class Apple{ Apple getPeeled(){ return Peeler.peel(this)}} public class PassingThis{ public static void main(String[] args){ new person().eat(new Apple()); }}/*output: lol *///:~
更多参考:
http://www.cnblogs.com/hasse/p/5023392.html