0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

代码风格

Posted at

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");

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?