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



public class ObjectTest {

  public ObjectTest() {

   }


  ObjectTest instanceObj = new ObjectTest();


  public static void main(String[] args) {

     ObjectTest localObj = new ObjectTest();
   }
}

最佳答案

让我们看看将执行什么:


main()创建ObjectTest的新实例
ObjectTest类具有一个字段instanceObj,其中将包含一个ObjectTest
用新的instanceObj初始化的ObjectTest
转到步骤2




我认为您想要更多类似这样的东西:

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();
    }
}


这是单例模式。



在同一主题上:


Why I'm getting StackOverflowError
Circular dependency in java classes

07-24 09:27