Effective Java 第三版——77. 不要忽略异常
Tips
书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code
注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本。

77. 不要忽略异常
虽然这一建议似乎显而易见,但它经常被违反,因此值得重复提及。当API的设计人员声明一个抛出异常的方法时,他们试图告诉你一些事情。不要忽忽略它!在方法调用的周围加上一条try语句,其catch块为空,这样就很容易忽略了异常:
// Empty catch block ignores exception - Highly suspect!
try {
...
} catch (SomeException e) {
}
空的catch块违背了异常的初衷,而异常的目的是强迫处理异常情况。忽略异常类似于忽略火灾警报——关掉它,这样其他人就没有机会看到是否真的发生了火灾。你可能侥幸逃脱,或者结果可能是灾难性的。每当你看到一个空的catch块,你的脑海中就应该响起警报。
但在某些情况下,忽略异常是合适的。例如,在关闭FileInputStream时,它可能是合适的。你没有更改文件的状态,因此不需要执行任何恢复操作,并且已经从文件中读取了所需的信息,因此没有理由中止正在进行的操作。记录异常可能是明智的,这样如果这些异常经常发生,你就可以调查这个问题。如果选择忽略异常,catch块应该包含一条解释为什么这样做是合适的注释,并且变量应该被命名为ignore:
Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColors = 4; // Default; guaranteed sufficient for any map
try {
numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutException | ExecutionException ignored) {
// Use default: minimal coloring is desirable, not required
}
本条目中的建议同样适用于检查异常和未检查异常。不管异常是表示可预测的异常情况还是编程错误,用空catch块忽略它将导致程序在错误面前默默地执行下去。然后,程序可能会在未来的任意时间失败,在代码中与问题根源没有明显关系的某个点上。正确处理异常可以完全避免失败。仅仅让异常向外传播至少会导致程序迅速失败,保留信息以帮助调试失败的原因。
Effective Java 第三版——77. 不要忽略异常的更多相关文章
- 《Effective Java 第三版》新条目介绍
版权声明:本文为博主原创文章,可以随意转载,不过请加上原文链接. https://blog.csdn.net/u014717036/article/details/80588806前言 从去年的3月份 ...
- 《Effective Java 第三版》目录汇总
经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习.时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正. 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用静态工厂方法替 ...
- Effective Java 第三版——10. 重写equals方法时遵守通用约定
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——11. 重写equals方法时同时也要重写hashcode方法
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——24. 优先考虑静态成员类
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——39. 注解优于命名模式
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——45. 明智审慎地使用Stream
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——46. 优先考虑流中无副作用的函数
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
随机推荐
- python数据结构之冒泡排序
冒泡排序是一种基础排序算法,在python中,我们利用列表的的方式来完成,它对列表中的元素进行重复的遍历,在遍历的同时进行比较,如果两个数没有按照我们规定的顺序进行排列,就按照我们预先设定好的是顺序或 ...
- SpringMVC(十六) 处理模型数据之SessionAttributes
@SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...
- Python流程控制if判断以及whlie循环
一.基本运算符补充 1. 算术运算 print(10 / 3) print(10 // 3) print(10 ** 2) 2. 赋值运算 ...
- AE缺失Form Trapcode Form
缺失Form 下载链接: trapcode套装插件2017下载_Trapcode系列十款插件汉化版[支持AE CC 64位] - 迷你下载 下载Trapcode就可以了,应该是TC里的 去新CG下插件 ...
- BZOJ.4826.[AHOI/HNOI2017]影魔(树状数组/莫队 单调栈)
BZOJ LOJ 洛谷 之前看\(mjt\)用莫队写了,以为是一种正解,码了3h结果在LOJ T了没A= = 心态爆炸(upd:发现是用C++11(NOI)交的,用C++11交就快一倍了...) 深刻 ...
- ns2.34 移植MFLOOD协议时出现的问题
安全按照<NS网络模拟核协议仿真>第11章的步骤进行修改,但是make的时候出现了一下错误: make[1]: 正在进入目录 `/home/wang/ns/ns-allinone-2.34 ...
- Tapable.plugin is deprecated. Use new API on `.hooks` instead
问题描述 在使用extract-text-webpack-plugin给webpack打包时出现报错 Tapable.plugin is deprecated. Use new API on `.ho ...
- 20172327 2018-2019-1 《第一行代码Android》第一章学习总结
学号 2018-2019-1 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这 ...
- C# 哈希表HashTable的简单使用
本人C#程序菜鸟级别的存在,写博客一方面是为了知识的共享,另一方面也是为了督促自己:大神,可以忽略这篇文文的.废话到此...... 哈希表是可以直接进行访问的数据结构,在形式上是类似字典的.不同的是, ...
- mac 本地跨域
完全退出chrome后终端下输入以下命令: chrome49以前版本 open -a "Google Chrome" --args --disable-web-security c ...