zoukankan      html  css  js  c++  java
  • 《Effective Java》学习笔记 ——异常

      充分发挥异常的优点,可以提高程序的可读性、可靠性和可维护性。

    第57条 只针对异常的情况才使用异常

    第58条 对可恢复的情况使用受检异常,对编程错误使用运行时异常

      * 如果期望调用者能够适当的恢复,使用受检异常。

      * 大多数的运行时异常都表示前提违例(precondition violation),如ArrayIndexOutOfBoundsException。

      * 错误往往被JVM保留用于表示资源不足、约束失败,或其他无法继续执行的条件。最好不要再实现任何新的Error子类。

    第59条 避免不必要的使用受检的异常

     

    第60条 优先使用标准的异常

      * 常用异常:IllegalArgumentException、IllegalStatusException、NullPointerException、IndexOutOfBoundsException、ConcurrentModificationException、UnsupportedOperationException等。

    第61条 抛出与异常相对于的异常

      * 更高层的实现应该捕获底层的异常,同时抛出可以按照高层抽象进行解释的异常。这种做法被称为异常转义(exception translation),如AbstractSequentialList类的例子:

    1     public E get(int index) {
    2         try {
    3             return listIterator(index).next();
    4         } catch (NoSuchElementException exc) {
    5             throw new IndexOutOfBoundsException("Index: "+index);
    6         }
    7     }

      * 也可以使用异常链(exception chaining)的形式来进行转义,即将底层的异常作为参数传入高层异常。

    第62条 每个方法抛出的异常都要有文档

      * 始终要单独的声明受检异常,并利用Javadoc的@throws标记准确的记录下抛出异常的每个条件。

      * 如果一个类的许多方法出于同样的原因而抛出同一个异常,在该类的文档注释中对这个异常建立文档,是可以接受的。

    第63条 在细节消息中包含能捕获失败的信息

    第64条 努力使失败保持原子性

      * 一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被称为具有失败原子性(failure atomic)。

      * 获得失败原子性的方法:

        (1)在执行操作之前检查参数的有效性。

        (2)调整计算处理过程的顺序,是的任何可能会失败的计算部分都在对象状态被修改前发生。

        (3)编写一段恢复代码(不常用)。

        (4)在对象的一份临时拷贝上执行操作,当操作完成后在用临时拷贝中的结果代替对象的内容。

    第65条 不要忽略异常

      * 至少,catch块也应该包含一条说明,解释为什么可以忽略这个异常。

    本文地址:https://www.cnblogs.com/laishenghao/p/effective_java_note_exception.html

  • 相关阅读:
    spring cloud微服务docker启动
    docker安装mysql5.7
    Spring Boot CommandLineRunner的使用
    IDEA Java 源发行版 8 需要目标发行版 1.8
    Centos6.5安装Python2.7.9
    Hive在drop表的时候报错
    反向读取Mysql数据库表结构到PowerDesigner中
    SpringCloud与Consul集成实现负载均衡
    Mac系统安装和卸载brew包管理
    Consul集群搭建
  • 原文地址:https://www.cnblogs.com/laishenghao/p/effective_java_note_exception.html
Copyright © 2011-2022 走看看