请问:
当new一个对象的时候 不会在堆中为类的非静态方法分配内存空间 只会为对象的属性分配内存 那么如 new A().f()时 我的理解是:在堆中为A对象分配一块内存空间 用这块内存空间去调用f()方法
我不明白 一块内存空间怎么可以去调用方法呢
谢谢

解决方案 »

  1.   

    new 一个对象后  JVM会在堆中的新生代的Eden中分配一块内存
    分配到的内存用于存储 new的对象,new A().f()只是通过地址找到那个对象,然后掉用那个对象的方法啊
      

  2.   

    如下:
    class A {
    public void f(){
    String aa = "aaa";//3
    System.out.println(aa);//4
    }
    }
    public class Test() {
    public static void main(String[] args) {
    A a = new A(); //1
    a.f();//2
    }
    }运行Test,程序先找到main方法,进入,顺序执行
    执行到第1步时,在内存中开辟一个空间存放A,A类中无static块(如果有,先执行static块中的内容),
    再执行构造方法,完了继续第二步,调用a.f(),再进入A类的f()方法,执行第三步,又在内存中开辟一个空间存放"aaa",执行4
      

  3.   

    反了,你的方法会去找 new A() 占用的堆内存并对其操作。
      

  4.   

    由于java去掉了C预言中的指针,所以所有内存空间都是java虚拟机为您分配的,当你New一个对象的时候,它就为你分配了堆内存空间。你所提到的问题并不是内存空间调用方法,而是对象调用!
      

  5.   

    建议看看《Thinking in java》,应该对你有很大的帮助的。new A().f()掉用了对象的方法,只是一个地址而已
      

  6.   

    new A()在宏观上,生成一个对象引用。直接理解为该对象的地址。
    微观上(在计算机内部),理解为对象分配空间。