第10章 第72条 第73条

第72条:优先使用标准的异常

重用标准异常好处:
1.它使API更易于学习和使用,因为它与程序员已经熟悉的习惯用法一致
2.它们的可读性会更好,因为它们不会出现很多程序员不熟悉的异常
3.异常类越少,意味着内存占用就越小,装载这些类的时间开销也越少

不要直接重用Exception、RuntimeException、Throwable或者Error。对待这些类要像对象抽象类一样。你无法可靠的测试这些异常,因为它们是一个方法可能抛出的其他异常的超类。

如果某个异常能够满足你的需求,就不要犹豫,使用就是,不过一定要确保抛出的异常与该异常的文档中描述的条件一致。

第73条:抛出与抽象对应的异常

更高层的实现应该捕获底层的异常,同时抛出可以按照高层抽象进行解析的异常。

public E get(int index) {
    ListIterator<E> i = listIterator(index); 
    try {
        return i.next();
    } catch (NoSuchElementException e) {
        throw new IndexOutOfBoundsException("Index: " + index); 
    }
}

一种特殊的异常转译形式称为异常链,如果底层的异常对于调试导致高层异常的问题非常有帮助,使用异常链就很合适。

try {
    ... // Use lower-level abstraction to do our bidding
} catch (LowerLevelException cause) { 
    throw new HigherLevelException(cause);
}

大多数标准的异常都有支持链的构造器。对于没有支持链的异常,可以利用Throwable的initCause方法设置原因

class HigherLevelException extends Exception { 
    HigherLevelException(Throwable cause) {
        super(cause); 
    }
}

尽管异常转译与不加选择地从底层传递异常地做法相比有所改进,但是也不能滥用它。如有可能,处理来自低层异常地最好做法是,在调用低层方法之前确保它们会成功执行,从而避免它们抛出异常。有时候,可以在给低层传递参数之前,检查更高层方法参数地有效性,从而避免低层方法抛出异常。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果方法抛出的异常与它所执行的任务没有明显的联系,这种情形物会使人不知所措。当方法传递由低层抽象抛出的异常时,往往...
    呼天阔阅读 1,037评论 0 0
  • 如果方法抛出的异常与它所执行的任务没有明显的联系,这种情形将会使人不知所措。当方法传递由底层抽象抛出的异常时,往往...
    taogan阅读 227评论 0 0
  • 第五十七条、只针对异常的情况才使用异常 不要优先使用基于异常的模式:因为异常机制的设计初衷是用于不正常的情况,所以...
    Timorous阅读 678评论 0 1
  • 异常机制可以使程序中异常处理代码和正常业务代码分离,提高程序的可读性、可靠性和可维护性。 1.只针对异常的情况才使...
    塞外的风阅读 685评论 0 0
  • 1.异常的定义 在《java编程思想》中这样定义异常:阻止当前方法或作用域继续执行的问题。 2.异常的体系 在Ja...
    打不过猫的鱼阅读 1,652评论 0 0