导致exception中的递归原因的原因是什么?
在调试器中查看Java中的exception时,您经常会看到原因是无限递归(我认为它是无限的)。
例如:
Exception1, Caused by -> Exception2 Caused by -> Exception2 Caused by -> Exception2
为什么是这样?
注意:这是在查看调试器中的代码时,在这种情况下是Eclipse。
查看Throwable的源代码 :
187 /** 188 * The throwable that caused this throwable to get thrown, or null if this 189 * throwable was not caused by another throwable, or if the causative 190 * throwable is unknown. If this field is equal to this throwable itself, 191 * it indicates that the cause of this throwable has not yet been 192 * initialized. 193 * 194 * @serial 195 * @since 1.4 196 */ 197 private Throwable cause = this;
所以我猜你所看到的是一个Exception,它是在不使用其中一个构造函数的情况下创建的。
您将在调试器中看到这一点,但getCause负责不返回递归引用:
414 public synchronized Throwable getCause() { 415 return (cause==this ? null : cause); 416 }