java - Java 中的异常翻译与异常链接

标签 java exception

Java 中的异常翻译异常链接 有什么区别?

最佳答案

根据Joshua BlochEffective Java中的说法 -

异常翻译
较高层应捕获较低级别的异常 并在其位置抛出可以用以下方式解释的异常 更高层次的抽象。

try {
    // Use lower-level abstraction to do our bidding
    ...
} catch(LowerLevelException e) {
    throw new HigherLevelException(...);
}

异常链
它是异常翻译的特殊形式。 如果较低级别的异常可能对某人调试有帮助 导致更高级别异常的问题。较低级别的异常(原因)被传递给较高级别的异常,后者提供了一个 访问器方法(Throwable.getCause)来检索较低级别的异常:

try {
    ... // Use lower-level abstraction to do our bidding
} catch (LowerLevelException cause) {
    throw new HigherLevelException(cause);
}

高级异常的构造函数将原因传递给链式感知 父类(super class)构造函数,因此它最终会传递给 Throwable 的链式构造函数之一,例如 Throwable(Throwable):

// Exception with chaining-aware constructor
class HigherLevelException extends Exception {
    HigherLevelException(Throwable cause) {
        super(cause);
    }
}

关于java - Java 中的异常翻译与异常链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47806150/

相关文章:

java - 从 Java 中的字符串中删除停用词

java - 谁能解释为什么这段代码只在构造函数中起作用?

java.lang.NumberFormatException : For input string: "22"

java - 当我从 native Java 方法抛出 C++ 异常时会发生什么?

Javaws 启动错误的 JVM

java - 如果按下另一个按钮,则添加两个按钮

c++ - 异常处理和从非 fatal error 中恢复

c# - 如何找到在 C# 中抛出的异常的异常类型?

java - 无法从 START_ARRAY token 中反序列化对象的实例

Java:如何在不使用 throw 语句的情况下抛出自定义运行时异常?