请问:
当定义一个变量时 如:public int i = 5;虚拟机会开辟一块内存空间存放public int i 然后分配一块int大小的空间指向i 
那么 当定义一个方法的时候 如public void f(int i){System.out.println;} 虚拟机又是如何给这个方法进行分配的呢 请各位各抒己见 谢谢

解决方案 »

  1.   

    好象方法本身 不占内存吧.
    不知道,回去好好研究下<<java编程思想>>.
      

  2.   

    我就知道jvm中有个方法区,保存所有的方法。
      

  3.   

    Java 应用程序运行时所占据的存储空间大体上可以划分为三块:堆,栈,静态存储区。所有局部变量(方法内声明的变量和形参变量)都在栈中为其分配存储空间例如f(int i)中的i,而构成对象的实例域如public int i = 5中的i所占据的存储空间要在堆中开辟,已经加载到内存中的类(你所理解的方法本身)以及静态域会在静态存储区中存储。
      

  4.   

    在java中,内存分为四个部分:code segment,用于存放代码;data segment,用于存放静态变量和字符串常量;stack,用于存放局部变量;heap,用于动态生成内存,就是说new出来的东西就放在这里。楼主可以按以上内容进行分析
      

  5.   

    code segment (代码区):用于存放代码;               //方法就放在这里data segment(数据区)用于存放静态变量和字符串常量;
    stack(栈)用于存放局部变量;
    heap(堆)用于动态生成内存,new出来的东西
      

  6.   


    首先,内存分为四个区域:
    stack:存放局部变量(方法的形式参数也是局部变量)
    head:存放动态创建的东西.new...
    datasegement:存放静态变量和字符串常量.
    codesegement:代码区int i = 5; //如果她是一个局部变量,就放到stack中,如果是成员变量,就放到codesegement中void f(int i) {System.out.println();}//首先,这个方法是在codesegement中的该方法所属类的代码中.
    //当调用这个方法的时候,首先创建形式参数,也就是在stack中创建一个int型的局部变量.值为你传的实参的值.
    //到方法体的时候,就按照方法体内继续运行.
    //多说一句,关于多态:
    //父类引用指向子类对象,父类重写子类方法.这就形成了多态.
    //具体的多态中重写的方法的分析如下:
    class Parent { public void f(){}}
    class Child extends Parent { public void f(){}}
    Parent p = new Child();
    p.f();//这里会调用Child中的f()方法.
    //因为创建这个p实例的时候,虽然是Parent类型,但是,创建的是Child实例,所以,在实例化p的过程中,会把p中的f()方法指向Child在datasegement中的f()方法,所以,调用的时候会
    //调用Child中重写了的f()方法.  
    //不知道是不是说的有点多,总之呢,我感觉如果你能理解多态,这些理解起来就very easy了.
      

  7.   

    再补充一下,实例化某个对象的时候.
    首先在stack中创建这个对象的引用,然后在head中创建这个对象的实体,引用指向这个实体.