在调试器中查看Java中的异常时,您经常会看到原因是无限地递归到自身的(我认为它是无限的)。

例如:

Exception1,
  Caused by -> Exception2
     Caused by -> Exception2
        Caused by -> Exception2

为什么是这样?

注意:这是在调试器(本例中为Eclipse)中查看代码时。

最佳答案

source code of 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;

因此,我想您所看到的是一个异常,它是在没有使用引起原因的构造函数之一的情况下创建的。

您将在调试器中看到此内容,但是getCause会确保不返回递归引用:
  414       public synchronized Throwable getCause() {
  415           return (cause==this ? null : cause);
  416       }

09-04 12:28
查看更多