java.lang.StackOverflowError的?

时间:2013-09-30 07:26:54

标签: java android

我确信,必须在本网站询问此问题代码。但是我无法搜索,这是基本问题,但由于我的基本概念不佳,我没有得到它 -

public class A {

A obj = new A();

public static void main(String arg[])
{
    A ob = new A();
}
} 

它正在给java.lang.StackOverflowError,为什么?

4 个答案:

答案 0 :(得分:5)

每次创建对象A时,它都会创建另一个对象A,它将创建另一个对象A ...

答案 1 :(得分:5)

您的课程基本上等同于:

public class A {

    A obj;
    public A() {
        obj = new A();
    }  

    public static void main(String arg[]) {
        A ob = new A();
    }
}

现在你看到你是如何得到这个错误的?每次你创建一个A的实例时,都会调用构造函数get,它再次调用自己来创建另一个实例,然后填充堆栈直到它溢出。

答案 2 :(得分:1)

发生StackOverflow错误是因为应用程序中存在非常深的递归。当您实例化A时,您也调用相同的构造函数来创建另一个A实例,因此,您有一个递归树,从而导致堆栈溢出错误。

因此,真正的问题是实例化A的深度递归调用。

答案 3 :(得分:0)

当您创建A类型的对象时,您将创建A类型的新对象,该对象将创建A类型的新对象。