Java 应用中对于异常处理的一般策略

在 Java 应用中,各种异常(Exception)是不可避免的,那么对于这些异常我们该如何处理才能让异常更容易管理呢?

一、规避异常

首先应该规避异常,对于我们的 API 应该保证不会产生异常源,例如返回 Object 的 API,应该保证该 API 不会返回 Null。同时在 API 实现时也要努力规避异常。

二、异常封装与转换

基本异常都是 Java API 提供给我们的,而这些异常一般都用词生硬,晦涩难懂,很难将具体底层异常和 Java 应用的实际业务联系起来。为此我们应该努力构建一个符合当前 Java 应用的异常体系,这个异常体系尽量贴近当前Java应用的实际业务需求。这样我们可以将抛出的底层异常封装到我们自定义的异常体系中来。

一般是 catch 到 Lower Level Exception,但是向外抛出的却是 Higher Level Exception,对异常进行转换。

在异常封装与转换中做的最好是 Spring 的 DAO 异常体系,具体可以参考。

三、异常链

对于封装和转换的异常应该保留最底层原始的错误信息,即 root cause。只要向外抛出异常,就应该讲 root cause 异常抛出,这样最上层的异常就可以轻松获取底层异常信息。

在自定义异常体系的时候可以直接让异常存在支持异常链的构造器,对于不支持异常的异常,可以利用 Throwable 的 initCause() API 设置。

四、降低异常损失

出现了异常同时应该努力降低异常所造成的损失。能 rollback 的尽量 rollback,不能 rollback 的做其它一些补救措施,同时别忘了打log利于日后分析解决。

原文地址:https://www.cnblogs.com/orientsun/p/2575814.html