我有自己的异常,由我的类抛出,BrowserException.
这可能是因为一些内部问题,即UnsupporderEncodingException.
现在我有两个选择:
在例外情况下,suppressException和cause之间有什么区别?
我什么时候更喜欢使用它们?
抑制的例外是其中之一就在不发生其他异常发生.我只知道发生这种情况的一种情况,即使用try-with-resources语句.该JLS(14.20.3)说:
资源以与初始化资源相反的顺序关闭.仅当资源初始化为非空值时才关闭资源.关闭一个资源的例外不会阻止关闭其他资源.如果先前由初始化程序,try块或资源关闭抛出异常,则会抑制此类异常.
因此,假设您正在尝试写入USB记忆棒上的文件流,并删除USB记忆棒.该write调用抛出IOException- 但调用也是如此close,因为它正在尝试刷新缓冲区.来自write调用的原始异常将是调用者看到的异常,但是他们将能够获得被抛出的异常close作为被抑制的异常.
如果异常实际上是将一个异常转换为另一个异常的结果,则异常是有原因的.假设您正在编写一个与本地文件系统对话的SQL系统.您的JDBC驱动程序方法只能抛出SQLException,那么如果底层代码抛出一个IOException因为它无法从磁盘读取,您会怎么做?您可能希望在其中IOException看到详细信息SQLException,因此您将其传递给构造函数SQLException- 这IOException是异常的原因.
您不太可能需要自己添加抑制异常,但是创建一个由另一个异常引起的异常(通常通过构造函数而不是通过调用initCause)是相当常见的.