你经常会碰到在捉到一个异常并且抛出另一个异常的时候,还要保存前一个异常的信息的情况——这就是所谓的异常链。程序员们必须自己写代码来保存前一个异常的信息,但现在所有的throwabls的子类都有一个能接受cause对象的构造函数。这个cause就是用来保存前一个异常的,这样通过一级一级的传递,即便你在创建并抛出了新的异常,它仍然能维系一个能追踪到异常的第一现场栈轨迹。
有趣的是,在throwable的子类中,只有三种基本的异常类提供了带cause参数的构造函数,它们是Error Exception和RuntimeException。如果你要链接 异常,那就不能用构造函数,而只能用initCause()方法了。