摘要: 当API的设计者声明一个方法将抛出某个异常的时候,他们等于正在试图说明某些事情。请不要忽略它们。要忽略一个异常非常容易, 只需将方法调用通过try语句包围起来,并包含一个空的catch块。 try { …… }catch(SomeException e) { } 空的catch块会使异常达不到应有的目的。至少catch块应该包含一条说明,解释为什么可以忽略这个异常。 对于未受检异常... 阅读全文
posted @ 2015-06-02 16:31 wangliyue 阅读(250) 评论(0) 推荐(0)
摘要: 当对某个对象操作时抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中。因为调用者对象期望能从这种 异常中进行恢复。一般而言,失败的对象操作方法应该使对象保持在被操作之前的状态。具有这种属性的方法称为具有失败原子性。 阅读全文
posted @ 2015-06-02 16:07 wangliyue 阅读(213) 评论(0) 推荐(0)
摘要: 当程序由于未被捕获的异常而失败时,系统会自动打印该异常的堆栈轨迹,也就是异常对象的printStackTrace()方法的输出结果。 printStackTrace()方法,输出的第一行包含此对象的 toString() 方法的结果。剩余行表示以前由方法 fillInStackTrace() 记录的数据。 toString()方法是该异常的字符串表示法,fillInStackTrace() 方法输... 阅读全文
posted @ 2015-06-02 15:26 wangliyue 阅读(190) 评论(0) 推荐(0)
摘要: 花点时间仔细为每个方法抛出的异常建立文档是特别重要的。 始终要单独的声明受检的异常,并且利用Javadoc的@throws标记,准确的记录下抛出每个异常的条件。 如果一个方法可能抛出多个受检异常,则不要使用“快捷方式”声明这个方法会抛出这些异常类的超类,如永远不要声明一个方法“throws Exception”, 或者更糟糕的是声明这个方法“throws Throwable”。因为这样的声明不仅没... 阅读全文
posted @ 2015-06-02 14:41 wangliyue 阅读(251) 评论(0) 推荐(0)
摘要: 想想这样一种情况:方法B抛出了一个受检的异常 ,那么方法A在内部调用方法B时,面对方法B抛出的受检异常,可以选择继续抛出向上传播这个异常, 也可以捕获这个异常进行处理。究竟是向上传播抛出,还是捕获处理呢??? 有一个指导原则是:抛出与抽象想对应的异常。 例如如果方法B抛出了NoSuchElementException这个受检异常,然而在方法A中调用方法B时,根据方法A中的逻辑,当遇到NoSuchE... 阅读全文
posted @ 2015-06-02 11:29 wangliyue 阅读(1010) 评论(0) 推荐(0)
摘要: 专家级程序员与缺乏经验的程序员的一个最主要的区别在于,专家追求并且通常也能够实现高度的代码重用。代码重用是值得提倡的。 这是一条通用的规则,异常也不例外。Java平台类库提供了一组基本的未受检的异常,它们满足了绝大多数API的异常抛出需要。 最经常被重用的异常时 IllegalArgumentException。当调用者传递的参数值不合适的时候,往往就会抛出这个异常。例如,假设 一个参数代表了“某... 阅读全文
posted @ 2015-06-02 10:48 wangliyue 阅读(265) 评论(0) 推荐(0)