java全局代码区内存中什么位置?最好画有一个图例让我看看。

解决方案 »

  1.   

    你说的是static声明的代码吧,在heap中,画图?我看不用了吧
      

  2.   

    我在网上查了下  原来你说的全局代码是static块啊!
    觉得java里没这种说法吧!是c中的说法如果调用static块的话,我觉得jvm不会存储static方法!
    static初始化块和static变量会集中起来放在class文件下的一个叫<Cinit>的方法里翻译成字节码存储在class文件里!当然类变量是存储在方法区中.....这个<cinit>方法只可以被虚拟机调用!用户是不可视的!
    初始化的时候会自动调用这个方法!!
      

  3.   

    除了常量以外的类(静态)变量存储在方法区    楼主想了解这方面的知识的话建议去看看《深入Java虚拟机》
      

  4.   

         用static的修饰的变量和方法,实际上是指定了这些变量和方法在内存中的“固定位置”-static storage,可以理解为所有实例对象共有的内存空间。static变量有点类似于C中的全局变量的概念;静态表示的是内存的共享,就是它的每一个实例都指向同一个内存地址。把static拿来,就是告诉JVM它是静态的,它的引用(含间接引用)都是指向同一个位置,在那个地方,你把它改了,它就不会变成原样,你把它清理了,它就不会回来了。
             那静态变量与方法是在什么时候初始化的呢?对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。
             我们常可看到类似以下的例子来说明这个问题:
    Java代码  
    1. class Student{   
    2.         static int numberOfStudents=0;   
    3.         Student()   
    4.         {   
    5.                  numberOfStudents++;   
    6.         }   
    7. }  
             每一次创建一个新的Student实例时,成员numberOfStudents都会不断的递增,并且所有的Student实例都访问同一个 numberOfStudents变量,实际上int numberOfStudents变量在内存中只存储在一个位置上
      

  5.   

    static{}
    偶只知道初始化时,这段代码最先被执行