java.lang.StackOverflowError
1、此错误是Error类型,不是Exception类型,是Error的子类
2、出现此类型说明问题线程的栈深度已经超过阈值。栈用于存储线程的局部变量、操作数、动态链接、方法出口等。
3、此问题一般是由于方法调用层次过深,导致栈深度超界,常出现问题的几种场景:
3.1 递归层次过多
private static void printX(int i) {
try {
printX(++i);
} catch (Throwable e) {
System.out.println(i);
e.printStackTrace();
}
}
3.2 方法之间相互调用造成无限调用
private static void funcA() {
funcB();
}
private static void funcB() {
funcA();
}
3.1 两个对象相互引用,导致在toString()方法中造成死循环的情况
public static void main(String[] args) {
B b = new B();
A a = new A();
b.setA(a);
a.setB(b);
System.out.println(a);
}
static class A {
private B b;
public void setB(B b) {
this.b = b;
}
public String toString() {
return "b=" + b;
}
}
static class B {
private A a;
public void setA(A a) {
this.a = a;
}
public String toString() {
return "a=" + a;
}
}