当前位置: 代码迷 >> 综合 >> 阿里巴巴 Java 开发手册--学习(一)
  详细解决方案

阿里巴巴 Java 开发手册--学习(一)

热度:106   发布时间:2023-09-19 15:43:20.0

    今天开始学习阿里巴巴 Java 开发手册,规范自己的代码。看了规约中的规范,一些是自己知道的并遵守的。下面把自己在日常开发中忽略的部分记下来:

    编程规约之命名风格

    1、常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不能嫌名字长。

    2、抽象类命名使用 Abstract 或 Base 开头 ; 异常类命名使用 Exception 结尾 ; 测试类

   命名以它要测试的类的名称开始,以 Test 结尾。

    3、中括号是数组类型的一部分,数组定义如下: String[] args;不要使用String args[] 的方式来定义。

    4、POJO 类中布尔类型的变量,都不要加 is ,否则部分框架解析会引起序列化错误。

    5、如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式。例如:public class ResourceObserver;

    6、接口和实现类的命名有两套规则:

    1 )对于 Service 和 DAO 类,基于 SOA 的理念,暴露出来的服务一定是接口内部的实现类用 Impl 的后缀与接口区别

     例如CacheServiceImpl 实现 CacheService 接口。

    2 )如果是形容能力的接口名称,取对应的形容词做接口名 ( 通常是– able 的形式 )。例如:AbstractTranslator     实现  Translatable 。

    7、枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。

    8、各层命名规约:
    A) Service / DAO 层方法命名规约
        1 ) 获取单个对象的方法用 get 做前缀。
        2 ) 获取多个对象的方法用 list 做前缀。
        3 ) 获取统计值的方法用 count 做前缀。
        4 ) 插入的方法用 save/insert 做前缀。
        5 ) 删除的方法用 remove/delete 做前缀。
        6 ) 修改的方法用 update 做前缀。
    B) 领域模型命名规约
        1 ) 数据对象: xxxDO , xxx 即为数据表名。
        2 ) 数据传输对象: xxxDTO , xxx 为业务领域相关的名称。
        3 ) 展示对象: xxxVO , xxx 一般为网页名称。

        4 ) POJO 是 DO / DTO / BO / VO 的统称,禁止命名成 xxxPOJO 。

      编程规约之常量定义

           1、如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面正例中的数字就是延伸信息,表示星期几。

    正例: public Enum { MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6),

    SUNDAY(7);}

  编程规约之代码格式

         1、if / for / while / switch / do 等保留字与括号之间都必须加空格。

    2、注释的双斜线与注释内容之间有且仅有一个空格。

    3、单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
    1) 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进。
    2 ) 运算符与下文一起换行。
    3 ) 方法调用的点符号与下文一起换行。
    4 ) 方法调用时,多个参数,需要换行时,在逗号后进行。

    5 ) 在括号前不要换行。

    4、方法参数在定义和传入时,多个参数逗号后边必须加空格。例如method("a", "b", "c");

  编程规约之OOP规约

    1、所有的覆写方法,必须加@ Override 注解。

   2、Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。例如"test"     .equals(object);

    3、所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。

    4、POJO 类必须写 toString 方法。

    编程规约之集合处理

    1、ArrayList 的 subList 结果不可强转成 ArrayList ,否则会抛出 ClassCastException异常

   2、在 subList 场景中,高度注意对原集合元素个数的修改,会导致子列表的遍历、增加、删除均会产生     ConcurrentModificationException 异常。

    3、使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是        list.size() 。

    4、使用工具类 Arrays . asList() 把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出 UnsupportedOperationException 异常。

    5、不要在 foreach 循环里进行元素的 remove / add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对     Iterator 对象加锁。

    6、集合初始化时,指定集合初始值大小。

    7、使用 entrySet 遍历 Map 类集合 KV ,而不是 keySet 方式进行遍历。

    编程规约之并发处理

         1、线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。

    编程规约之控制语句

    1、 在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有。 

    编程规约之注释规约

    1、类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用。


  相关解决方案