优质博文:IT-BLOG-CN
在这里插入图片描述

一、代码规范

【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:
  ☑️ 左大括号前不换行。
  ☑️ 左大括号后换行。
  ☑️ 右大括号前换行。
  ☑️ 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。

【强制】左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。详见 第5条下方正例提示。
反例 : if (空格 a == b 空格)

【强制】if/for/while/switch/do等保留字与括号之间都必须加空格。

【强制】任何二目、三目运算符的左右两边都需要加一个空格。
说明: 运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。

【强制】缩进采用4个空格,禁止使用tab字符。
说明: 如果使用tab缩进,必须设置1tab4个空格。IDEA设置tab4个空格时,请勿勾选Use tab character;而在eclipse中,必须勾选insert spaces for tabs。正例 : (涉及1-5点)

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

【强制】单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:
  ☑️ 第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进,参考示例。
  ☑️ 运算符与下文一起换行。
  ☑️ 方法调用的点符号与下文一起换行。
  ☑️ 在多个参数超长,在逗号后换行。在括号前不要换行,见反例。

正例 :

StringBuffer sb = new StringBuffer();
 //超过 120 个字符的情况下,换行缩进 4 个空格,并且方法前的点符号一起换行
 sb.append("zi").append("xin")...
 .append("huang")...
 .append("huang")...
 .append("huang");

反例 :

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

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

【强制】IDEtext file encoding设置为UTF-8; IDE中文件的换行符使用Unix格式,不要使用windows格式。

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

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

说明 : 增加sb这个变量,如果需要对齐,则给abc都要增加几个空格,在变量比较多的情况下,是一种累赘的事情。

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

阿里代码手册中代码规范
【推荐】同项目代码必须使用统一的格式化规范,推荐配置idea/eclipsefmt模板。
【推荐】减少不必要的代码,比如样板代码、重复代码等。
【推荐】功能简单、使用方单一的方法,合并到使用方对应类中,比如check参数的方法。
【推荐】对于类外部几乎不会用到的常量、方法(比如校验参数),推荐直接放到类内部。
【推荐】对于关键的异常,提供必要的metricslog输出。
【推荐】避免使用ObjectMap等不清晰的类型作为请求参数和响应对象。

二、开发规范

【推荐】使用公司推荐中间件,包括qmqqconfigqschedulecredis/qredismysqldubbosoa
【强制】合理的使用各种资源、锁、流等,保证资源一定可以得到释放。
【推荐】使用java8stream进行集合操作,但是需要控制复杂度,保证可读性。
【推荐】try-catch缩小最小化原则,杜绝一个从头到尾的try-catch
【推荐】接口设计遵循职责单一、清晰易懂,参数逻辑,默认值处理需要表达明确
【推荐】为API设计合理的错误码,避免返回调用方不关注的错误码,或者缺失必要的错误码,同时提供必要的错误信息。
【推荐】使用单元测试保证核心逻辑的准确性,尽量做到脱机可执行。
【强制】保证使用的数据结构和代码段的线程安全。
【强制】避免对表进行单次大规模扫描,必须加上限制条件。
【强制】mysql的query for update必须指定主键或者唯一键。
【强制】对外部资源的访问必须有超时机制。
【推荐】sql语句尽可能明确定义,尽可能避免动态sql拼接,动态sql容易出现条件失效,导致全表扫描。
【推荐】对于数据规模较少、访问及其频繁的配置类型,如果存放到db中,那么建议启动、以及定期更新到内存,避免每次都查询。
【推荐】推荐使用java Stream,但是避免链太长,以及在“.”之前做必要的断行。
【推荐】信息安全的规范可以参考04安全规范

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐