我相信,这个问题代码必须在本网站上提出。但我不能够搜索到,这是基本的疑问句,但java.lang.StackOverflowError?
public class A {
A obj = new A();
public static void main(String arg[])
{
A ob = new A();
}
}
这是给java.lang.StackOverflowError
,为什么我没有得到它,因为我那可怜的基本concept-的?
我相信,这个问题代码必须在本网站上提出。但我不能够搜索到,这是基本的疑问句,但java.lang.StackOverflowError?
public class A {
A obj = new A();
public static void main(String arg[])
{
A ob = new A();
}
}
这是给java.lang.StackOverflowError
,为什么我没有得到它,因为我那可怜的基本concept-的?
你的类本质上等同于:
public class A {
A obj;
public A() {
obj = new A();
}
public static void main(String arg[]) {
A ob = new A();
}
}
现在你看你是怎么那个错误?每次创建一个A
的实例时,构造函数get的调用将再次调用以创建另一个实例,然后继续填充堆栈直至溢出。
每当你创建一个对象A
它会创建另一个对象A
,将创造另一个对象A
...
当您创建A型的对象,你要创建一个类型的新对象,它创建类型的新对象等
StackOverflow上发生的错误,因为在应用程序中的一个非常深刻的递归。当你实例化A
时,你也调用相同的构造函数来创建另一个A
实例,因此,你有一个递归树,从而导致堆栈溢出错误。
因此,真正的问题是深度递归调用来实例化A
。
当创建“新A”时会发生什么? –
一次又一次地调用构造函数 – Raghunandan
创建了新的A类实例。 –