StackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作。在栈中会保存局部变量,操作数栈,方法出口等等。jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误。当然,本地方法栈也会抛出次异常。
典型的例子:
1 |
|
今天我遇见了另外一种情况:当两个对象相互引用,在调用toString方法时会产生这个异常,因为它们会循环调用toString方法。
1 |
//book和student相互循环引用 |
出现的错误:
toString()
说到toString()方法,在打印一个对象时,会先调用这个对象的toString()方法,例如:
1 |
ublic class toStringDemo { |
会输出:
1 |
I love you. |