java.lang.StackOverflower错误?

java.lang.StackOverflower错误?,java,android,Java,Android,我相信,这个问题代码必须在这个网站上询问。但我不能搜索,这是基本的问题,但我没有得到它,因为我的基本概念差- public class A { A obj = new A(); public static void main(String arg[]) { A ob = new A(); } } 它给出了java.lang.StackOverflowerError,为什么?每次创建一个对象A时,它将创建另一个对象A,该对象将创建另一个对象A您的类本质上等同于: public cl

我相信,这个问题代码必须在这个网站上询问。但我不能搜索,这是基本的问题,但我没有得到它,因为我的基本概念差-

public class A {

A obj = new A();

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

它给出了
java.lang.StackOverflowerError
,为什么?

每次创建一个对象
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,它会再次调用自身来创建另一个实例,然后继续填充堆栈,直到其溢出。

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

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


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

当创建
新的A
时会发生什么?再次调用构造函数并再次创建类A的新实例。