阿里巴巴Java开发手册 梳理笔记 - RuntimeException 应预先检查进行规避
规约内容:
2.1 异常处理
1. 【强制】 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应该
通过 catch 来处理,比如: IndexOutOfBoundsException , NullPointerException 等等。
说明:无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过 catch
NumberFormatException 来实现。
正例: if (obj != null) {...}
反例: try { obj.method() } catch (NullPointerException e) {...}
扩展资料
在 Exception 中,unchecked 异常是运行时异常,它们都继承自 RuntimeException, 不需要程序进行显式的捕捉和处理,
unchecked 异常可以进一步细分为3 类:
可预测异常(Predicted Exception)
常 见 的 可预 测 异 常 包 括 IndexOutOfBoundsException、NullPointerException 等, 基 于对 代 码 的 性 能 和 稳定性要求,此类异常不应该被产生或者抛出,而应该提前做好边界检查、空指针判断等处理。显式的声明或者捕获此类异常会对程序的可读性和运行 效率产生很大影响。
需捕捉异常(Caution Exception)
例如在使用 Dubbo 框架进行 RPC 调用时 产生的远程服务超时异常 DubboTimeoutException,此类异常是客户端必须显式处理的异常,不能因服务端的异常导致客户端不可用,此时处理方案可以是重试或者降级处理等。
可透出异常 (Ignored Exception)
主要是指框架或系统产生的且会自行处理的异常,而程序无须关心。例如针对 Spring 框架中抛出的 NoSuchRequestHa ndlingMethodException 异常,Spring 框架会自己完成异常的处理,默认将自身抛出的异常自动映射到合适的状态码,比如启动防护机制跳转到 404 页面。
常见的RuntimeException的子类
(1)ArithmeticException 算术异常
引发原因: 分母不能为0
如何避免:除之前,先判断分母
(2)ClassCastException 类型转换异常
(3)IllegalArgumentException 非法参数异常
具备子类:NumberFormatException 数字格式异常
引起原因:参数格式不合法
如何避免:通过某些技术,保证参数文本的有效格式(正则表达式,使用特殊字符制约格式)[0-9][a-z]
(4)IndexOutOfBoundsException 下标越界异常
具备两个子类:
ArrayIndexOutOfBoundsException 数组下标越界异常
StringIndexOutOfBoundsException 字符串下标越界异常
引起原因:下标超过有效边界 [0, ds.length-1]
如何避免:操作下标过程中避免越界
(5)NullPointerException 空指针异常
引起原因:调用null引用的成员 属性或 方法
如何避免:调用之前先判断是否为空
资料摘取自:http://f.dataguru.cn/java-338689-1-1.html