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

        专家级程序员与缺乏经验的程序员一个最主要的区別在于,专家追求并且通常也能够实现髙度的代码重用。代码重用是值得提倡的,这是一条通用的规则,异常也不例外。java平台类库提供了一组基本的未受检的异常 ,它们满足了绝大多数API的异常拋出需要。本条目中,我们将讨论这些常见的可重用异常。

        重用现在的异常有多方面的好处。其中最主要的好处是,它使你的API更加容易学习和使用,因为它与程序员已经熟悉的习惯用法是一致的.第二个好处是,对于用到这些API的程序而言,它们的可读性会更好,因为它们不会出现很多程序员不熟悉的异常。最后(也不是最重要的)一点是,异常类越少,意味着内存印迹(footprint)就越小,装载这些类的时间开销也越少。

      最经常被重用的异常是IllegalArgumentException。当调用者传递的参数值不合适的时候,往往就会抛出这个异常。例如,假设一个参数代表了“某个动作的重复次数”,如果程序员给这个参数传递了一个负数,就会抛出这个异常。

        另一个经常被重用的异常是IllegalStateExccption。如果因为接收对象的状态而使调用非法,通常就会抛出这个异常。例如,如果在某个对象被正确地初始化之前,调用者就企图使用这个对象,就会抛出这个异常。

        可以这么说,所有错误的方法调用都可以被归结为非法参数或者非法状态,但是,其他还有一些标准异常也被用于某些特定情况下的非法参数和非法状态。如果调用者在某个不允许null值的参数中传递了null,习惯的做法就是抛出NullPointerException,而不是IllegalArgumentException。同样地,如果调用者在表示序列下标的参数中传递了越界的值,应该抛出的就是IndexOutOfBoundsException,而不是IllegalArgumentException

       另一个值得了解的通用异常是ConcurremModificationException。如果一个对象被设计为专用于单线程或者与外部同步机制配合使用,一旦发现它正在(或已经)被并发地修改,就应该抛出这个异常。

        最后一个值得注意的通用异常是UnsupportedOperationException。如果对象不支持所请求的操作,就会抛出这个异常。与本条目中讨论的其他异常相比,它很少用到,因为绝大多数对象都会支持它们实现的所有方法。如果接口的具体实现没有实现该接口所定义的一个或者多个可选操作,它就可以使用这个异常。例如,对于只支持追加操作的List实现,如果有人试图从列表中刪除元素,它就会抛出这个异常。

以下概括了最常见的可重用异常。

异 常                                    使用场合

IllegalArgumentExccplion 非null的参数值不正确

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

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

IndexOutOfBoundsException 下标参败值越界

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

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

        虽然它们是Java平台类库中迄今为止最被重用的异常,但是,在条件许可的情况下,其他的异常也可以被重用。例如,如果要实现诸如复数或者有理数之类的算术对象,也可以重用ArithmeticException和NumberFormatException。如果某个异常能够满足你的需要,就不要犹像,使用就是,不过,一定要确保抛出异常的条件与该异常的文档中描述的条件一致。这种重用必须边立在语义的基础上,而不是建立在名称的基础之上。而且,如果希望稍微增加更多的失败-捕获(failure-capture)信息(见第63条),可以放心地把现有的异常进行子类化。

        最后,一定要清楚,选择重用哪个异常并不总是那么精确,因为上表中的“使用场合”并不是相互排斥的。例如,考虑表示一副纸牌的对象。假设有个处理发牌操作的方法,它的参数是发一手牌的纸牌张数。假设调用者在这个参数中传递的值大于整副纸牌的剩余张数。这种情形既可以被解释为IllegalArgurnemException(handSize参数的值太大),也可以被解释为IllegalStateException(相对于客户的请求而言,纸牌对象包含的纸牌太少)。在这个例子中,感觉IllegalArgumemException要好一些,不过,这里并没有严格的规则。

你可能感兴趣的:(第60条:优先使用标准的异常)