与其“半吊子”英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可【反例:“TCP 连接超时”解释成“传输控制协议连接超时”,理解反而费脑筋。】
代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。【代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义】
谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。【说明:代码被注释掉有两种可能性:1)后续会恢复此段代码逻辑。2)永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库已然保存了历史代码)】
对于注释的要求:第一、能够准确反映设计思想和代码逻辑;第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。
好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担【语义清晰的代码不需要额外的注释。】
特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。
1)待办事宜(TODO):(标记人,标记时间,[预计处理时间])表示需要实现,但目前还未实现的功能。这实际上是一个Javadoc的标签,目前的Javadoc还没
有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个Javadoc标签)。2)错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])
在注释中用FIXME标记某代码是错误的,而且不能工作,需要及时纠正的情况。
在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度【说明:不要在方法体内定义:Pattern pattern = Pattern.compile(“规则”);】
注意Math.random()这个方法返回是double类型,注意取值的范围0≤x<1(能够取到零值,注意除零异常),如果想获取整数类型的随机数,不要将x放大10的若干倍然后取整,直接使用Random对象的nextInt或者nextLong方法。
获取当前毫秒数System.currentTimeMillis();而不是new Date().getTime();【说明:如果想获取更加精确的纳秒级时间值,使用System.nanoTime()的方式。在JDK8中,针对统计时间等场景,推荐使用Instant类。】
日期格式化时,传入pattern中表示年份统一使用小写的y。【说明:日期格式化时,yyyy表示当天所在的年,而大写的YYYY代表是 week in which year(JDK7之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。另外需要注意:表示月份是大写的M,表示分钟则是小写的m,24小时制的是大写的H,12小时制的则是小写的h 。正例:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");】
任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存
及时清理不再使用的代码段或配置信息【说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。正例:对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)来说明注释掉代码的理由】