Java:递归构造函数调用和stackoverflow错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java:递归构造函数调用和stackoverflow错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1465字,纯文字阅读大概需要3分钟。
内容图文
请帮助了解以下代码的原因
public class HeapQn1 {
/**
* @param args
*/
public HeapQn1() {
new HeapQn1();
}
static HeapQn1 n = new HeapQn1();
public static void main(String[] args) {
}
}
结果是
java.lang.StackOverflowError
at com.rg.test.interview.HeapQn1.<init>(HeapQn1.java:8)
at com.rg.test.interview.HeapQn1.<init>(HeapQn1.java:9)
...
根据我的理解,对象的内存分配发生在堆内存中,并且我期待OutOfMemoryError,因为在某些时候,由于重复的对象创建,堆内存将已满.
在研究中,我发现将Java构造函数视为一种方法,并解释了StackOverflowError,直到我阅读了以下线程.
When does the Constructor gets called in java?
这说
3. The object is fully constructed/created when the constructor returns.
据我所知,构造函数是一个方法,并且由于堆内存比堆栈内存大得多,因此递归构造函数调用导致StackOverflowError.这个对吗 ?
既然给定代码中没有对象会完全创建,那么构造函数的堆栈框架分配实际上会发生吗?
– 编辑 –
对于所指出的重复项,我确实了解什么是StackoverflowError.我在问题“研究中,我发现Java构造函数被认为是一种方法,并解释了StackOverflowError”中提到.我的问题是要了解构造函数是否像其他方法一样分配了分配的堆栈帧,因为对象的创建要等到构造函数返回后才能完成.希望这可以澄清.
解决方法:
每当调用构造函数时,其返回地址都会被压入the stack.由于堆栈是有限的且小于堆内存,因此会出现类似StackOverflowError而不是OutOfMemoryError的错误.
The constructor is a method and since the heap memory is much larger than the stack memory, the recursive constructor call resulted in StackOverflowError. Is this correct ?
是的,您的疯狂猜测是完全正确的.干杯!
内容总结
以上是互联网集市为您收集整理的Java:递归构造函数调用和stackoverflow错误全部内容,希望文章能够帮你解决Java:递归构造函数调用和stackoverflow错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。