阿里巴巴-8

1.Java类库中定义的一类RuntimeException可以通过预先检查进行规避,不应该通过catch来处理,比如空指针异常,数组边界越界异常等。

2.异常不要用来做流程控制,条件控制。因为异常的处理效率比条件还要低

3.对大段代码进行try-catch是不负责的,需要区分稳定代码和非稳定代码,对非稳定代码的catch尽量区分异常类型,在做对应的异常处理

4.捕获异常是为了处理它,不要捕获了却什么也不处理而抛弃之,如果不想处理,将异常抛给它的调用者,业务使用者,必须处理异常,将其转化为用可以理解的内容

5.try块放到了事务代码中,catch异常后,如果需要回滚,一定要手动回滚事务。

6.finally块必须对资源对象、流对象进行关闭。

7.不能在finally块中使用return,因为finally块中return之后方法结束执行,不会再执行try块中的return语句

8.捕获异常和抛异常必须是完全匹配,或者是捕获异常是抛异常的父类。

9.方法的返回值可以为null,不强制返回空集合,或者空对象等,必须添加注释说明什么情况下会返回null值,调用方需要进行null判断防止NPE问题

   必须考虑到远程调用失败、序列化失败、运行时异常时返回null情况。

10.防止NPE,注意NPE产生的场景

    1)返回类型为基本数据类型,return包装数据类型的对象时,自动拆箱有可能产生。

    2)数据库查询结果可能为null

    3)集合里的元素即使isNotEmpty,取出的数据元素也可能为null

    4)远程调用返回的对象,一律要求进行空指针判断,防止NPE

    5)对于Session中获取的数据,建议NPE检查,避免空指针

    6)级联调用obj.getA().getB().getC();一连串调用,易产生NPE

11.定义时区分unchecked/check异常,避免直接抛出 newRuntimeException(),更不允许抛出Exception或者Throwable,应使用有业务含义的自定义异常。(DAOException,ServiceException).

12.对于公司外的http/api开放接口必须使用“错误码”;而应用内部推荐异常抛出;跨应用间RPC调用优先考虑使用Result方式,封装isSuccess()方法、错误码、错误简短信息。

相关文章
相关标签/搜索