本帖最后由 王红潮 于 2012-10-3 20:39 编辑
看到有个栈溢出的帖子,没有想明白,求解
class Demo
{
Demo d = new Demo();
//static Demo d = new Demo();
Demo()
{
System.out.println("demo run");
}
public static void main(String[] args)
{
new Demo();
}
}
如果加了static 不会产生溢出错误,成员变量保存在了方法区中,只有一个变量,如果去掉static修饰,new对象时栈里有个变量d指向了堆里的Demo对象,new Demo();在堆里还会产生一个匿名对象,这里不存在递归调用,为什么还会栈溢出呢? |