命名风格
- 【强制】 Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
正例: "test".equals(object);
反例: object.equals("test");
说明: 推荐使用 java.util.Objects#equals(JDK7 引入的工具类)
正例:
定义整形数组
int[] arrayDemo = new int[8];
定义String数组
private String[] patterns = new String[8];
- 判断字符串相等或不相等,必须使用equal()方法,不要用==或者!=(因为,此时的String的trim()方法不可用)
- 对集合操作时,if (list != null && list.size > 0) ,顺序不能变,先判断是否为null,然后才能取list的大小,否则报错
- 【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加) ,保持代码的简洁性,并加上有效的 Javadoc 注释
正例:
int size();
- 【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。 正例:应用工具类包名为com.alibaba.ai.util、类名为MessageUtils(此规则参考spring的框架结构)
- Service/DAO层方法命名规约
1) 获取单个对象的方法用get做前缀。
2) 获取多个对象的方法用list做前缀,复数形式结尾如:listObjects。
3) 获取统计值的方法用count做前缀。
4) 插入的方法用save/insert做前缀。
5) 删除的方法用remove/delete做前缀。
6) 修改的方法用update做前缀。
1) 数据对象:xxxDO,xxx即为数据表名。
2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
3) 展示对象:xxxVO,xxx一般为网页名称。
4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
- 【强制】单行字符数限不超过 120 个,超出需要换行时 个,超出需要换行时 遵循如下原则: 1) 第二行相对一缩进 4个空格,从第三行开始不再继续缩进参考示例。 2) 运算符与下文一起换行。 3) 方法调用的点符号与下文一起换行。 4) 方法调用中的多个参数需要换行时,在逗号后进行。 5) 在括号前不要换行,见反例。
集合处理
- 【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
}
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}
常量定义
- 【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。 反例:String key = “Id#taobao_” + tradeId; cache.put(key, value);
- 【强制】在long或者Long赋值时,数值后使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。 说明:Long a = 2l; 写的是数字的21,还是Long型的2?
- 【推荐】不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。 说明:大而全的常量类,杂乱无章,使用查找功能才能定位到修改的常量,不利于理解和维护。
正例:缓存相关常量放在类CacheConsts下;系统配置相关常量放在类ConfigConsts下。
异常处理
- 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容
- 【强制】有try块放到了事务代码中,catch异常后,如果需要回滚事务,一定要注意手动回滚事务
- 【强制】finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch。 说明:如果JDK7及以上,可以使用try-with-resources方式
- 【强制】不要在 finally块中使用 return。 说明: finally块中的 return返回后方法结束执行 ,不会再执行try块中的 return语句