阿里巴巴Java开发规范手册(一)

时间:2022-10-02 22:08:15

一、编程规范

(一)命名规约

  1、命名不能以下划线或美元符号开始和结尾

  2、不能中英文结合命名

  3、类名使用驼峰形式(首字母大写)

  4、方法名、参数名、成员变量、局部变量均使用驼峰形式(首字母小写)

  5、常量名均使用大写,单词间用下划线分隔

  6、抽象类名用Abstract或Base开头,异常类名用Exception结尾,

      测试类名用测试类名称开始以Test结尾

  7、数组定义:String[] args

  8、POJO类中的任何布尔类型的变量都不要加is,boolean isSuccess的属性,

      方法是isSuccess(),RPC框架在反向解析的时候,认为对应的属性名是success,

    导致属性获取不到,进而抛出异常

  9、包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。

    包名统一使用单数形式,但是类名如果有复数含义,包名可以使用复数形式

  10、杜绝完全不规范的缩写,随意缩写严重降低代码可阅读性

  11、若使用到了设计模式,建议在类名中体现出具体模式

  12、接口类中的方法和属性不要加任何修饰符,加有效javadoc注释

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

    (1)对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,

      内部的实现类用Impl的后缀与接口区别:CacheServiceImpl实现CacheService接口

    (2)若形容能力的接口名称,取对应的形容词做接口(-able的形式):

       AbstractTranslator实现Translatorable

  14、枚举类名带上Enum后缀,全部大写,单词间用下划线分隔

  15、各层命名规约:

     (a)Service/DAO层方法命名规约

      (1)获取单个对象的方法用get做前缀

      (2)获取多个对象的方法用list做前缀

      (3)获取统计值的方法用count做前缀

      (4)插入的方法用save或insert做前缀

      (5)删除的方法用remove或delete做前缀

      (6)修改的方法用update做前缀

    (b)领域模型命名规约

      (1)数据对象:***DO,***即为数据表名

      (2)数据传输对象:***DTO,***为业务领域相关的名称

      (3)展示对象:***VO,***一般为网页名称

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

(二)常量定义

  1、不允许出现任何未经定义的常量,直接出现在代码中

  2、long或者Long初始赋值时必须使用大写的L,小些容易跟数字1混淆

  3、不要使用一个常量类维护所有的常量,应按常量功能进行归类,分开维护

    如:缓存相关的常量放在类:CacheConsts下;

      系统配置相关的常量放在类:ConfigConsts下

  4、常量的复用有五个层次

    (1)跨应用共享常量:放置在二方库中,通常是client.jar中的const目录下

    (2)应用内共享常量:放置在一方库的modules中的const目录下

    (3)子工程内部共享常量:即在当前子工程的const目录下

    (4)包内共享常量:即在当前包下的const目录下

    (5)类内共享常量:直接在类内部private static final 定义

  5、变量值仅在一个范围内变化用Enum类。若还带有名称之外的延伸属性,必须使用Enum类

    数字代表延伸信息表星期几:public Enum{MONDAY(1),TUESDAY(2),WEDNESDAY(3),

    THURSDAY(4),FRIDAY(5),SATURDAY(6),SUNDAY(7);}

(三)格式规约

  1、若大括号内为空,{}即可,不需换行;若是非空代码块则:

    (1) { 前不换行

    (2) { 后换行

    (3) } 前换行

    (4) } 后不换行

  2、{ 和后一个字符之间,} 和前一个字符之间均没有空格

  3、if/for/while/switch/do等保留字与 { } 之间都必须加空格

  4、任何运算符左右必须加一个空格(=、&&、+、-、*、/、:?等)

  5、代码块缩进4个空格,若使用tab缩进 请设置成1个tab为4个空格

  public static void main(String args[]){

    String say = "hello";

    int flag = 0;

    if (flag == 0) {

      System.out.println(say);

    }

    if (flag == 1) {

      System.out.println("world");

    } else {

      System.out.println("ok"); 

    }

  }

  6、单行字符数限制不超过120个,超出需要换行,换行时规约

    (1)换行时相对上一行缩进4个空格

    (2)运算符与下文一起换行

    (3)方法调用的点符号与下文一起换行

    (4)在多个参数超长,逗号后进行换行

    (5)在括号前不要换行

  StringBuffer sb = new StringBuffer();

  sb.append("zi").append("xin")...

    .append("huang");

  7、方法参数在定义和传入时,多个参数逗号后边必须加空格

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

  8、没有必要增加若干行空格来时某一行的字符与上一行的相应字符对齐

    int a = 3;

    long b = 4L;

    float c = 5F;

    StringBuffer sb = new StringBuffer();

    增加sb这个变量若需要对齐 则给a、b、c、都要增加几个空格,

    在变量比较多的情况下是一种累赘的事情

  9、IDE的text file encoding设置为UTF-8;IDE中文件的换行符使用Unix格式,

    不要使用Windows格式

  10、方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者

    不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要空行

 


出自《阿里巴巴Java开发手册》 喜欢请支持正版