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 Test{
public static void main(String args[]){
new Person().eat(new Apple());
}
}
没怎么看懂,有大牛可以帮我详细详细详细解释一下吗?不胜感激!
class Person {
public void eat(Apple apple) {
//2 调用这个内存地址中的方法
Apple peeled = apple.getPeeled();
//6 输出Yummy
System.out.println("Yummy");
}
}
class Peeler {
//4 接收参数并返回
static Apple peel(Apple apple) {
return apple;
}
}
class Apple {
Apple getPeeled() {
//3 调用Peeler类中的静态方法,并传递一个参数this,这个this表达就是第二部中的apple对象
Apple peel = Peeler.peel(this);
//5 返回
return peel;
}
}
public class Test {
//我觉得这道题考的就是,jvm中的内存结构的知识
//不妨拆开来,慢慢分析
public static void main(String args[]) {
//person存在[栈]中,person实际上就是一个内存地址,Java中称之为引用;new Person()存在[堆]中,这里存储的是person真正的数据,而不是像栈中的person
//总结:栈中存的是对象的地址,堆中存对象
Person person = new Person();
//同理
//apple是一个内存地址,new Apple()是数据对象真正存的地方
Apple apple = new Apple();
//1 把apple的内存地址放到方法中
person.eat(apple);
}
}
当创建一个对象后,Java虚拟机就会为其分配一个指向对象本身的指针,这个指针就是“this”。this就是代表该类的对象,这里的this就是指的一个new Apple()对象
class Apple{
Apple getPeeled(){return Peeler.peel(this);}
}
this就是当前Apple对象,通过peel参数传递
Apple getPeeled(){
return Peeler.peel(this);
}
这个你可以理解为,
Apple getPeeled(){
return Peeler.peel( new Apple() );
}
this,指的是当前对象
super,指的是父类对象,
问什么要有着个类,我个人理解哦,(说的不好别打脸)
由于 类只有实例化了 才能使用,才会分配内存,什么意思,,就是类的一切动作,都必须建立在对象的基础上,(静态的除外)
peel(Apple apple)这个函数,,需要传入一个 apple,,记住这是要传入对象, this 在这里仅仅是 new Apple()的一个缩写,
哎,表述还算清楚,有问题,还可以追问