解释为什么在此程序中引发 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
。
我在练习 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
。