黑马程序员技术交流社区
标题:
new 对象栈溢出错误
[打印本页]
作者:
王红潮
时间:
2012-10-3 17:28
标题:
new 对象栈溢出错误
本帖最后由 王红潮 于 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();在堆里还会产生一个匿名对象,这里不存在递归调用,为什么还会栈溢出呢?
作者:
王海宇
时间:
2012-10-3 18:24
你去掉了static修饰符的话,每次new新对象的时候,都会导致Demo d = new Demo();这条语句的执行,而这条语句的执行又会导致这条语句的执行,而且每次执行这条语句都会产生新的对象,就这样无穷无尽的进行下去,最终就会导致栈溢出了
作者:
尤洋
时间:
2012-10-3 18:33
new Demo();之后
Demo d = new Demo();这一条作为类 的 成员变量 会在每次的对象实例化里显示初始化的过程中 被执行
执行之后 又会产生新对象,继续初始化,往返循环。所以会内存溢出
加静态后 属性就属于整个类 而不是某一个对象了,所以不会在每次初始化的时候都 新建这个属性
作者:
李建强
时间:
2012-10-3 18:53
嗯,赞同3楼的说法,不在赘述了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2