0

我敢肯定,这个问题代码必须在这个网站上问。但我无法搜索,这是基本问题,但由于我的基本概念不佳,我没有得到它 -

public class A {

A obj = new A();

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

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

4

4 回答 4

5

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

于 2013-09-30T07:28:12.263 回答
5

您的课程本质上等同于:

public class A {

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

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

现在你明白你是怎么得到这个错误的了吗?每次创建 的实例时A,都会调用构造函数 get ,它会再次调用自身以创建另一个实例,然后继续填充堆栈直到溢出。

于 2013-09-30T07:28:36.277 回答
1

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

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

于 2013-09-30T07:33:46.727 回答
0

当您创建 A 类型的对象时,您正在创建 A 类型的新对象,这将创建 A 类型的新对象等。

于 2013-09-30T07:30:02.250 回答