我确信,必须在本网站询问此问题代码。但是我无法搜索,这是基本问题,但由于我的基本概念不佳,我没有得到它 -
public class A {
A obj = new A();
public static void main(String arg[])
{
A ob = new A();
}
}
它正在给java.lang.StackOverflowError
,为什么?
答案 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类型的新对象。