白话阿里巴巴 Java 开发手册高级篇.pdfVIP

  • 4
  • 0
  • 约3.36万字
  • 约 36页
  • 2020-11-18 发布于广东
  • 举报
白话阿里巴巴Java开发手册高级篇 不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开 发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终 的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在 实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标 准等规范,并在实际工作中进行了应用和推广,收效颇丰,也总结了适合支付平台的技 术规范,由于阿里巴巴Java开发手册本身定位为规约和规范,语言简单、精炼,没有太 多的解读和示例,有些条款对于一般开发人员理解起来比较困难,本文借着阿里巴巴发 布的Java开发手册,详细解读Java平台下开发规范和标准的制定和实施,强调那些在开 发过程中需要重点关注的技术点,特别是解决某类已识别问题的模式和反模式。 异常处理 【强制】Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应 该通过 catch 来处理,比如: IndexOutOfBoundsException ,NullPointerException等等。 GitChat 说明: 无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过 catch NumberFormatException 来实现。 正例: if (obj != null) {…} 反例: try { obj.method() } catch (NullPointerException e) {…} 白话: 判空是一个永恒的话题,只要你不确定变量是否为空,都应该判空,否则后患无穷。 【强制】异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低。 白话: 禁止使用异常来封装业务逻辑,业务异常应该用错误码来表示,系统异常则使用Java原 生异常。 异常处理是通过异常表查询来实现的,肯定没有跳转语句性能高。 【强制】对大段代码进行 try-catch ,这是不负责任的表现。catch 时请分清稳定代码和非 稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进 行区分异常类型,再做对应的异常处理。 白话: 做事要直切主题,不能一概而论。 不能简单的catch Throwable ,然后打印日志,这是不负责任的表现,应该有针对的抓住 和处理异常。 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理 它,请 将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用 户可以理解的内容。 白话: 禁止吃掉异常,吃掉异常就是捕获异常什么都没做,也没抛出,这也是不负责任的表 现。 是在不能处理的异常抛出去,但是得让使用方知道这种情况,这是编程提供方契约的一 种方式。 【强制】有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手 动回滚事务。 白话: 我们基本采用声明式事务,出现异常需要回滚的情况,建议继续抛出异常让声明式事务 自动回滚,不建议代码中手工控制事务。 GitChat 【强制】finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch 。 说明:如 果 JDK7 及以上,可以使用 try-with-resources 方式。 白话: 永恒的资源关闭原则。 【强制】不能在 finally 块中使用 return ,finally 块中的 return 返回后方法结束执行,不会 再执行 try 块中的 return 语句。 白话: 确实会覆盖try块里面的return语句。 思维不混乱的话,没人会把return语句写在finally语句里。 【强制】捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。 如果预期对方抛的是绣球,实际接到的是铅球,就会产生意外情况。 白话: 异常处理后,让异常变得更小,而不是变大,大而化小,小而化了。 【推荐】方法的返回值可以为 null ,不强制返回空集合,或者空对象等,必须添加注释 充分 说明什么情况下会返回 null 值。调用方需要进行 null 判断防止 NPE 问题。 说明: 本规约明确防止 NPE 是调用者的责任。即使被调用方法返回空集合或者空对象, 对调用 者来说,也并非高枕无忧,必须考虑到远程调用失败,运行时异常等场景返回 null 的情况。 白话

文档评论(0)

1亿VIP精品文档

相关文档