Java语言的异常处理,完全理解下面4点就可以了
在 Effective Java: Programming Language Guide一书中
- 第 39 条:只为异常条件使用异常。也就是说,不要为控制流使用异常,比如,在调用
Iterator.next()
时而不是在第一次检查Iterator.hasNext()
时捕获NoSuchElementException
。 - 第 40 条:为可恢复的条件使用检查型异常(check异常要求必须捕获进行处理,负责无法通过编译。),为编程错误使用运行时异常。这里,Bloch 回应传统的 Sun 观点 —— 运行时异常应该只是用于指示编程错误,例如违反前置条件。
- 第 41 条:避免不必要的使用检查型异常。换句话说,对于调用者不可能从其中恢复的情形,或者惟一可以预见的响应将是程序退出,则不要使用检查型异常。
- 第 43 条:抛出与抽象相适应的异常。换句话说,一个方法所抛出的异常应该在一个抽象层次上定义,该抽象层次与该方法做什么相一致,而不一定与方法的底层实现细节相一致。例如,一个从文件、数据库或者 JNDI 装载资源的方法在不能找到资源时,应该抛出某种
ResourceNotFound
异常(通常使用异常链来保存隐含的原因),而不是更底层的IOException
、SQLException
或者NamingException
。
异常类图:
参考资源:
http://ispring.javaeye.com/blog/222680
http://www.javaeye.com/topic/2038
http://www.javaeye.com/topic/457351