1. 【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。
    反例:
String key="Id#taobao_"+tradeId;
cache.put(key, value);

(这个编译会报错的,通常 ide 会自检)

  1. 【强制】 long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1
    混淆,造成误解。
    说明: Long a = 2l; 写的是数字的 21,还是 Long 型的 2?
    (这个,长得太像了哈哈)

  2. 【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存
    相关的常量放在类: CacheConsts 下;系统配置相关的常量放在类: ConfigConsts 下。
    说明: 大而全的常量类,非得 ctrl+f 才定位到修改的常量,不利于理解,也不利于维护。
    (这个有时为了统一,都放在一个类里了,但是有时遇到过中文常量在运行时乱码问题,也将中文常量以 unicode 形式放在 properties 文件里,用 spring 的 properties 工具去读,读过做缓存 - static)

  3. 【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包
    内共享常量、类内共享常量。

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

    反例: 易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示
    “是” 的变量:

    • 类 A 中: public static final String YES = "yes";
    • 类 B 中: public static final String YES = "y";

    A.YES.equals (B.YES),预期是 true,但实际返回为 false,导致产生线上问题。

    • 3) 子工程内部共享常量:即在当前子工程的 const 目录下。
    • 4) 包内共享常量:即在当前包下单独的 const 目录下。
    • 5) 类内共享常量:直接在类内部 private static final 定义。

    说明一下库,一方库、二方库、三方库说明:

    • 一方库:本工程中的各模块的相互依赖
    • 二方库:公司内部的依赖库,一般指公司内部的其他项目发布的 jar 包
    • 三方库:公司之外的开源库, 比如 apache、ibm、google 等发布的依赖
  4. 【推荐】如果变量值仅在一个范围内变化用 Enum 类。如果还带有名称之外的延伸属性,必须
    使用 Enum 类,下面正例中的数字就是延伸信息,表示星期几。
    正例:

public Enum{ 
  MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5),
  SATURDAY(6), SUNDAY(7);
}
  1. 【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成 {} 即可,不需要换行;如果
    是非空代码块则:

    • 1) 左大括号前不换行。
    • 2) 左大括号后换行。
    • 3) 右大括号前换行。
    • 4) 右大括号后还有 else 等代码则不换行;表示终止右大括号后必须换行。
      (曾经遇到过一个老外写的代码,左大括号前换行,看起来也很整齐)
  2. 【强制】 左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空
    格。详见第 5 条下方正例提示。
    (就是有空格你也看不出来吧)

  3. 【强制】 if/for/while/switch/do 等保留字与左右括号之间都必须加空格。
    (不加不好看,一般都会加,何况 ide 自动生成已经加上了)

  4. 【强制】任何运算符左右必须加一个空格。
    说明: 运算符包括赋值运算符 =、逻辑运算符 &&、加减乘除符号、三目运行符等。
    (这个是有强迫症吗,0.0,为什么会是强制的,我好多时候没有加)

  5. 【强制】代码块缩进 4 个空格,如果使用 tab 缩进,请设置成 1 个 tab 为 4 个空格。
    正例: (涉及 1-5 点)

public static void main(String args[]) {
// 缩进 4 个空格
String say = "hello";
// 运算符的左右必须有一个空格
int flag = 0;
// 关键词 if 与括号之间必须有一个空格,括号内 f 与左括号, 1 与右括号不需要空格
if (flag == 0) {
System.out.println(say);
}
// 左大括号前加空格且不换行;左大括号后换行
if (flag == 1) {
System.out.println("world");
// 右大括号前换行,右大括号后有 else,不用换行
} else {
System.out.println("ok");
// 右大括号做为结束,必须换行
}
}

(我用 idea 写过代码,然后 checkstyle,缩进什么的全都报错。。。)

  1. 【强制】单行字符数限制不超过 120 个,超出需要换行,换行时,遵循如下原则:
    • 1) 换行时相对上一行缩进 4 个空格。
    • 2) 运算符与下文一起换行。
    • 3) 方法调用的点符号与下文一起换行。
    • 4) 在多个参数超长,逗号后进行换行。
    • 5) 在括号前不要换行,见反例。
      正例:
StringBuffer sb = new StringBuffer();
// 超过 120 个字符的情况下,换行缩进 4 个空格,并且方法前的点符号一起换行
sb.append("zi").append("xin")
 
.append("huang");

反例:

StringBuffer sb = new StringBuffer();
 
// 超过 120 个字符的情况下,不要在括号前换行
 
sb.append("zi").append("xin")…append
("huang");
 
// 参数很多的方法调用也超过 120 个字符,逗号后才是换行处
method(args1, args2, args3, ...
, argsX);

(经常在判断时写得老长)

  1. 【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。
    正例: 下例中实参的 "a", 后边必须要有一个空格。
    method ("a", "b", "c"); (习惯性不加空格。。。)

  2. 【推荐】没有必要增加若干空格来使某一行的字符与上一行的相应字符对齐。
    正例:

int a = 3;
   long b = 4L;
   float c = 5F;
   StringBuffer sb = new StringBuffer();

说明: 增加 sb 这个变量,如果需要对齐,则给 a、 b、 c 都要增加几个空格,在变量比较多的
情况下,是一种累赘的事情。
(有时为了好看还真加过)

  1. 【强制】 IDE 的 text file encoding 设置为 UTF-8; IDE 中文件的换行符使用 Unix 格式,不
    要使用 windows 格式。
    ("\n" 吗)

  2. 【推荐】方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之
    间插入一个空行。相同业务逻辑和语义之间不需要插入空行。
    说明: 没有必要插入多行空格进行隔开。
    (通常把变量和方法之间补上一个空行)

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Jalen Chu 微信支付

微信支付

Jalen Chu 支付宝

支付宝

Jalen Chu 公众号

公众号