阿里巴巴Java 开发手册编程规约之注释规约

1. 【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用//xxx 方式。
说明: 在 IDE 编辑窗口中, Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释; 在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

2. 【强制】所有的抽象方法(包括接口中的方法) 必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
说明: 对子类的实现要求,或者调用注意事项,请一并说明。
3. 【强制】所有的类都必须添加创建者和创建日期。
4. 【强制】方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释,注意与代码对齐。
5. 【强制】所有的枚举类型字段必须要有注释,说明每个数据项的用途。
6. 【推荐】与其“半吊子”英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。
反例: “TCP 连接超时”解释成“传输控制协议连接超时”,理解反而费脑筋。
7. 【推荐】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。
说明: 代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。
8. 【参考】合理处理注释掉的代码。 在上方详细说明,而不是简单的注释掉。 如果无用,则删除。
说明: 代码被注释掉有两种可能性: 1) 后续会恢复此段代码逻辑。 2) 永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码) 
9. 【参考】对于注释的要求:第一、能够准确反应设计思想和代码逻辑; 第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路; 注释也是给继任者看的,使其能够快速接替自己的工作。
10. 【参考】好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的
一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。
反例:
// put elephant into fridge
put(elephant, fridge);
方法名 put,加上两个有意义的变量名 elephant 和 fridge,已经说明了这是在干什么,语义清晰的代码不需要额外的注释。
11. 【参考】特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。
1) 待办事宜(TODO) :(标记人,标记时间, [预计处理时间])
表示需要实现,但目前还未实现的功能。这实际上是一个 Javadoc 的标签,目前的 Javadoc
还没有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个 Javadoc 标签) 。
2) 错误,不能工作(FIXME) :(标记人,标记时间, [预计处理时间])
在注释中用 FIXME 标记某代码是错误的,而且不能工作,需要及时纠正的情况。

1. 【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
说明: 不要在方法体内定义: Pattern pattern = Pattern.compile(规则);
2. 【强制】 velocity 调用 POJO 类的属性时,建议直接使用属性名取值即可, 模板引擎会自动按规范调用 POJO 的 getXxx(),如果是 boolean 基本数据类型变量(boolean 命名不需要加 is前缀) ,会自动调用 isXxx()方法。
说明: 注意如果是 Boolean 包装类对象,优先调用 getXxx()的方法。
3. 【强制】后台输送给页面的变量必须加$!{var}——中间的感叹号。
说明: 如果 var=null 或者不存在,那么${var}会直接显示在页面上。
4. 【强制】注意 Math.random() 这个方法返回是 double 类型,注意取值的范围 0≤x<1(能够取到零值,注意除零异常) , 如果想获取整数类型的随机数,不要将 x 放大 10 的若干倍然后取整,直接使用 Random 对象的 nextInt 或者 nextLong 方法。
5. 【强制】获取当前毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime();
说明: 如果想获取更加精确的纳秒级时间值, 使用 System.nanoTime()的方式。在 JDK8 中,针对统计时间等场景,推荐使用 Instant 类。
6. 【推荐】 不要在视图模板中加入任何复杂的逻辑。
说明: 根据 MVC 理论,视图的职责是展示,不要抢模型和控制器的活。
7. 【推荐】 任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。
8. 【推荐】对于“明确停止使用的代码和配置”,如方法、变量、类、配置文件、动态配置属性等要坚决从程序中清理出去,避免造成过多垃圾。

时间: 2024-11-11 05:57:22

阿里巴巴Java 开发手册编程规约之注释规约的相关文章

阿里巴巴Java 开发手册编程规约之异常日志

(一)异常处理1. [强制]Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应该通过 catch 来处理,比如: IndexOutOfBoundsException, NullPointerException 等等.说明: 无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过 catchNumberFormatException 来实现.正例: if (obj != null) {...}反例: try { obj.method()

阿里巴巴Java 开发手册编程规约之工程结构

(一)应用分层1. [推荐]图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层:可直接封装 Service 方法暴露成 RPC 接口: 通过 Web 封装成 http 接口: 进行网关安全控制. 流量控制等.终端显示层:各个端的模板渲染并执行显示的层. 当前主要是 velocity 渲染, JS 渲染,JSP 渲染,移动端展示等.Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简

阿里巴巴Java 开发手册编程规约之MySQL 数据库

(一)建表规约1. [强制]表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是, 0 表示否) .说明: 任何字段如果为非负数,必须是 unsigned.正例: 表达逻辑删除的字段名 is_deleted, 1 表示删除, 0 表示未删除.2. [强制]表名.字段名必须使用小写字母或数字, 禁止出现数字开头,禁止两个下划线中间只出现数字.数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑.正例: getter_

阿里巴巴Java 开发手册编程规约之命名风格

1.[强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.这两个符号有特殊用途,代理类等~反例:_name/__name/$Object/name_/name$/Object$2.[强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式.说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意,即使纯拼音命名方式也要避免采用.正例:alibaba/taobao/youku/hangzhou 等国际通用的名称,可视同英文.反例:DaZheProm

阿里巴巴Java 开发手册编程规约之控制语句

1. [强制]在一个 switch 块内,每个 case 要么通过 break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止: 在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有.2. [强制]在 if/else/for/while/do 语句中必须使用大括号. 即使只有一行代码,避免使用单行的形式: if (condition) statements;3. [推荐] 表达异常的分支时, 少用 if-else 方式,

阿里巴巴Java 开发手册编程规约之OOP规约

1. [强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可.2. [强制]所有的覆写方法,必须加@Override 注解.说明: getObject()与 get0bject()的问题.一个是字母的 O,一个是数字的 0,加@Override可以准确判断是否覆盖成功.另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错.3. [强制] 相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object.说明: 可变

阿里巴巴Java 开发手册编程规约之并发处理

1. [强制] 获取单例对象需要保证线程安全,其中的方法也要保证线程安全.说明: 资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯. 正例: public class TimerTaskThread extends Thread { public TimerTaskThread() { super.setName("TimerTaskThread"); ... } 3. [强制]线程资源必须通过线程池提供,不允许在应用中

阿里巴巴Java 开发手册编程规约之集合处理

1. [强制] 关于 hashCode 和 equals 的处理,遵循如下规则:1) 只要重写 equals,就必须重写 hashCode.2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法.3) 如果自定义对象做为 Map 的键,那么必须重写 hashCode 和 equals.说明: String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作为 key

阿里巴巴Java 开发手册编程规约之常量定义

1. [强制]不允许任何魔法值(即未经定义的常量) 直接出现在代码中.反例: String key = "Id#taobao_" + tradeId;cache.put(key, value);2. [强制] long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字1 混淆,造成误解.说明: Long a = 2l; 写的是数字的 21,还是 Long 型的 2?3. [推荐]不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护.如:缓存相