首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java中静态方法怎么体现预装载性

2012-02-05 
Java中静态方法如何体现预装载性?根据定义,类的静态方法,静态变量是在类装载的时候装载的。静态变量我能理

Java中静态方法如何体现预装载性?
根据定义,类的静态方法,静态变量是在类装载的时候装载的。静态变量我能理解,预先加载一个内存区域。但是我无法理解静态方法的预装载性。静态方法中可以声明变量,这个变量是局部变量。例如:

Java code
public static void function(){        int a=1;}

这个静态方法中只是声明了一个局部变量a,没有其他任何操作。但是据我所知局部变量是在使用的时候才开辟内存,既然是这样,那么预加载静态方法时到底是进行的什么操作(请注意我这个方法中没有其他任何语句)?

还有一个问题,有多个语句同时调用这里的静态function()方法时,对于局部变量a到底是如何进行处理的?

[解决办法]
预加载 不进行执行 a还没分配

每次调用都会在栈产生一个局部变量a
[解决办法]
静态方法主要是可以脱离对象存在,如Integer.valueOf(int a)方法,如果存在一个a对应的Integer对象,那么就将这个对象返回,这个具有“构造方法”的作用。如果是一般方法是不可以脱离对象存在的。这是它的一个用途。还有就是工具方法,比如Math类,它没有必要构造一个对象来使用这些方法,因为这些方法并不改变任何字段。创建对象需要代价,我们可以通过这种方法避免。
[解决办法]
方法里的局部变量执行的时候在栈区开辟空间,而静态方法里得代码是在类加载的时候开辟空间的,因为代码是每个实例共享的,没有必要为每个实习都去开辟一个代码空间
[解决办法]
探讨

我明白静态方法的定义和用法,还有它的实际意义
但是我无法理解静态方法的本质,java虚拟机在加载静态方法的时候到底是做了什么?静态变量的加载和静态方法的加载我感觉肯定是有很大区别的。

[解决办法]
方法加载,是把方法指令加载到方法区
方法调用的时候,到方法区取相关的指令执行
所以方法没有被调用,也就不会生成方法栈,局部变量也不会被加载,也就是方法没有被调用,不会给局部变量分配内存

多个语句同时调用该静态方法,就相当于有多个方法栈,每个局部变量在自己的方法栈中分配内存


[解决办法]
《The Java Language Specifiction》James Gosling 有关于虚拟机的执行(包括虚拟机启动,加载类和接口,连接类和接口,初始化类和接口...)的详细过程,非几句话能说明白,我正在看,希望能帮助你

热点排行