我正在练习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)
为什么,请深入解释??
答案 0 :(得分:2)
您正在MyClass内创建MyClass类,这导致这些类的“无限”深度一直被创建,直到获得StackOverflow。
答案 1 :(得分:1)
主体的第一行创建一个MyClass
实例:
MyClass s1=new MyClass();
在执行MyClass
构造函数的主体之前,将初始化所有实例变量,并执行:
MyClass s = new MyClass();
这将创建MyClass
的第二个实例,并在执行构造函数的主体之前,初始化该第二个实例的实例变量s
,从而导致创建第三个MyClass
实例。等等...
换句话说,您要递归创建无限数量的MyClass
实例。这导致无限递归和StackOverflowError
。