Java中静态方法如何体现预装载性?

NeilHappy 2011-11-13 06:53:18
根据定义,类的静态方法,静态变量是在类装载的时候装载的。静态变量我能理解,预先加载一个内存区域。但是我无法理解静态方法的预装载性。静态方法中可以声明变量,这个变量是局部变量。例如:

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

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

还有一个问题,有多个语句同时调用这里的静态function()方法时,对于局部变量a到底是如何进行处理的?
...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-11-14
  • 打赏
  • 举报
回复
方法加载,是把方法指令加载到方法区
方法调用的时候,到方法区取相关的指令执行
所以方法没有被调用,也就不会生成方法栈,局部变量也不会被加载,也就是方法没有被调用,不会给局部变量分配内存

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

cstur4 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 neilhappy 的回复:]

我明白静态方法的定义和用法,还有它的实际意义
但是我无法理解静态方法的本质,java虚拟机在加载静态方法的时候到底是做了什么?静态变量的加载和静态方法的加载我感觉肯定是有很大区别的。
[/Quote]静态方法和普通方法的加载为什么要有区别?普通方法加载后并没有给变量分配空间,得等到对象调用时,才对这个对象的字段进行修改的。方法就是在加载类时加载的,不管静态以否
D1000 2011-11-14
  • 打赏
  • 举报
回复
我看的是中文版
D1000 2011-11-14
  • 打赏
  • 举报
回复
《The Java Language Specifiction》James Gosling 有关于虚拟机的执行(包括虚拟机启动,加载类和接口,连接类和接口,初始化类和接口...)的详细过程,非几句话能说明白,我正在看,希望能帮助你
xijh12 2011-11-13
  • 打赏
  • 举报
回复
方法里的局部变量执行的时候在栈区开辟空间,而静态方法里得代码是在类加载的时候开辟空间的,因为代码是每个实例共享的,没有必要为每个实习都去开辟一个代码空间
NeilHappy 2011-11-13
  • 打赏
  • 举报
回复
我明白静态方法的定义和用法,还有它的实际意义
但是我无法理解静态方法的本质,java虚拟机在加载静态方法的时候到底是做了什么?静态变量的加载和静态方法的加载我感觉肯定是有很大区别的。
cstur4 2011-11-13
  • 打赏
  • 举报
回复
静态方法主要是可以脱离对象存在,如Integer.valueOf(int a)方法,如果存在一个a对应的Integer对象,那么就将这个对象返回,这个具有“构造方法”的作用。如果是一般方法是不可以脱离对象存在的。这是它的一个用途。还有就是工具方法,比如Math类,它没有必要构造一个对象来使用这些方法,因为这些方法并不改变任何字段。创建对象需要代价,我们可以通过这种方法避免。
阳明 to life 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhao251021539 的回复:]

引用 1 楼 zhouyuqwert 的回复:
预加载 不进行执行 a还没分配

每次调用都会在栈产生一个局部变量a

星星了啊
[/Quote]
哥勒 早星星了 我升星星左右就换了头像的
meran 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyuqwert 的回复:]
预加载 不进行执行 a还没分配

每次调用都会在栈产生一个局部变量a
[/Quote]
星星了啊
阳明 to life 2011-11-13
  • 打赏
  • 举报
回复
预加载 不进行执行 a还没分配

每次调用都会在栈产生一个局部变量a

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧