一 编程规约

1.类名使用 UpperCamelCase 风格

正例:MarcoPolo / UserDO / TcpUdpDeal

2.方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格

正例:localValue / getHttpMessage() / inputUserId

3.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚。

正例:MAX_STOCK_COUNT

4.抽象类命名使用 Abstract 或  Base 开头;异常类命名使用Exception结尾;测试类命名以它要测试的类名开始,以Test结尾。

5.类型与中括号紧挨相连来定义数组。

正例:定义整形数组 int[] arrayDemo;

6. POJO 类中布尔类型的变量,都不要加 is 前缀。

7.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,单数类名如果有复数含义,类名可以使用复数形式。

正例:应用工具类包名为 com.alibaba.ai.util 类名为 MessageUtils

8.为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。杜绝完全不规范的缩写,避免望文不知义。

正例:从远处仓库拉取代码的类命名为 PullCodeFromRemoteRepository

反例:变量 int a; 的随意命名方式

反例:AbstractClass “缩写”命名为 AbsClass; condition “缩写”命名为 condi.

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

正例:枚举名字为ProcessStatusEnum 的成员名称: SUCCESS / UNKNOWN_REASON

10.接口类中的方法和属性不要加任何修饰符号(包括 public),保持代码的简洁,并加上有效的 Javadoc 注释。尽量不要再接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。

正例:接口方法签名 void f();  接口基础常量 String COMPANY = "alibaba";

反例:接口方法定义 public abstract void f();

11.接口和实现类的命名:

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

正例: CacheServiceImpl 实现 CacheService 接口。

    2)如果是形容能力的接口名称,取对应的形容词为接口名。 

正例:AbstractTranslator 实现 Translatable

12.各层命名规约:

    1) Service / DAO 层方法命名规约:获取单个对象的方法用 get 作前缀; 获取多个对象的方法<----> list   获取统计值的方法<----> count    插入的方法<----> save/insert       删除的方法<----> remove/delete       修改的方法<----> update

    2)  领域模型命名规约:数据对象:xxxDO, xxx 为数据表名; 数据传输对象: xxxDTO, xxx为业务领域相关的名称; 展示对象: xxxVO, xxx一般为网页名称

二 代码格式

1. 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。

反例: if  (空格a == b空格)

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

3. 任何二目、三目运算符的左右两边都需要加一个空格。  即 =  &&  + - 

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

正例:

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");
    // 在右大括号后直接结束,则必须换行
    }
}

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

正例:实例 "a", 后面必须要有一个空格: method("a", "b", "c")

三 OOP规约

1. Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值得对象来调用equals

正例:"test".equals(object);

2. 当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,该规则大于下面第3条

3. 类内方法定义的顺序依次为:共有方法或保护方法->私有方法->getter / setter 方法。

上面链接中后面还有很多规范,有关注释,日志,数据库等,有兴趣的小伙伴可以点进去了解哈。