运行 java class 时发生 StackOverflow 异常
StackOverflow exception occuring when running the java class
我有一个 class 测试。当我 运行 程序抛出 Whosebug 错误时。
Class:
public class Test {
private Test test = new Test();
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
错误
Exception in thread "main" java.lang.WhosebugError
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
谁能告诉我为什么会这样?
从这里可以看出:
public class Test {
private Test test = new Test();
...
}
您正在 Test
中创建 Test
的实例:要构建该 Test
实例,您必须构建另一个 Test
实例,这也需要一个Test
的实例,等等
当您创建一个新的 Test
对象时,第 3 行被调用:
private Test test = new Test()
这将创建一个新的 Test
对象,因此再次调用第 3 行,并一直重复下去。
WhosebugError 是 java 中的运行时错误。当超过 JVM 分配的调用堆栈内存量时抛出。而这是由于创建Test
个对象的无限递归造成的。
public class Test {
//Each time you create a Test object, it creates another Test object, therefore the Whosebug
private Test test = new Test();
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
正确代码:
public class Test {
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
我有一个 class 测试。当我 运行 程序抛出 Whosebug 错误时。
Class:
public class Test {
private Test test = new Test();
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
错误
Exception in thread "main" java.lang.WhosebugError
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
at Test.<init>(Test.java:5)
谁能告诉我为什么会这样?
从这里可以看出:
public class Test {
private Test test = new Test();
...
}
您正在 Test
中创建 Test
的实例:要构建该 Test
实例,您必须构建另一个 Test
实例,这也需要一个Test
的实例,等等
当您创建一个新的 Test
对象时,第 3 行被调用:
private Test test = new Test()
这将创建一个新的 Test
对象,因此再次调用第 3 行,并一直重复下去。
WhosebugError 是 java 中的运行时错误。当超过 JVM 分配的调用堆栈内存量时抛出。而这是由于创建Test
个对象的无限递归造成的。
public class Test {
//Each time you create a Test object, it creates another Test object, therefore the Whosebug
private Test test = new Test();
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}
正确代码:
public class Test {
public Test() {
System.out.println("ijshfiksh");
}
public static void main(String[] args) {
Test test = new Test();
}
}