Java 解释此程序中出现StackOverFlow错误的原因。。?
我在练习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 = "); } } 异常堆栈跟踪:
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
的另一个实例。该实例必须包含另一个实例,依此类推,直到堆栈溢出。你没有使用那个字段;你可以把它删掉。我想你会在这上面找到以前的。