6

可能重复:
JDK 1.7 Throwable `addSuppressed()` 方法

所以Java在Throwable中有一个方法

public final void addSuppressed(Throwable exception) 

这就是它的作用:

将指定的异常附加到为传递此异常而被抑制的异常。此方法是线程安全的,通常由 try-with-resources 语句调用(自动和隐式)。

..我对此感到困惑,什么是“为传递此异常而被抑制的异常的指定异常”。?

4

1 回答 1

1

文档中有一个很好的解释:Throwable

除非通过构造函数禁用,否则会启用抑制行为。当抑制被禁用时,这个方法除了验证它的参数之外什么都不做。

请注意,当一个异常导致另一个异常时,通常会捕获第一个异常,然后抛出第二个异常作为响应。换句话说,这两个例外之间存在因果关系。相反,在某些情况下,可以在同级代码块中引发两个独立的异常,特别是在 try-with-resources 语句的 try 块和关闭资源的编译器生成的 finally 块中。在这些情况下,只能传播引发的异常之一。在 try-with-resources 语句中,当有两个这样的异常时,将传播源自 try 块的异常,并将 finally 块的异常添加到由 try 块的异常抑制的异常列表中。作为一个异常展开堆栈,

一个异常可能已经抑制了异常,同时也由另一个异常引起。异常是否有原因在其创建时在语义上是已知的,这与异常是否会抑制其他异常不同,这通常仅在抛出异常后才确定。

请注意,程序员编写的代码也能够在存在多个同级异常且只能传播一个异常的情况下调用此方法。

于 2012-12-06T18:13:42.373 回答