本文介绍了本地和实例对象创建时的java StackOverflowError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
main() 创建一个 ObjectTest 的新实例ObjectTest 类有一个字段 instanceObj,它将包含一个 ObjectTest 使用新的 ObjectTest 初始化的 instanceObj转到第 2 步
main() create a new instance of ObjectTest
the ObjectTest class has a field instanceObj which will contain an ObjectTest
the instanceObj in initialized with a new ObjectTest
go to step 2
谁能解释一下为什么这段代码片段给了我 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 :
我想你想要更像这样的东西:
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(); } }这是单例模式.
关于同一主题:
- 为什么我会收到 StackOverflowError
- Java 类中的循环依赖
更多推荐
本地和实例对象创建时的java StackOverflowError
发布评论