我刚刚读到“Oracle jdbc驱动程序抛出的某些SqlExceptions在cause字段中引用了它自己”。恕我直言,异常可能会导致我很容易就好像自己从头发上掉下来一样。
但这似乎是正常的,即使Throwable.printStackTrace
也可以识别“循环引用”,而这是我所知道的JDK中唯一的此类地方(例如,所有Arrays.deep*
方法最终都会导致递归结构的堆栈溢出)。
那么在原因链中创建周期的原因是什么?
最佳答案
在这种情况下, cause==this
means that no cause has been initialized. getCause()
将返回null
。 Throwable.printStackTrace
中的代码存在以处理多元素循环。我认为此类循环没有充分的理由,但也许是由于错误或恶意导致的。