一.编码规约
(二) 常量定义
1.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
2.不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护,分类:缓存相关常量放在类 CacheConsts 下 ; 系统配置相关常量放在类 ConfigConsts 下。
3.long 或者 Long 初始赋值时,使用大写的 L ,不能是小写的 l ,小写容易跟数字 1 混淆,造成误解。
2.抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类 命名以它要测试的类的名称开始,以 Test 结尾。
3.杜绝完全不规范的缩写,避免望文不知义,反例:AbstractClass“缩写”命名成 AbsClass;
4.接口类中的方法和属性不要加任何修饰符号(public 也不要加) : 接口方法签名:void f();
5.接口和实现类的命名有两套规则:
(1)对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口,内部 的实现类用 Impl 的后缀与接口区别。
(2)如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able 的形式)。 正例:AbstractTranslator 实现 Translatable。
6.Service/DAO 层方法命名规约
- 获取单个对象的方法用 get 做前缀。
- 获取多个对象的方法用 list 做前缀
- 获取统计值的方法用 count 做前缀。
- 插入的方法用 save(推荐)或 insert 做前缀
- 删除的方法用 remove(推荐)或 delete 做前缀。
- 修改的方法用 update 做前缀
7.领域模型命名规约
- 数据对象:xxxDO,xxx 即为数据表名。
- 数据传输对象: xxxDTO , xxx 为业务领域相关的名称
- 展示对象: xxxVO , xxx 一般为网页名称。
- POJO 是 DO / DTO / BO / VO 的统称,禁止命名成 xxxPOJO 。
(三)代码格式
1. if / for / while / switch / do 等保留字与括号之间都必须加空格
2.例子:
public static void main(String[] args) {
// 缩进 4 个空格
String say = "hello";
// 运算符的左右必须有一个空格
int flag = 0;
// 关键词 if 与括号之间必须有一个空格,括号内的 f 与左括号,0 与右括号不需要空格
if (flag == 0) {
System.out.println(say);
}
// 左大括号前加空格且不换行;左大括号后换行
if (flag == 1) {
System.out.println("world");
// 右大括号前换行,右大括号后有 else,不用换行
} else {
System.out.println("ok");
// 在右大括号后直接结束,则必须换行
}
}
3. // 注释内容,注意在 // 和注释内容之间有一个空格
4.单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
- 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进
- 运算符与下文一起换行
- 方法调用的点符号与下文一起换行
- 方法调用时,多个参数,需要换行时,在逗号后进行
- 在括号前不要换行
5.下例中实参的" a ",后边必须要有一个空格
method("a", "b", "c");
6.创建
long b = 4L;
float c = 5F;
7.方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。------ 加入空行区分
(四) OOP规约
1.相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object 。
public User getUsers(String type, Integer... ids) {...}
2.所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。 Integer
3.关于基本数据类型与包装数据类型的使用标准如下
- 所有的 POJO 类属性必须使用包装数据类型
- RPC 方法的返回值和参数必须使用包装数据类型
- 所有的局部变量使用基本数据类型。
4. serialVersionUID 不一致会抛出序列化运行时异常
5. POJO 类必须写 toString 方法
6.使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutOfBoundsExcepti