本文介绍了创建本地和实例对象时出现java StackOverflowError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,有人可以向我解释一下为什么此代码段给了我StackOverflowError如果您能解释instanceObj初始化并调用ObjectTest构造函数和java.lang.Object构造函数时发生的情况,我将不胜感激.在我看来,ObjectTest构造函数会不断循环.但是我不知道确切的原因吗​​?所以有什么建议...

Hi can anybody please explain me why is this code snippet giving me StackOverflowErrorI 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 :

  1. main()创建ObjectTest
  2. 的新实例
  3. ObjectTest类具有一个字段instanceObj,该字段将包含一个ObjectTest
  4. instanceObj用新的ObjectTest
  5. 初始化
  6. 转到第2步
  1. main() create a new instance of ObjectTest
  2. the ObjectTest class has a field instanceObj which will contain an ObjectTest
  3. the instanceObj in initialized with a new ObjectTest
  4. 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-22 06:13