导致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 }