java异常处理和设计总结

前言

本文只写给自己看。

1.什么是异常

异常表示没有遵守契约。

2.异常的信息

在出现了异常情况,为了监控优化程序,统计异常信息,我们可能会将异常信息记录到数据库,为了调试程序,定位错误,我们可能会将程打印到输出日志,即使
你非常肯定捕获到的异常不会以任何方式对程序造成影响,我们也应该用log日志输出警告信息,以便日后更新和维护。也就是说只要出现了异常,我们都会输出异常信息。

2.1异常信息要回答三个问题

    1.在哪里出错了

        哪个类,哪个方法,哪句代码

    2.为什么出错  

      SQL语法错误,还是参数不合法,

    3.出错的细节信息

   例如SQL错误,至少要在错误信息里提供出错的SQL,SQL的参数,如果是业务异常,至少要包含这个业务对象的必要信息

2.2什么时候要输出异常信息

     一般都是通过异常转移,形成异常链在高层输出

2.3避免多次输出同一个异常信息,不要在底层输出信息之后,在上一层还是输出信息


3.什么时候该处理异常

只处理自己有能力处理的异常,即没法处理的异常不要捕获,抛到上层再处理。


4.抛出什么样的异常

CheckException是标准

5.异常处理的建议

异常处理的”复用“。用最少的代码集中处理问题。


代码整洁之道

1.使用异常而非返回码
2.先写try_catch_finally语句
3.使用不可控异常
4.给出异常发生的环境说明
5.一调用者需要定义异常类
6.定义常规流程
7.别返回null值

8.别传递null值

  跟Effective Java里说的跟状态相关的方法,往往应该有个状态测试。

使用特例对象


重构改善既有代码的设计

1以异常取代错误码
2.以测试取代异常


Effective Java

57:只针对异常的情况才使用异常
58:对可恢复的情况使用受检异常,对编程错误使用运行时异常
59:避免不必要地使用受检的异常
60:优先使用标准异常的异常

避免设计过多自定义异常

61:  抛出域抽象相对应的异常

       高层实现应该捕获底层的异常,同事抛出可以按照高层抽象进行解释的异常。也就是异常转移。

特殊的异常转移叫做异常链。


61:每个方法抛出的异常都要有文档
62:在细节消息中包含可能捕获失败的信息
63:努力使失败保持原子性

       注意:要考虑异常安全问题,异常安全是指,一个对象碰到异常之后,还能够保证自身的正确性。还有一种更严格的异常安全,叫做“强异常安全”。强异常安全不仅要求出现异常后对象要保证正确性,还要求对象不能作出任何改变,也就是实现“事务”的那种 commit-rollback 机制:要么成功,要么不改变。

64:不要忽略异常


你可能感兴趣的:(JAVAEE)