public class StackOverflowError
extends VirtualMachineError
当应用程序递归太深而发生堆栈溢出时,抛出该错误。
StackOverflowError是由于当前线程的栈满了 ,也就是函数调用层级过多导致,比如死循环,或者递归层次过深。
附上thinking in java中的一段代码:p287页
在调用toString()方法时候,this发生类型转换,从InfiniteRecursion转化为String类型。这个过程中需要调用this.toString()方法。既然进入了递归调用,最终到处出错。
package com.thinking.string;
import java.util.ArrayList;
import java.util.List;
public class InfiniteRecursion {
public String toString() {
//An exception occurred: java.lang.StackOverflowError
// return " InfiniteRecursion address: " + this + "\n";
return " InfiniteRecursion address: " + super.toString() + "\n";
}
public static void main(String[] args) {
List<InfiniteRecursion> v = new ArrayList<InfiniteRecursion>();
for (int i = 0; i < 10; i++) {
v.add(new InfiniteRecursion());
}
System.out.println(v);
}
}
参考资料:http://blog.sina.com.cn/s/blog_68f018570100vhcr.html