说明为什么在此程序中出现StackOverFlow错误。.

时间:2018-07-12 12:21:33

标签: java out-of-memory stack-overflow

我正在练习Java,我编写了该程序,一旦运行它,就会引发错误StackOverFlow错误,为什么?

public class MyClass { 

   MyClass  s=new MyClass();
    public static void main(String args[]) {
         MyClass  s1=new MyClass();

        System.out.println("Sum of x+y = ");
    }
}

Exception StackTrace:

Exception in thread "main" java.lang.StackOverflowError
    at com.practice.java.dev.MyClass.<init>(MyClass.java:3)
    at com.practice.java.dev.MyClass.<init>(MyClass.java:5)
    at com.practice.java.dev.MyClass.MyClass.<init>(MyClass.java:5)
    at com.practice.java.dev.MyClass.<init>(MyClass.java:5)
    at com.practice.java.dev.MyClass.<init>(MyClass.java:5)
    at com.practice.java.dev.MyClass.<init>(MyClass.java:5)

为什么,请深入解释??

2 个答案:

答案 0 :(得分:2)

您正在MyClass内创建MyClass类,这导致这些类的“无限”深度一直被创建,直到获得StackOverflow。

答案 1 :(得分:1)

主体的第一行创建一个MyClass实例:

MyClass  s1=new MyClass();

在执行MyClass构造函数的主体之前,将初始化所有实例变量,并执行:

MyClass s = new MyClass();

这将创建MyClass的第二个实例,并在执行构造函数的主体之前,初始化该第二个实例的实例变量s,从而导致创建第三个MyClass实例。等等...

换句话说,您要递归创建无限数量的MyClass实例。这导致无限递归和StackOverflowError