2013-09-30 48 views
0

我相信,这个问题代码必须在本网站上提出。但我不能够搜索到,这是基本的疑问句,但java.lang.StackOverflowError?

public class A { 

A obj = new A(); 

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

这是给java.lang.StackOverflowError,为什么我没有得到它,因为我那可怜的基本concept-的?

+0

当创建“新A”时会发生什么? –

+0

一次又一次地调用构造函数 – Raghunandan

+0

创建了新的A类实例。 –

回答

5

你的类本质上等同于:

public class A { 

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

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

现在你看你是怎么那个错误?每次创建一个A的实例时,构造函数get的调用将再次调用以创建另一个实例,然后继续填充堆栈直至溢出。

5

每当你创建一个对象A它会创建另一个对象A,将创造另一个对象A ...

0

当您创建A型的对象,你要创建一个类型的新对象,它创建类型的新对象等

1

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

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

相关问题