多语言展示
当前在线:896今日阅读:176今日分享:34

java中的异常链

常常会再捕获一个异常后跑出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。
工具/原料
1

IntelliJ IDEA

2

jdk1.8

方法/步骤
1

在捕获异常以处理错误情况时, 完全有可能您希望重新引发该异常, 甚至引发其他类型的异常。

2

执行此操作的原因包括 '清洗' 从已检查的异常到运行时异常的异常, 或者执行异常的某些日志记录, 然后重新引发异常。在引发以前捕获的异常时, 最好引发新的异常, 并在该新异常上添加引用。此技术称为异常链接。

3

这种心态对于在 catch 块中引发新的异常也是一样的。在新异常的构造函数中添加对旧异常的引用。

4

这样做的原因是, 如果根本不处理异常, 这些异常链对于调试是非常有价值的, 而且堆栈跟踪会一直到应用程序控制台。堆栈跟踪中的链是由 'case by' 行引用的。这是指在包装在新的异常或重新引发之前的原始异常。

5

下图显示了如何创建链式异常。通过将该引用传递给 illegalstatexception 的构造函数, 将 catch 块中的异常实例链接到新的 IllegalStateException 实例。

6

所有标准的 java 库异常都可以将可抛出作为构造函数参数, 如果您曾经创建任何新的 exception 类, 请确保遵守此规定。当运行此 (公认人为) 测试时, 它演示了 illegalstatexception 确实是由添加数字的第一个参数过高引起的:

7

如果没有对异常进行链接, 并且 try 中的代码会更大, 则尝试找出原始异常从何处引发的可能是一项浪费时间的工作。如果您在 catch 块中看到一个异常正在引发, 并且它不链接原始异常, 请在那里和原始异常中添加引用。你以后会感谢你自己的!

注意事项

jdk1.8

推荐信息