当前位置: 首页 > 面试题库 >

创建本地和实例对象时出现java StackOverflowError

於永寿
2023-03-14
问题内容

嗨,有人可以向我解释一下为什么这个代码片段给我带来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();
   }
}

问题答案:

让我们看看将执行什么:

  1. main() 创建一个新的实例 ObjectTest
  2. ObjectTest类有一个字段instanceObj,其将包含一个ObjectTest
  3. instanceObj用新的in初始化ObjectTest
  4. 转到步骤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();
    }
}

这是单例模式



 类似资料:
  • 问题内容: 我一直试图创建一个包含两个值的类的数组,但是当我尝试将值应用于该数组时,我得到了。 为什么会出现此异常,我该如何解决? 问题答案: 你创建了数组,但未在其中放置任何内容,因此你有一个包含5个元素的数组,所有元素均为null。你可以添加 在设置的行之前。

  • 本文向大家介绍使用BeanFactory实现创建对象,包括了使用BeanFactory实现创建对象的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了BeanFactory实现创建对象的具体代码,供大家参考,具体内容如下 说明:  其作用是减少层与层之间的依赖。 实现步骤: 编写2个类(Student,Teacher)再编写beans.properties文件,接着编写BeanFacto

  • 本文向大家介绍Java String创建对象实例解析,包括了Java String创建对象实例解析的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Java String创建对象的问题,具体介绍如下。 首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,String只是一个引用变量。 所有的字符串都是String对象,由于字符串常量的大量使用,java中为了节省时间,在编

  • 本文向大家介绍JavaScript中创建字典对象(dictionary)实例,包括了JavaScript中创建字典对象(dictionary)实例的使用技巧和注意事项,需要的朋友参考一下 对于JavaScript来说,其自身的Array对象仅仅是个数组,无法提供通过关键字来获取保存的数据,jQuery源码中提供了一种非常好的方式来解决这个问题,先看一下源码: 上述源码是创建一个编译结果的缓存,代码

  • 问题内容: 当我创建一个说类Employee的模拟对象时。它不调用Employee对象的构造函数。我知道Mockito在内部使用CGLIb和反射,创建了一个代理类,将该类扩展为模拟。如果未调用employee的构造函数,那么如何创建employee类的模拟实例? 问题答案: Mockito使用CGLib生成类对象。但是,要实例化此类对象,它使用Objenesis http://objenesis.

  • 在C++11中,你可以有多种语法选择用以对象的初始化,这样的语法显得混乱不堪并让人无所适从,(),=,{}均可以用来进行初始化: int x(0); //使用()进行初始化 int y = 0; //使用=进行初始化 int z{0}; //使用{}进行初始化 在很多情况下,可以同时使用=和{} int z = {0}; //使用{}和=进行初始化 对于这一条,我通常的