注:本文内容整理自《阿里java编码规范》,除“编程规约”外的其它规则。
异常处理
强制
1、Java类库中可以通过预检查方式规避的 RuntimeException不应该通过catch的方式来处理,如: IndexOutOfBoundsException,NullPointerException 等。说明:无法通过预检查的异常不在此列,比如,在解析字符串形式的数字时,可能存在数字格式错误,不得不通过 catch NumberFomatException 来实现。
2、异常不要用来做流程控制、条件控制。 说明:异常设计的初衷是解决程序运行中的各种意外情况,况且异常的处理效率比条件判断方式要低很多。
3、catch时请分清稳定代码和非稳定代码。稳定代码指的是无论如何都不会出错的代码。对于非稳定代码的 catch,尽可能在进行异常类型的区分后,再做对应的异常处理。 说明:对大段代码进行try-catch,将使程序无法根据不同的异常做出正确的应激反应,也不利于定位问题。
4、捕获异常是为了处理它,不要捕获了却什么都不处 理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。 最外层的业务使用者必须处理异常,将其转化为用户可以理解的内容。
5、有try块放到了事务代码中,catch异常后,如果需要回滚事务,一定要注意rollback事务。
6、 finally块必须对资源对象、流对象进行关闭操作, 如果有异常也要做try-catch操作。
7、不能在finally块中使用return。说明:当finally块中的return返回后方法结束执行,不会再执行try块中的return语句。
8、捕获异常与抛异常必须完全匹配,