异常链

异常链是一种面向对象编程技术，指将捕获的异常包装进一个新的异常中并重新抛出的异常处理方式。原异常被保存为新异常的一个属性（比如cause）。这个想法是指一个方法应该抛出定义在相同的抽象层次上的异常，但不会丢弃更低层次的信息。

比如，播放视频文件的方法可能捕获读取文件过程中的异常，将其包装在新抛出的播放视频文件的异常中。用户界面部分不需要知道读取字节块、 eof() 调用或其他操作时发生的错误，这是意外的文件结尾、读取错误或者其他的错误：用户界面只需要从 cause 属性中提取出异常信息。用户界面层会有自身一系列的异常。若对 cause 感兴趣，可以在调试期间、或在适当的日志中查看异常的堆栈跟踪信息（ stack track ）。

Java 中 受控异常（Checked exceptions） 特别强调了抛出正确类型的异常，从 Java 1.4版本开始，几乎所有的异常都支持异常链。

在运行时环境，比如 Java 或 .Net 中，都有工具连接到运行时引擎；每当感兴趣的异常发生，这些工具就记录下内存中的调试信息以及抛出异常的时间（栈和堆上的值）。这些工具提供异常截取（Exception Interception）功能，它们为生产环境、测试环境、开发环境中的Java程序中出现的的异常提供了root-cause信息。

参考链接 

 Exceptional practices by Brian Goetz at javaworld.com
 Chained exceptions  - Sun's Java tutorial

软件设计模式