阿里巴巴java编程规约

码出高效,码出质量

以Java开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。

编程规范

命名风格

  • 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长
  • 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
  • POJO类中布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。
  • 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

常量定义

  • 不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。
  • 常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。

代码分格

  • 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格;而左大括号前需要空格
  • 注释的双斜线与注释内容之间有且仅有一个空格
  • 外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。
  • Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
  • 所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。
  • 关于基本数据类型与包装数据类型的使用标准
  • 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。
  • POJO类必须写toString方法。使用IDE中的工具:source> generatetoString时,如果继承了另一个POJO类,注意在前面加一下super.toString。
  • 使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。
  • 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
  • 不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。

异常日志

单元测试

安全规约

MySQL数据库

表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)。

表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。说明:MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。

表名不使用复数名词

禁用保留字

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

工程机构