No57 只针对异常的情况才使用异常

异常应该只用于异常的情况下,它们永远不应该用于正常的控制流。

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

Java程序设计语言提供了三种可抛出结构(throwable):受检的异常(checked exception)、运行时异常(run-time exception)和错误(error)。

  1. 如果期望调用者能够适当地恢复,对于这种情况就应该使用受检的异常。
  2. 用运行时异常来表明编程错误。例如:数组访问下标越界。
  3. 错误往往被JVM保留用于表示资源不足、约束失败,或者其它使程序无法继续执行的条件。

No60 优先使用标准的异常

表60 常用的异常

异常

使用场合

IllegalArgumentException

非null的参数值不正确

IllegalStateException

对于方法调用而言,对象状态不合适

NullPointerException

在禁止使用null的情况下数值为null

IndexOutOfBoundsException

下标参数值越界

ConcurrentModificationException

对禁止并发修改的情况下,检测到对象的并发修改

UnsupportOperationException

对象不支持用户请求的方法

No62 每个方法抛出的异常都要有文档

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

No63 在细节消息中包含能捕获失败的信息

为了捕获失败,异常的细节信息应该包含所有“对该异常有贡献”的参数和域的值。例如:IndexOutOfBoundsException异常的细节消息应该包含下界、上界以及没有落在界内的下标值。

No65 不要忽略异常

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

转载于:https://www.cnblogs.com/nayitian/p/3250039.html

《Effective Java》读书笔记八(异常)相关推荐

  1. Effective Java读书笔记八:序列化(74-78)

    第74条:谨慎地实现Serializable接口 对象序列化API,它提供了一个框架,用来将对象编码成字节流,并从字节流编码中重新构建对象.将一个对象编码成一个字节流,称作将该对象序列化,相反的处理过 ...

  2. Effective Java读书笔记(二)

    Effective Java 读书笔记 (二) 创建和销毁对象 遇到多个构造器参数时要考虑使用构建器 创建和销毁对象 何时以及如何创建对象? 何时以及如何避免创建对象? 如何确保它们能够适时地销毁? ...

  3. Effective Java 读书笔记(七):通用程序设计

    Effective Java 读书笔记七通用程序设计 将局部变量的作用域最小化 for-each 循环优于传统的 for 循环 了解和使用类库 如果需要精确的答案请避免使用 float 和 doubl ...

  4. Effective Java读书笔记五:异常

    第57条:只针对异常的情况才使用异常 异常是为了在异常情况下使用而设计的,不要将它们用于普通的控制流,也不要编写迫使它们这么做的API. 下面部分来自:异常 如果finally块中出现了异常没有捕获或 ...

  5. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  6. Effective Java 读书笔记(一)

    前言: 开个新的坑位,<effective java>的读书笔记,之后有时间会陆陆续续的更新,读这本书真的感触满多,item01和item02就已经在公司的项目代码中看到过了.今天这篇主要 ...

  7. Effective Java读书笔记七:泛型(部分章节需要重读)

    第23条:请不要在新代码中使用原生态类型 从java1.5发行版本开始,Java就提供了一种安全的替代方法,称作无限制的通配符类型,如果要使用范型,但是确定或者不关心实际的参数类型,就可以用一个问号代 ...

  8. Effective Java读书笔记六:方法

    第38条:检查参数的有效性 绝大多数方法和构造器对于传递给它们的参数值都会有些限制.比如,索引值必须大于等于0,且不能超过其最大值,对象不能为null等.这样就可以在导致错误的源头将错误捕获,从而避免 ...

  9. Effective Java读书笔记四:通用程序设计

    第45条:将局部变量的作用域最小化 在第一次使用变量时的地方声明: 几乎每个局部变量的声明都应该包含一个初始表达式: 如果在终止循环之后不需要循环变量的内容,for循环优于while循环.(for循环 ...

  10. Effective Java读书笔记一:并发

    第66条:同步访问共享的可变数据 关键字synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块. 同步不仅可以阻止一个线程看到对象处于不一致的状态中,它还可以保证 ...

最新文章

  1. FFMPEG 日志输出控制
  2. SharePoint Foundation和SharePoint Server的区别
  3. ABAP:为Table Control创建Context Menu
  4. 试图将驱动程序添加到存储区_基于容器的块存储使用
  5. esxi vsphere的端口_硬干货!一张图弄清楚在ESXi下如何进行网络抓包
  6. 视频主观质量评价方法
  7. 【Pre-Training】XLNet:预训练最强,舍我其谁
  8. java查找算法:二分查找(两种方式)
  9. 完美卸载IE8/IE7安装IE6
  10. 睡眠革命——摘抄总结大纲
  11. IP协议的详细知识总结
  12. 互联网人年底加薪指南
  13. 高仙商用清洁机器人落地北京环球影城,为室外清洁再添助力
  14. TPS929120的CRC校验的三种实现方法
  15. python3手动配置环境变量
  16. python爬虫(1)-百度新闻首页抓取
  17. 北京师范大学计算机研究生毕业去向,北京师范大学的计算机科研实力怎么样啊?我想考北..._考研_帮考网...
  18. Python生成密码字典写入文件算法
  19. 推荐外链网盘 OpenDrive
  20. (二)直流电压源和交流电压源同时作用的二极管电路

热门文章

  1. 《bbs.yingjiesheng.com,超全的求职笔经面经论坛》
  2. Javascript编程基础1
  3. Windows下删除.svn文件夹的最简易方法
  4. 基础补充:使用xlrd模块读取excel文件
  5. Vijos p1165 火烧赤壁 离散化+单调栈
  6. 模块化编程AMDCommonJS
  7. Asp.net 导入Excel(服务器不带Office)
  8. Python: UTF8转换代码实例
  9. mysql err 1118_MySQL ERROR1118报错详解 Row size too large
  10. UVA11248 网络扩容(枚举割边扩充)