effective-java-九

异常

第57条:只针对异常的情况才使用异常

第58条:对可恢复的情况使用受检异常,对编程错误使用运行时的异常

java 三种可抛出结构(throwable): 受检异常,运行时异常,错误

第59条:避免不必要的使用受检的异常

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

异常 使用场合
IllegalArgumentException 非null的参数值不正确
IllegalStateException 对于方法调用而言,对象状态不合适
NullPointerException 在禁止使用null的情况下参数值为null
IndexOutOfBoundsException 下标参数值越界
ConcurrentModificationException 在禁止并发修改的情况下,检测到对象的并发修改
UnsupportOperationException 对象不支持用户请求的方法

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

高层的实现应该捕获底层的异常,同时抛出可以按照高层抽象进行解释的异常。这种做法被称为'异常转译'。
一种特殊的异常转译形式称为异常链,如果底层的异常对与调试高层异常的问题有帮助,使用异常链就合适。底层的异常被传到高层的异常,高层异常提供访问方法(`Throwable.getCause`)来获得底层异常