日期:2014-05-20  浏览次数:21019 次

java static 在内存中的运行情况
class Demo1
{
int num=1;
String color="blue";
static
{
System.out.println("static");
}
public static void show(Demo1 d)
{
System.out.println(d.num);
}
public static void main(String args[])
{
Demo1 d=new Demo1();
show(d);
System.out.print("main");
}
static
{
System.out.println("end");
}
}
静态成员函数不能调用非静态成员变量。静态成员先于对象存在那在show()里面怎么可以调用d.num。谁能给说一下该代码在内存中从加载到运行时的顺序。

------解决方案--------------------
static 
end
1
main


static 
end
是由于 该类为启动类,即 java Demo1
所以jvm会主动使用 ,先加载 class ,然后初始化static模块的代码 ,顺序执行
然后执行main函数


------解决方案--------------------
静态成员函数不是优先于对象存在吗,在该函数被加载时 Demo1 d 并没有被创建,怎么能输出呢?
你掉用这个函数的时候不会传递一个对象吗
------解决方案--------------------
没看明白,你想问什么。调用show的时候, d 已经new出来了。还想怎么样呢
------解决方案--------------------
Demo1 d=new Demo1();
show(d);
d不是new 出来了吗。。。