1. 命名规则
1.1 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾
1.2 POJO类中的任何布尔类型的变量,都不要加is前缀
1.3 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
eg:应用工具类包名为com.alibaba.ei.kunlun.aap.util、类名为MessageUtils
1.4 避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可理解性降低。
1.5 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
startTime/workQueue/nameList/TERMINATED_THREAD_COUNT
1.6 接口类中的方法和属性不要加任何修饰符号(public也不要加),保持代码的简洁性,并加上有效的Javadoc注释
/** 回车 写注释
/**
*
*
* @param name
* @param email
* @param phone
* @param address
* @param myNumber
* @param birthday
* @param accountNumber
* @param customerId
* @return
*/
List<AccountDTO> getAllAccounts(@Param("name") String name,
@Param("email") String email,
@Param("phone") String phone,
@Param("address") String address,
@Param("myNumber") String myNumber,
@Param("birthday") String birthday,
@Param("accountNumber") String accountNumber,
@Param("customerId") Long customerId);
1.7 接口和实现类的命名有两套规则
1)对于Service和DAO类,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
eg:CacheServiceImpl实现CacheService 接口。
2)如果是形容能力的接口名称,取对应的形容词为接口名(通常是–able的形容词)。
eg::AbstractTranslator实现Translatable接口。
1.8 Service/DAO 层方法命名规约
获取单个对象的方法用 get 做前缀。
获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects。
获取统计值的方法用 count 做前缀。
插入的方法用 save/insert 做前缀。
删除的方法用 remove/delete 做前缀。
修改的方法用 update 做前缀。
2. 常量
1)在long或者Long赋值时,数值后使用大写字母L,不能是小写字母l,小写容易跟数字混淆,造成误解。
2)不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。
eg:缓存相关常量放在类CacheConsts下;系统配置相关常量放在类SystemConfigConsts下。
3. 代码格式
3.1 如果是大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格;如果是非空代码块则
1) 左大括号前不换行。
2) 左大括号后换行。
3) 右大括号前换行。
4) 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。
3.2
1)左小括号和右边相邻字符之间不出现空格;右小括号和左边相邻字符之间也不出现空格;而左大括号前需要加空格。
eg反例:if (空格a == b 空格)
2)if/for/while/switch/do 等保留字与括号之间都必须加空格。
3)任何二目、三目运算符的左右两边都需要加一个空格。
说明:包括赋值运算符=、逻辑运算符&&、加减乘除符号等。
4)采用4个空格缩进,禁止使用Tab字符。
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.3 注释的双斜线与注释内容之间有且仅有一个空格。
3.4 在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。
double first = 3.2d;
int second = (int)first + 2;
3.5 方法参数在定义和传入时,多个参数逗号后面必须加空格。
下例中实参的 args1,后边必须要有一个空格。
method(args1, args2, args3);
3.6 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。
3.7 Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
正例:"test".equals(object);
反例:object.equals("test");