我刚刚读到“Oracle jdbc驱动程序抛出的某些SqlExceptions在cause字段中引用了它自己”。恕我直言,异常可能会导致我很容易就好像自己从头发上掉下来一样。

但这似乎是正常的,即使Throwable.printStackTrace也可以识别“循环引用”,而这是我所知道的JDK中唯一的此类地方(例如,所有Arrays.deep*方法最终都会导致递归结构的堆栈溢出)。

那么在原因链中创建周期的原因是什么?

最佳答案

在这种情况下, cause==this means that no cause has been initialized. getCause()将返回nullThrowable.printStackTrace中的代码存在以处理多元素循环。我认为此类循环没有充分的理由,但也许是由于错误或恶意导致的。

07-24 22:35