10

デバッガーで Java の例外を見ると、原因がそれ自体に無限に再帰的であることがよくわかります (無限だと思います)。

例えば:

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

どうしてこれなの?

注: これは、デバッガー (この場合は Eclipse) でコードを見た場合です。

4

1 に答える 1

19

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;

したがって、あなたが見ているのは、原因をとるコンストラクターの1つを使用せずに作成された例外だと思います。

これはデバッガーで確認できますが、getCauseは再帰参照を返さないように処理します。

  414       public synchronized Throwable getCause() {
  415           return (cause==this ? null : cause);
  416       }
于 2012-06-29T13:41:33.640 に答える