new 出来的对象都在堆中进行分配
方法参数的传递都在栈中再具体救不了解了java 的内存关系似乎不用太操心的说

解决方案 »

  1.   

    class A{
      String a="aaa";
      String b="bbb";
      public void f(){System.out.println("a.f()");}
      public void g(){System.out.println("a.g()");}
    }首先在栈中定义了A类型的引用变量a,并在堆中实例化了一个A对象,然后让a指向A对象的首地址。
    class B extends A{
      String a="aaa";
      String b="bbb";
      public void f(){System.out.println("b.f()");}
      public void g(){System.out.println("b.g()");}
    }
    首先在栈中定义了B类型的引用变量b,并在堆中实例化了一个B对象,然后让b指向B对象的首地址。至于3,同样是产生了一个B对象,只不过现在的引用变量不是B类型的,而是其父类的类型,也就是多态。
      

  2.   

    谢谢几位。我的意思是在堆中分配的空间的大小?以及它的内容是什么?
     存不存它的成员变量,函数名。怎么存?
     使用了继承之后,又变成怎么样?
     我知道多态的时候,c++中会维护一长vtable表,来判断具体对象的方法是哪个。
     但是不知道他的变量的情况。
      

  3.   

    跟据变量的类型来分配的,比如int类就是占用32位内存
      

  4.   

    程序执行时关于对象放置的问题:有6个地方可以存放数据:
    1.寄存器
    2.栈
    3.堆
    4.静态存储空间
    5.常量存储空间
    6.Non-RAM存储空间
      

  5.   

    Bill Venners著的<<深入Java虚拟机>>,会给楼主详细答案。
      

  6.   

    (3) A c=new B(); 这个属于动态绑定!或者称为执行期绑定和后期绑定!如果你想稍微了解一下他们的分布情况,你可以用new出来的对象,然后System.out.println(对象);
    来看看他们在内存中的位置
      

  7.   

    个人理解,供参考(堆内存):
    把它想像为一个圆的话,上下一分为二,上面为全局区(放静态的变量,方法列表,及字符串池等),下面再一分为二(左右分),左边为对象句柄(引用就是指向这个句柄的),对象句柄实际是一对指针,其中一个指针指向方法列表,一个指向对象(对象是放在右边空间的,数据成员存在于此)具体内容可以参考<java虚拟机规范>这本书