获取 java.lang.StackOverflowError
Getting java.lang.StackOverflowError
我收到一个简单 java 代码的 Whosebug 异常。我不太确定它为什么会来。有人可以看一下,让我知道哪里错了。
提前致谢。
public class Test1 {
public Test1(int val) {
System.out.println(val);
}
}
public class Test {
Test t = new Test(10);
public Test(int n) {
new Test1(n);
}
public static void main(String[] args) {
new Test(5);
}
}
我低于异常。
Exception in thread "main" java.lang.WhosebugError
at com.example.Test.<init>(Test.java:5)
at com.example.Test.<init>(Test.java:5)
每当您初始化 Test
的实例时,它的成员 t
也会被初始化。但是这个成员本身就是一个Test
,所以它会初始化自己的成员t
,以此类推,直到栈溢出。最简单的解决方案是删除该成员,因为它似乎没有在任何地方使用。
classTest 有一个 Test 类型的成员,因此创建了一个新的对象 Test,重复直到堆栈已满。
堆栈是 JVM(Java 虚拟机)保存对已创建对象的引用的地方,这些对象本身位于堆上。因此,每次创建一个 Test 对象时,堆栈都会变大一点,直到 JVM 告诉您它不能将任何新的对象引用放到它上面,从而创建此异常。
可以找到 Java 内存分配的一个很好的解释 here。
请找到屏幕截图,其中这一行开始 class,
然后,这一行一遍又一遍地执行和重复相同的过程..
所以解决方案是通过以下方式做到这一点:
public class Test1 {
public Test1(int val) {
System.out.println(val);
}
}
public class Test {
int n = 10; // this will initiate this number by 10
public Test(int n) {
new Test1(n);
}
public static void main(String[] args) {
new Test(5);
}
}
我收到一个简单 java 代码的 Whosebug 异常。我不太确定它为什么会来。有人可以看一下,让我知道哪里错了。
提前致谢。
public class Test1 {
public Test1(int val) {
System.out.println(val);
}
}
public class Test {
Test t = new Test(10);
public Test(int n) {
new Test1(n);
}
public static void main(String[] args) {
new Test(5);
}
}
我低于异常。
Exception in thread "main" java.lang.WhosebugError
at com.example.Test.<init>(Test.java:5)
at com.example.Test.<init>(Test.java:5)
每当您初始化 Test
的实例时,它的成员 t
也会被初始化。但是这个成员本身就是一个Test
,所以它会初始化自己的成员t
,以此类推,直到栈溢出。最简单的解决方案是删除该成员,因为它似乎没有在任何地方使用。
classTest 有一个 Test 类型的成员,因此创建了一个新的对象 Test,重复直到堆栈已满。
堆栈是 JVM(Java 虚拟机)保存对已创建对象的引用的地方,这些对象本身位于堆上。因此,每次创建一个 Test 对象时,堆栈都会变大一点,直到 JVM 告诉您它不能将任何新的对象引用放到它上面,从而创建此异常。
可以找到 Java 内存分配的一个很好的解释 here。
请找到屏幕截图,其中这一行开始 class, 然后,这一行一遍又一遍地执行和重复相同的过程..
所以解决方案是通过以下方式做到这一点:
public class Test1 {
public Test1(int val) {
System.out.println(val);
}
}
public class Test {
int n = 10; // this will initiate this number by 10
public Test(int n) {
new Test1(n);
}
public static void main(String[] args) {
new Test(5);
}
}