考虑下面的例子。
public static void main(String[] args) {
try{
throw new NullPointerException();
} finally{
throw new ClassCastException();
}
}
Run Code Online (Sandbox Code Playgroud)
这仅抛出 ClassCastException 并且 NullPointerException 被抑制。这在 Java SE6 中也是可能的。那么为什么只在 JavaSE7 中强调抑制异常。我在这里缺少什么?
与此有何不同?是不是只有 2 个异常抛出,最新的一个异常抑制了前一个。
你实际上在做什么更好地描述为用另一个“替换”异常。(或者更准确地说,丢弃第一个异常并无条件抛出第二个异常!)
异常抑制(正如 JLS 使用的术语)在以下方面有所不同:
普通抑制发生(自动)仅被抛出的异常在一个try-with-resources资源清理过程中,通过了try-with-resources。您在示例中所做的事情发生在任何/所有异常中,无论它们的来源如何。
通过正常抑制,次要异常被抑制。在这种情况下,主要异常被“抑制”。
正常抑制时,被抑制的异常记录在原始异常中。在您的示例中,它被丢弃。
现在,无可否认,您可以Throwable.addSuppressedException(...)通过其他方式手动使用该方法。我描述它是如何打算使用。
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |