Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么是房地产'';原因“;例外是永远重复吗?_Java_Spring_Exception_Exception Handling - Fatal编程技术网

Java 为什么是房地产'';原因“;例外是永远重复吗?

Java 为什么是房地产'';原因“;例外是永远重复吗?,java,spring,exception,exception-handling,Java,Spring,Exception,Exception Handling,在使用eclipse IDE调试HttpClientErrorException时,我注意到属性“cause”包含对错误本身的引用,所以我仔细检查了一遍,发现属性“cause”一次又一次地出现了。。。永远 为什么此属性包含对自身的引用 您有权访问创建此异常的源代码吗 看起来好像创建了HttpClientErrorException对象,然后其cause字段被修改为同一个对象,可能是使用了initCause Throwable声明 private Throwable cause = this;

在使用eclipse IDE调试HttpClientErrorException时,我注意到属性“cause”包含对错误本身的引用,所以我仔细检查了一遍,发现属性“cause”一次又一次地出现了。。。永远

为什么此属性包含对自身的引用


您有权访问创建此
异常的源代码吗


看起来好像创建了
HttpClientErrorException
对象,然后其
cause
字段被修改为同一个对象,可能是使用了
initCause

Throwable
声明

private Throwable cause = this;
如果原因未初始化,通过在构造函数中传递原因或调用
initCause
,它将继续指向
。请注意,因此,
getCause
实现为:

public synchronized Throwable getCause() {
    return (cause==this ? null : cause);
}
更新:

此设计的原因也在可丢弃的
中解释:

允许可丢弃的对象不可变,并由 JVM,例如OutOfMemoryErrors,可丢弃的字段 可写以响应用户操作、原因、堆栈跟踪和 抑制异常遵守以下协议:

1) 字段初始化为非空的sentinel值,该值 表示逻辑上未设置该值

2) 向字段写入null表示禁止进一步写入

3) sentinel值可以替换为另一个非空值

例如,热点JVM的实现已经预先分配了 OutOfMemoryError对象以提供更好的可诊断性 情况。这些对象是在不调用构造函数的情况下创建的 对于该类,相关字段初始化为null。到 支持此功能,任何添加到Throwable的新字段 需要初始化为非空值需要协调 JVM改变


谢谢我在文档中发现:“如果此字段等于此可丢弃项本身,则表明此可丢弃项的原因尚未初始化。”@mrMonoProgrammer yes。您可以通过在构造函数中传递Throwable或调用
initCause
来初始化它。如果不这样做,它将指向这一点。另外,
Throwable.getCause()
也观察到了这一事实。