解释为什么在此程序中引发 StackOverFlow 错误..?

Explain Why StackOverFlow error raised in this Program..?

我在练习 java,我写了这个程序,一旦我 运行 它,这会引发错误 Whosebug Error 为什么?

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.WhosebugError
    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)

为什么会这样,请深入解释一下??

您正在 MyClass 中创建 MyClass 的 class,这导致这些 class 的 "infinite" 深度一直被创建,直到您获得 Whosebug。

你的 main 的第一行创建了一个 MyClass 实例:

MyClass  s1=new MyClass();

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

MyClass s = new MyClass();

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

换句话说,您正在递归地创建无限数量的 MyClass 个实例。这导致无限递归和WhosebugError