class Person {
public void eat(Apple apple) {
Apple peeled = apple.getPeeled();
System.out.println("Yummy");
}
}
class Peeler {
static Apple peel(Apple apple) {
return apple;
}
}
class Apple {
Apple getPeeled() {return Peeler.peel(this);}
}
public class PassingThis {
public static void main(Stringp[ args) {
new Person().eat(new Apple());
}
}
========================================
先自己看了一遍,果然是专门考查对this的理解的。
程序的运行从主函数开始,
1.new Person().eat(new Apple());
在堆内存中建立了一个Person对象,一个Apple对象。Person对象调用了方法eat(),并将新创建的Apple对象传入其中。
2.Apple peeled = apple.getPeeled();
Apple类型的引用peeled接收了Apple对象的getPeeled方法返回的apple对象,getPeeled方法则是把堆内存中的Apple对象传入了Peeler类的peel静态方法,peel方法直接返回了传入的Apple对象,即堆内存中的Apple对象。绕了一大圈,peeled实际上最终得到了一开始堆内存中建立的Apple对象。
3.System.out.println("Yummy");
这句话就不绕了,输出“Yummy”。
4.程序执行完毕。
|