求教一个堆栈溢出的问题

class Demo {

  Demo d = new Demo();

}

class Test {

  Demo d = new Demo();//编译通过

  main() {

           new Demo();//堆栈溢出

  }

}

如上代码 ,为什么Test类main方法中的会报错,但是成员中的编译通过呢

繁星点点滴滴
浏览 588回答 6
6回答

函数式编程

你要问的应该是为什么编译能通过.但还是堆栈溢出了. 编译:只是检测语法问题.你这个是逻辑BUG.编译器检查不出来的.必须要运行起来才能知道会溢出. 编译的时候并没有运行. 你需要搞清楚2个时间:编译时,运行时.就像宏命令只是编译时生效一样.宏命令属于编译时.而这种代码运行时才会抛出的bug.属于运行时.编译器无能为力

心有法竹

因为你在Demo类中递归实例引用了,所以new的时候会爆栈,改成如下: class Demo {   static Demo d = new Demo(); }

梵蒂冈之花

不好意思 这个递归是怎么发生的 很多人都跟我这么解释,搞不太懂

至尊宝的传说

递归引用,栈溢出。 IDE只检测编译期错误,运行时错误,如楼上所说,无能为力。

一只甜甜圈

一直new下去?

精慕HU

解释一下为什么会溢出吧: 一个类实例化的时候,会先运行其成员变量的语句。即你在Test类中调用new Demo()的时候,实例化这个Demo的时候,会先执行Demo类中的Demo d = new Demo()这一句,这时候又要求实例化Demo, 此时又要先执行Demo d = new Demo(), 然后又要求实例化Demo...... 这样就形成了死循环,最终溢出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java