创建本地和实例对象时出现java StackOverflowError [英] java StackOverflowError when local and instance objects creation
问题描述
您好,有人可以向我解释一下为什么此代码段给了我StackOverflowError 如果您能解释instanceObj初始化并调用ObjectTest构造函数和java.lang.Object构造函数时发生的情况,我将不胜感激.在我看来,ObjectTest构造函数会不断循环.但是我不知道确切的原因吗?所以有什么建议...
Hi can anybody please explain me why is this code snippet giving me StackOverflowError I really appreciate if you can explain what is happening when instanceObj initializing and calling ObjectTest constructor and java.lang.Object constructor. It seems to me ObjectTest constructor loop over and over.But I don't know exact reason? So any suggestion...
public class ObjectTest {
public ObjectTest() {
}
ObjectTest instanceObj = new ObjectTest();
public static void main(String[] args) {
ObjectTest localObj = new ObjectTest();
}
}
推荐答案
让我们看看将执行什么:
Let's see what will be executed :
-
main()
创建ObjectTest
的新实例
-
ObjectTest
类具有一个字段instanceObj
,该字段将包含一个ObjectTest
-
instanceObj
用新的ObjectTest
初始化
- 转到第2步
main()
create a new instance ofObjectTest
- the
ObjectTest
class has a fieldinstanceObj
which will contain anObjectTest
- the
instanceObj
in initialized with a newObjectTest
- go to step 2
我认为您想要更多类似这样的东西:
I think you wanted something more like this :
public class ObjectTest {
private static ObjectTest instanceObj;
private ObjectTest() {
}
public static ObjectTest getInstance() {
if (instanceObj != null) {
instanceObj = new ObjectTest();
}
return instanceObj;
}
public static void main(String[] args) {
ObjectTest localObj = ObjectTest.getInstance();
}
}
或者这个:
public class ObjectTest {
private static final ObjectTest instanceObj = new ObjectTest();
private ObjectTest() {
}
public static ObjectTest getInstance() {
return instanceObj;
}
public static void main(String[] args) {
ObjectTest localObj = ObjectTest.getInstance();
}
}
这是Singleton模式.
This is the Singleton pattern.
关于同一主题:
- Why I'm getting StackOverflowError
- Circular dependency in java classes
这篇关于创建本地和实例对象时出现java StackOverflowError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!