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

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

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

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

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

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

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

 

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

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

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

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

     public E get(int index) {
try {
return listIterator(index).next();
} catch (NoSuchElementException exc) {
throw new IndexOutOfBoundsException("Index: "+index);
}
}

  * 也可以使用异常链(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

《Effective Java》学习笔记 ——异常的更多相关文章

  1. Effective Java 学习笔记之第七条——避免使用终结(finalizer)方法

    避免使用终结方法(finalizer) 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的. 不要把finalizer当成C++中析构函数的对应物.java中,当对象不 ...

  2. Java学习笔记--异常描述

    异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...

  3. java学习笔记 --- 异常

    异常 (1)程序出现的不正常的情况. (2)异常的体系   Throwable    |--Error  错误,严重问题,我们不处理.    ·    |--Exception 异常     |--R ...

  4. Java学习笔记--异常机制

    简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...

  5. 0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?

    上午在搜索"System.runFinalization"的时候,搜到 http://www.cnblogs.com/Skyar/p/5962253.html ,其中有关于try- ...

  6. Effective Java 学习笔记之所有对象都通用的方法

    一.覆盖equals时请遵守通用约定 1.满足下列任何一个条件时,不需要覆盖equals方法 a.类的每个实例本质上都是唯一的.此时就是Object中equals方法所表达的含义. b.不关心类是否提 ...

  7. Effective Java学习笔记

    创建和销毁对象 第一条:考虑用静态工厂方法替代构造器 For example: public static Boolean valueOf(boolean b){ return b ? Boolean ...

  8. Effective Java 学习笔记之创建和销毁对象

    一.考虑用静态工厂方法代替构造器 1.此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法. 2.静态工厂方法的优势有: a.使用不同的方法名称可显著地表明两个静态工厂方法 ...

  9. Effective Java 学习笔记----第7章 通用程序设计

    第7章 通用程序设计 第29条 将局部变量的作用域最小化     使一个局部变量的作用域最小化,最有力的技术室在第一次使用它的地方声明.   第30条 了解和使用库      效率提高.如果你不知道库 ...

  10. effective java学习笔记之不可实例化的类

    在没有显式声明一个类的构造方法时,编译器会生成默认的无参构造方法,在设计工具类时,我们通常将方法设置成静态方法,以类名.方法名的形式调用,此时这个类就没有必要创建实例,我们知道抽象类不可以被实例化,但 ...

随机推荐

  1. Log4Net记录到文件

    将这篇文章的配置文件中的log4net节点下的内容替换成下面的 https://www.cnblogs.com/RambleLife/p/9165248.html <log4net debug= ...

  2. Centos7源码安装httpd2.4版本web服务器

    我们的系统平台是在centos7.5的环境下安装httpd2.4版本的软件,2.4版本的软件有一个特征就是需要安装arp包以及arp-util包才可以. 1.首先是下载httpd2.4版本的包,以及安 ...

  3. Asp.net core 2.0.1 Razor 的使用学习笔记(二)

    ASP.net core 2.0.1 中 asp.net identity 2.0.1 的基本使用(一)—启用用户管理 一.修改和启用默认的用户账户管理和角色管理 在Data目录中添加Applicat ...

  4. python 使用csv 文件写入 出现多余空行数据解决方案

    因为csv.writerow() 方法会造成读取时每条数据后多一条空数据 解决方案如下: 分为两种情况 python2 和 python3 先说python2版本 with open('xxx.csv ...

  5. java中Integer与int装箱拆箱一点收获

    示例代码: class BoxIntInteger { public static void main(String[] args) { Integer a = new Integer(10111); ...

  6. PAT B1008 数组元素循环右移问题 (20 分)

    一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N−1​​)变换为(A​N−M​​⋯A​N−1​​A ...

  7. linux固定ip地址

    最近自己搭jenkins发现ifconfig出来ip老是变来变去决定固定服务ip,原来配置: [root@bogon bin]# cat /etc/sysconfig/network-scripts/ ...

  8. Foxmail添加gmail密码错误

    想在foxmail上添加gmail时一直报密码错误,找了一圈发现是开启了两步验证,需要用应用专用密码才可以登录,生成应用专用密码的地址如下: https://security.google.com/s ...

  9. Android 给TextView中的字体加上“中间线”

    大家都知道在做购物App或者购物网站的时候,商品价格往往会有一个“现价”和“原价”而原价往往会在中间加上一个黑色的横线.便于醒目客户,但是这种效果在App中应该怎样做呢? 废话不多少,直接给大家看代码 ...

  10. day70

    昨日回顾:1 虚拟环境 -1 pycharm里创建 -2 用命令串讲2 视图层: 1 Request对象---GET,POST,method,body,FILES,META,path(只是路径),ge ...