《阿里巴巴Java开发手册》之编程规范

 一、编程规范

(一)命名风格


1.【强制】代码中的命名均不能以_下划线或美元符号$开头、结束

    反例:_name / $name / name_  / name$ 

2.【强制】禁止使用拼音和英文混搭,禁止使用中文

    反例:cuxiaoProduct(促销产品)/ int 变量 = 3

3.【强制】类名使用UpperCamelCase(大驼峰形式),以下形式例外:DO/BO/DTO/VO/AO

    反例:userPole/UserDo

    正例:UserPolo/UserDO

 4.【强制】方法名、参数名、变量名均用LowerCamelCase(小驼峰形式)

    正例:int userAge = 23

5.【强制】常量名全部大写,单词间用_隔开,力求清楚完整

    反例:MAX_COUNT

    正例:MAX_USER_COUNT

6.【强制】抽象类名使用Abstract/Base开头,异常类以Exception结尾,测试类以要测试的类开头,以Test结尾

7.【强制】中括号[]是数组类型的一部分,如 String[] userName;

    反例:String userName[]

8.【强制】POJO类布尔类型变量都不要加is,否则部分框架会产生序列化错误

9.【强制】包名统一使用小写,且为单数形式,类名可以为复数

10.【推荐】如果模块、接口、方法、类使用了设计模式,需要在命名上有所体现,如:public class LoginProxy

11.【强制】对于Service和DAO类,基于SOA理念,暴露出来的一定是接口,内部实现类用Impl结尾与接口区别

    正例:CachService的实现类CachServiceImpl

(二)常量定义

1.【强制】不允许未经定义的常量直接出现在代码中

2.【强制】使用长整型时,使用Long,避免使用long,避免l与1混淆产生误解,如Long num = 2L,而不是2l

(三)代码格式

1.【强制】大括号使用约束,如果{}内无代码,可不换行,直接写;如果有代码,按照以下格式

if (){
...
}else{
...
}

if (){
...
}    // 没有else时,换行
...

2.【强制】左小括号与字符间不出现空格,右小括号与字符间不出现空格

if ("jsytck" == serviceTypeId){
...
}

3.【强制】if/switch/while/for/do 等保留字与括号间必须存在空格

4.【强制】任何二目、三目运算符左右两边都必须加空格,如 = 、 && 、+ 等

5.【强制】注释的 // 与注释内容有且仅有一个空格

6.【强制】单行字符数不超过120,超出部分换行时,需遵循如下原则:

    6.1.第二行相对于第一行缩进4个空格,从第三行开始,不再进行缩进,参考示例

    6.2.括号前不要换行,有逗号,在逗号后换行

    正例:

StringBuilder string = new StringBuilder();
string.append("sun").append("xiao")...
.append("shan");

7.【强制】方法中有多个参数时,需要在逗号后加上空格,如

method("a", "b", "c")

(四)OOP格式

1.【强制】能通过类名访问的静态变量和静态方法,不要使用类实例的对象进行访问,无谓增加编译器的解析成本

2.【强制】所有的覆写方法必须加@Override,如果子类方法名或参数写错,编辑器会报错,帮忙检查,而不写@Override,及时方法写错,编译器也会编译通过

3.【强制】equals()方法容易抛出空指针异常,应使用常量或确定的值来调用equals,且值的比较,都建议用equals

    正例:"string".equals(Object)

    反例:Object.equals("string")

4.【强制】构造方法内禁止放任何业务逻辑,如果必须,就放在init方法中

(五)集合处理

1.【强制】使用集合转数组必须使用 toArray(T[] array) ,传入的是类型完全相同的数组,大小是 list.size() ,如

List<String> list = new ArrayList<String>(2);
list.add("sun");
list.add("xiaoshan");
String[] array = new String[list.size()];
array = list.toArray(array);

2.【强制】不要在 foreach 循环里,进行元素的 remove / add ,除非使用 iterator

    正例:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String string = iterator.hasNext();
    if (判断条件) {
        iterator.remove();
    }
}

3.【推荐】推荐使用 entrySet 遍历 Map ,而不是 keySet 。 keySet 需要遍历两次,一次转换为Iterator对象,另一次才取出来

(六)注释规约

1.【强制】在类、类属性、类方法中使用注释,必须使用 javadoc 规范,使用 /**内容*/,不得使用// xxx 格式

2.【强制】所有的抽象方法、接口必须使用 javadoc 注释,必须指明返回值、参数、异常说明、方法的功能

3.【强制】所有的类必须添加创建者和创建日期

本篇为《阿里巴巴Java开发手册》第一部分内容,仅作交流,学习

发布了3 篇原创文章 · 获赞 0 · 访问量 1527

猜你喜欢

转载自blog.csdn.net/qq_40798777/article/details/104325460