20150704 星期六 北京
专家程序员和普通程序员主要区别在于专家程序员追求并且通常能够实现高度的代码复用.代码复用的通用的规则,异常亦是.
重用现有异常最重要的好处是使你的API容易学习和使用;其次可读性好;最后是异常类越少,意味内存印记越少,装载这些类的开销少(最不重要的一点).
传递参数不合适的时候,使用IllegalArgumentException.比如需要传递年龄值,却给个负数,就会抛出此异常.
传递参数的对象状态不合适,却非法使用此对象,就会抛出IllegalStateException比如某个对象没有被正确初始化,调用者企图使用此对象,就会抛出此异常;
所有的错误都可以归结为非法参数和非法状态.
如果不允许使用null值,却传入null,习惯抛出NullPointerException,而不是IllegalArgumentException;
数据下标越界,通常抛出IndexOutOfBoundsException,而不是参数错误的IllegalArgumentException;
如果对象被设计为专用于单线程或者与外部同步机制配合使用,发现它正在(已经)被并发修改抛出ConcurrentModificationException.
如果对象不支持请求的操作,就抛UnsupportedOperationException异常.如果接口的具体实现该接口所定义的多个可选操作,它就可以抛出此异常.比如,对于只支持追求操作的List实现,如果有人试图从列表中删除元素,就会抛出此异常.
常见异常 使用场合
IllegalArgumentException 非null参数值不正确
IllegalStateException 对方法调用而言,对象状态错误
NullPointerException 不允许null情况,传递参数null
IndexOutOfBoundsException 下标参数越界
ConcurrentModificationException 禁止并发下修改,检测对象被修改
UnsupportedOperationException 对象不支持用户请求的方法
如果某个异常满足你的需要,就使用它.不过确保抛出的异常条件和该异常的文档描述条件一致.重用必须建立在语义的基础上,而不是名称基础上.
要清楚选择重用哪个异常并不总是那么精确,上面表格使用场合并不是互斥的.