Java 编码规范8(编程规约-注释规约与其它)

注释规约与其它


其它相关文章
Java 编码规范1(编程规约-命名风格)
Java 编码规范2(编程规约-常量定义)
Java 编码规范3(编程规约-代码格式)
Java 编码规范4(编程规约-OOP规约)
Java 编码规范5(编程规约-集合处理)
Java 编码规范6(编程规约-并发处理)
Java 编码规范7(编程规约-控制语句)
Java 编码规范8(编程规约-注释规约与其它)
Java 编码规范9(异常日志)
Java 编码规范10(单元测试)
Java 编码规范11(安全规约)
Java 编码规范12(MySQL-建表规约)
Java 编码规范13(MySQL-索引规约)
Java 编码规范14(MySQL-SQL语句与ORM映射)
Java 编码规范15(工程结构)


  1. [强制] 类属性类方法的注释必须使用Javadoc规范,使用/**内容*/格式,不得使用// xxx方式。

    • 说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。
  2. [强制] 所有的抽象方法(包括接口中的方法)必须要用Javadoc注释,除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。

    • 说明:对子类的实现要求,或者调用注意事项,请一并说明。
  3. [强制] 所有的类都必须添加创建者和创建日期。

  4. [强制] 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释,注意与代码对齐。

  5. [强制] 所有的枚举类型字段必须要有注释,说明每个数据项的用途。

  6. [强制] 与其“半吊子”英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。

    • 反例:“TCP连接超时”解释成“传输控制协议连接超时”,理解反而费脑筋。
  7. [推荐] 代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。

    • 说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。
  8. [参考] 谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。

    • 说明:代码被注释掉有两种可能性:
      • 后续会恢复此段代码逻辑。
      • 永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。
  9. [参考] 对于注释的要求:

    1. 能够准确反应设计思想和代码逻辑;
    2. 能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。
      • 完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路
      • 注释也是给继任者看的,使其能够快速接替自己的工作。
  10. [参考] 好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。

    • 反例:

      // put elephant into fridge
      put(elephant, fridge);
      • 方法名put,加上两个有意义的变量名elephant和fridge,已经说明了这是在干什么,语义清晰的代码不需要额外的注释。
  11. [参考] 特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。

    • 待办事宜(TODO):( 标记人,标记时间,[预计处理时间])
      • 表示需要实现,但目前还未实现的功能。
      • 这实际上是一个Javadoc的标签,目前的Javadoc还没有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个Javadoc标签)。
    • 错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])
      • 在注释中用FIXME标记某代码是错误的,而且不能工作,需要及时纠正的情况。
  12. [强制] 在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。

    • 不要在方法体内定义:Pattern pattern = Pattern.compile(规则);
  13. [强制] velocity调用POJO类的属性时,建议直接使用属性名取值即可,模板引擎会自动按规范调用POJO的getXxx(),如果是boolean基本数据类型变量(boolean命名不需要加is前缀),会自动调用isXxx()方法。

    • 注意如果是Boolean包装类对象,优先调用getXxx()的方法。
  14. [强制] 后台输送给页面的变量必须加$!{var}——中间的感叹号。

    • 如果var=null或者不存在,那么${var}会直接显示在页面上。
  15. [强制] 注意 Math.random() 这个方法返回是double类型,注意取值的范围 0≤x<1(能够取到零值,注意除零异常)。

    • 如果想获取整数类型的随机数,不要将x放大10的若干倍然后取整,直接使用Random对象的nextInt或者`nextLong方法。
  16. [强制] 获取当前毫秒数System.currentTimeMillis(); , 而不是new Date().getTime();

    • 如果想获取更加精确的纳秒级时间值,使用ystem.nanoTime()的方式。在JDK8中,针对统计时间等场景,推荐使用Instant类。
  17. [推荐] 不要在视图模板中加入任何复杂的逻辑。

    • 根据MVC理论,视图的职责是展示,不要抢模型和控制器的活。
  18. [推荐] 任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。

  19. [推荐] 及时清理不再使用的代码段或配置信息。

    • 说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。
    • 正例:对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)来说明注释掉代码的理由。

猜你喜欢

转载自blog.csdn.net/cangely/article/details/79838479
今日推荐