Dreamhead把他用大把银子买来的“Effective Java”借给我阅读,我真是很感动亚,我只能用行动来感谢Dreamhead了。^_^

39、只针对不正常的条件才使用异常
异常只应该被用于不正常的条件,它们永远不应该被用于正常的控制流。

40、对于可恢复的(recoverable conditions)使用被检查异常(checked exceptions),对于程序错误(error)使用执行期异常(runtime exceptions)
Java中大致分为两种不正常状态:checked exception(被检查异常) and error(错误,一般抛出的runtime-exception也都是error的表现,所以我把runtime exceptions也划归为error)。

- 如果期望调用者能够恢复,那么对于这样的条件应该使用被检查的异常。
- 用运行时异常来指明程序错误。
大多数运行时异常都是表明API的客户没有遵守API规范建立的约定。建议你所实现的所有的unchecked exceptions都应该是RuntimeException的子类(直接或间接的)。

42、尽量使用标准的异常
Java平台库提供了一组基本的unchecked exceptions,它们覆盖了绝大多数的API抛出异常的需要。

常用的异常复习:
IllegalArgumentException    在参数的值不合适时抛出。
IllegalStateException        对于这个方法而言,对象状态不合适。
NullPointerException        参数值为null
IndexOutOfBoundsException        下标越界
UnsupportedOperationException    对象不支持用户要求的方法。
CocurrentModificationException    在禁止并发修改时,对象检测到并发修改

46、努力保持 failure atomicity (失败之原子性)
解释一下失败原子性的概念:即一个失败的方法调用应该使对象保持“它在被调用之前的状态”。这样的方法被称为具有“失败原子性”的方法。

使用“不可变”对象是获取“失败原子性”的最常见的办法。

47、不要忽略异常
忽略一个异常方法很简单:
try{
    //….
}catch(SomeException e){
    //empty block
}

空的catch块儿会使异常达不到应有的目的。至少在catch block中应该包含一条说明,用来解释为什么忽略掉这个异常是合适的。

© 2004, bigwhite. 版权所有.

Related posts:

  1. Effective Java阅读笔记-item4、6
  2. Effective Java阅读笔记-item12
  3. Effective Java阅读笔记-item13、14
  4. Effective Java阅读笔记-item16
  5. Effective Java阅读笔记-item24、25、34