《Effective Java》学习笔记 ——异常
充分发挥异常的优点,可以提高程序的可读性、可靠性和可维护性。
第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》学习笔记 ——异常的更多相关文章
- Effective Java 学习笔记之第七条——避免使用终结(finalizer)方法
避免使用终结方法(finalizer) 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的. 不要把finalizer当成C++中析构函数的对应物.java中,当对象不 ...
- Java学习笔记--异常描述
异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...
- java学习笔记 --- 异常
异常 (1)程序出现的不正常的情况. (2)异常的体系 Throwable |--Error 错误,严重问题,我们不处理. · |--Exception 异常 |--R ...
- Java学习笔记--异常机制
简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...
- 0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?
上午在搜索"System.runFinalization"的时候,搜到 http://www.cnblogs.com/Skyar/p/5962253.html ,其中有关于try- ...
- Effective Java 学习笔记之所有对象都通用的方法
一.覆盖equals时请遵守通用约定 1.满足下列任何一个条件时,不需要覆盖equals方法 a.类的每个实例本质上都是唯一的.此时就是Object中equals方法所表达的含义. b.不关心类是否提 ...
- Effective Java学习笔记
创建和销毁对象 第一条:考虑用静态工厂方法替代构造器 For example: public static Boolean valueOf(boolean b){ return b ? Boolean ...
- Effective Java 学习笔记之创建和销毁对象
一.考虑用静态工厂方法代替构造器 1.此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法. 2.静态工厂方法的优势有: a.使用不同的方法名称可显著地表明两个静态工厂方法 ...
- Effective Java 学习笔记----第7章 通用程序设计
第7章 通用程序设计 第29条 将局部变量的作用域最小化 使一个局部变量的作用域最小化,最有力的技术室在第一次使用它的地方声明. 第30条 了解和使用库 效率提高.如果你不知道库 ...
- effective java学习笔记之不可实例化的类
在没有显式声明一个类的构造方法时,编译器会生成默认的无参构造方法,在设计工具类时,我们通常将方法设置成静态方法,以类名.方法名的形式调用,此时这个类就没有必要创建实例,我们知道抽象类不可以被实例化,但 ...
随机推荐
- CAC的Debian-8-64bit安装BBR正确打开方式
装过三台debian 64 bit, CAC, 2欧, KVM虚拟机 做法都一样---下面说下正确安装方式 0. 有装锐速记得先删除,免得换核心后,锐速在扯后腿. 1.换4.9版kernel ...
- Oracle EBS AR 贷项通知单核销取值
SELECT cm.trx_number ,fnd_flex_ext.get_segs('SQLGL', 'GL#', gcc.chart_of_accounts_id, ad.code_combin ...
- Safari中的Date
在js中处理Date时,发现Safari和其他浏览器的支持方式不一致 1.例如:2017-01-01 12:00:00 在其他浏览器中,使用这个格式的字符串进行new Date操作没有问题,但是在Sa ...
- chromedriver与chrome各版本及下载地址
Selenium从2升级到3之后呢,Selenium 3 相较于2最大的变化就是更加的标准化,可以支持更多的浏览器.那我们做自动化的时候如果用的是selenium3的话,首先要坐的就是下载不同浏览器的 ...
- [Python_6] Python 配置 MySQL 访问
0. 说明 Python 访问 MySQL 数据库,需要安装 MySQL 的 Python 插件. 1. 安装 MySQL 插件 pip install PyMySQL 2. 编写代码 # -*-co ...
- Django商城项目笔记No.16用户部分-用户中心收货地址
首先完成省市区三级联动 新建areas应用 python ../../manage.py startapp areas 模型类代码 class Area(models.Model): "&q ...
- volatile和synchronized的区别与联系[转]
volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符.所以我们使用这两种关键字来指定三种简单的存取变量的方式. int i1; ...
- Android 7.0以上版本 系统解决拍照的问题 exposed beyond app through ClipData.Item.getUri()
解决方案1: android.os.FileUriExposedException: file:///storage/emulated/0/ilive/images/photophoto.jpeg e ...
- 【Java123】JavaWeb Servlet开发
http://www.runoob.com/servlet/servlet-intro.html https://www.cnblogs.com/xdp-gacl/tag/JavaWeb学习总结/de ...
- Docker技术入门与实战 第二版-学习笔记-2-镜像构建
3.利用 commit 理解镜像构成 在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像. 直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜 ...