吴一尘 2017-05-22 14:02 采纳率: 80%
浏览 1209
已采纳

有关java中this关键字的问题

 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());
    }
}

没怎么看懂,有大牛可以帮我详细详细详细解释一下吗?不胜感激!

  • 写回答

4条回答 默认 最新

  • CSDNRGY 2017-05-23 06:29
    关注
     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);
    
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化