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

vin*_*inS 3 java exception

Exception TranslationJava 中和之间有什么区别Exception Chaining

vin*_*inS 5

根据Joshua Bloch《Effective Java》中的说法:

\n\n

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

\n\n
try {\n    // Use lower-level abstraction to do our bidding\n    ...\n} catch(LowerLevelException e) {\n    throw new HigherLevelException(...);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

异常链接
\n它是异常转换的特殊形式。\n在较低级别的异常可能有助于调试\n导致较高级别异常的问题的情况下。较低级别的异常(原因)被传递给较高级别的异常,后者提供\n访问器方法 (Throwable.getCause) 来检索较低级别的异常:

\n\n
try {\n    ... // Use lower-level abstraction to do our bidding\n} catch (LowerLevelException cause) {\n    throw new HigherLevelException(cause);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

更高级别的异常\xe2\x80\x99s 构造函数将原因传递给链式感知超类构造函数,因此它最终传递给 Throwable\xe2\x80\x99s 链式感知构造函数之一,例如 Throwable(Throwable):

\n\n
// Exception with chaining-aware constructor\nclass HigherLevelException extends Exception {\n    HigherLevelException(Throwable cause) {\n        super(cause);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n