我敢肯定,这个问题代码必须在这个网站上问。但我无法搜索,这是基本问题,但由于我的基本概念不佳,我没有得到它 -
public class A {
A obj = new A();
public static void main(String arg[])
{
A ob = new A();
}
}
它在给java.lang.StackOverflowError
,为什么?
每次您创建一个对象A
时,它都会创建另一个对象A
,该对象将创建另一个对象A
......
您的课程本质上等同于:
public class A {
A obj;
public A() {
obj = new A();
}
public static void main(String arg[]) {
A ob = new A();
}
}
现在你明白你是怎么得到这个错误的了吗?每次创建 的实例时A
,都会调用构造函数 get ,它会再次调用自身以创建另一个实例,然后继续填充堆栈直到溢出。
发生 StackOverflow 错误是因为应用程序中存在非常深的递归。当您实例化时A
,您还调用相同的构造函数来创建另一个实例,A
因此,您有一个递归树,从而导致堆栈溢出错误。
因此,真正的问题是对实例化的深度递归调用A
。
当您创建 A 类型的对象时,您正在创建 A 类型的新对象,这将创建 A 类型的新对象等。