吴一尘 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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题