编码规范的目的:使自己的代码 易读、易扩展、易维护、高性能。

代码规范

  • 变量名要清晰且简短。能用一个单词就不要使用两个。上下文会帮助理解。

  • 一个方法代码不能超过40行。

  • 类、成员变量的注释信息必须符合Java doc规范。

  • 一般情况下,有 if 必须有 else,保证严谨,代码漏掉任何一种可能出现的情况,都可能产生意想不到的灾难性结果。且注意不要扩大条件作用域。

  • DAO 中方法命名规范:查实体,findXXX;查数量, countXXX。

  • 提交代码前,清除不必要的注释和输出信息,并检查代码是否清晰,严谨,易读和简洁。

  • 方法要有明确的输入和输出。不要依赖 引用变量 的特性,因为那样的方法不清晰。

  • 方法中的变量,尽量只在一处变化,方便后期维护。

  • 能减少依赖则减少依赖。耦合的代码,后期很难拆分。

  • 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。示例代码:

  1. Iterator<String> it = a.iterator();
  2. while (it.hasNext()) {
  3. String temp = it.next();
  4. if (删除元素的条件) {
  5. it.remove();
  6. }
  7. }
  • Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。推荐使用java.util.Objects#equals。

  • 表达异常的分支时,少用if-else方式,这种方式可以改写成:

      1. if (condition) {
      2. ...
      3. return obj;
      4. }
      5. // 接着写 else 的业务逻辑代码;
  • DRY,Don’t Repeat Yourself。如果随意复制粘贴代码,以后修改时,则需要修改所有的副本,容易遗漏。必要时抽取共性方法,或者抽象公共类,甚至是共用模块。

  • 如果能预料到可能的扩展,必须把代码写的可配置,方便修改。比如签到功能,正常使用时周期为一天。但是测试时就不能按照周期为1天来测试,这个周期必须方便修改以配合测试。

异常处理

  • 能通过预先检查进行规避的异常,就不要使用try …… catch….. 。
  • 尽量try 少量的代码,对于稳定的代码要放在try外面。
  • 分清楚异常类型,再进行对应的处理。捕获的和抛出的异常必须完全匹配。

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

数据库

  • 如果字段为非负数,必须使用unsigned。无符号值可以避免误存负数,且精确了表示范围。

  • 数据库字段名的修改代价很大,因为无法进行预发布,所以字段名需要慎重考虑。

  • 表名不使用复数名词。

  • 小数类型为decimal,禁止使用float和double。

  • 如果存储的字符串长度几乎相等,使用char定长字符串类型。

  • 合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

  • EXPLAIN 结果中 type 类型由优到差顺序:consts、ref、range、index。

  • 建立组合索引时,区分度最高的放在最左边。

  • 防止因字段类型不同造成的隐式转换,导致索引失效。