长春网页制作建站,ui设计师网站,专门做产品推广ppt的网站,网站被降权会发生什么影响吗转载自 阿里巴巴对Java编程【异常处理】的规约 异常处理 1. 【强制】 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避#xff0c;而不应该通过 catch 来处理#xff0c;比如#xff1a; IndexOutOfBoundsException #xff0c; NullPointerException 等…转载自 阿里巴巴对Java编程【异常处理】的规约 异常处理 1. 【强制】 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避而不应该通过 catch 来处理比如 IndexOutOfBoundsException NullPointerException 等等。 说明无法通过预检查的异常除外如在解析一个外部传来的字符串形式数字时通过 catchNumberFormatException 来实现。 正例 if (obj ! null) {...} 反例 try { obj.method() } catch (NullPointerException e) {...} 2. 【强制】异常不要用来做流程控制条件控制因为异常的处理效率比条件分支低。 3. 【强制】对大段代码进行 try - catch 这是不负责任的表现。 catch 时请分清稳定代码和非稳定代码稳定代码指的是无论如何不会出错的代码。对于非稳定代码的 catch 尽可能进行区分异常类型再做对应的异常处理。 4. 【强制】捕获异常是为了处理它不要捕获了却什么都不处理而抛弃之如果不想处理它请将该异常抛给它的调用者。最外层的业务使用者必须处理异常将其转化为用户可以理解的内容。 5. 【强制】有 try 块放到了事务代码中 catch 异常后如果需要回滚事务一定要注意手动回滚事务。 6. 【强制】 finally 块必须对资源对象、流对象进行关闭有异常也要做 try - catch 。 说明如果 JDK 7 及以上可以使用 try - with - resources 方式。 7. 【强制】不能在 finally 块中使用 return finally 块中的 return 返回后方法结束执行不会再执行 try 块中的 return 语句。 8. 【强制】捕获异常与抛异常必须是完全匹配或者捕获异常是抛异常的父类。 说明如果预期对方抛的是绣球实际接到的是铅球就会产生意外情况。 9. 【推荐】方法的返回值可以为 null 不强制返回空集合或者空对象等必须添加注释充分说明什么情况下会返回 null 值。调用方需要进行 null 判断防止 NPE 问题。 说明本手册明确防止 NPE 是调用者的责任。即使被调用方法返回空集合或者空对象对调用者来说也并非高枕无忧必须考虑到远程调用失败、序列化失败、运行时异常等场景返回null 的情况。 10. 【推荐】防止 NPE 是程序员的基本修养注意 NPE 产生的场景 1 返回类型为基本数据类型return 包装数据类型的对象时自动拆箱有可能产生 NPE。 反例 public int f() { return Integer 对象} 如果为 null 自动解箱抛 NPE 。 2 数据库的查询结果可能为 null 。 3 集合里的元素即使 isNotEmpty 取出的数据元素也可能为 null 。 4 远程调用返回对象时一律要求进行空指针判断防止 NPE 。 5 对于 Session 中获取的数据建议 NPE 检查避免空指针。 6 级联调用 obj . getA() . getB() . getC() 一连串调用易产生 NPE 。 正例使用 JDK8 的 Optional 类来防止 NPE 问题。 11. 【推荐】定义时区分 unchecked / checked 异常避免直接抛出 new RuntimeException() 更不允许抛出 Exception 或者 Throwable 应使用有业务含义的自定义异常。推荐业界已定义过的自定义异常如 DAOException / ServiceException 等。 12. 【参考】在代码中使用“抛异常”还是“返回错误码”对于公司外的 http / api 开放接口必须使用“错误码” 而应用内部推荐异常抛出 跨应用间 RPC 调用优先考虑使用 Result 方式封装 isSuccess()方法 、“错误码”、“错误简短信息”。 说明关于 RPC 方法返回方式使用 Result 方式的理由 1 使用抛异常返回方式调用方如果没有捕获到就会产生运行时错误。 2 如果不加栈信息只是 new 自定义异常加入自己的理解的 error message 对于调用端解决问题的帮助不会太多。如果加了栈信息在频繁调用出错的情况下数据序列化和传输的性能损耗也是问题。 13. 【参考】避免出现重复的代码 Don ’ t Repeat Yourself 即 DRY 原则。 说明随意复制和粘贴代码必然会导致代码的重复在以后需要修改时需要修改所有的副本容易遗漏。必要时抽取共性方法或者抽象公共类甚至是组件化。 正例一个类中有多个 public 方法都需要进行数行相同的参数校验操作这个时候请抽取 private boolean checkParam(DTO dto) {...}