Java 解释此程序中出现StackOverFlow错误的原因。。?

Java 解释此程序中出现StackOverFlow错误的原因。。?,java,out-of-memory,stack-overflow,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 = "); } } 异常堆栈跟踪:

我在练习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 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)
线程“main”java.lang.StackOverflower中出现异常 在com.practice.java.dev.MyClass.(MyClass.java:3) 在com.practice.java.dev.MyClass.(MyClass.java:5) 在com.practice.java.dev.MyClass.MyClass.(MyClass.java:5) 在com.practice.java.dev.MyClass.(MyClass.java:5) 在com.practice.java.dev.MyClass.(MyClass.java:5) 在com.practice.java.dev.MyClass.(MyClass.java:5)
为什么会这样,请详细解释一下???

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

主目录的第一行创建了一个
MyClass
实例:

MyClass  s1=new MyClass();
在执行
MyClass
构造函数主体之前,初始化所有实例变量,执行:

MyClass s = new MyClass();
这将创建
MyClass
的第二个实例,在执行该构造函数的主体之前,初始化该第二个实例的实例变量
s
,从而创建第三个
MyClass
实例。等等


换句话说,您正在递归地创建无限多的
MyClass
实例。这将导致无限递归和堆栈溢出错误

您的类
MyClass
有一个字段
s
,该字段被初始化为包含
MyClass
的另一个实例。该实例必须包含另一个实例,依此类推,直到堆栈溢出。你没有使用那个字段;你可以把它删掉。我想你会在这上面找到以前的。