创建本地和实例对象时出现java StackOverflowError [英] java StackOverflowError when local and instance objects creation

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

问题描述

您好,有人可以向我解释一下为什么此代码段给了我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 :

  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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆