【规范二】JAVA静态代码风格规范

1. 规范说明

需遵守的代码风格校验规则总计九大类,具体参考如下:

序号

校验分类

类型

1

命名检查

强制

2

常量定义

强制

3

代码格式

强制

4

OOP规约

强制

5

数量检查

强制

6

控制语句

强制

7

导入检查

强制

8

注释规约

强制

9

其他

强制

针对以上9类的输出规范,罗列了相应的说明和正反例,详情可参考如下:

1.1 命名检查

  1. 类名采用首字母大写的驼峰式。
  2. 方法名,参数名采用首字母小写的驼峰式。
  3. 包路径名采用全小写的。
  4. 数组的声明风格命名统一采用String[] args的方式。

【反例】

//常量建议大写,可辅于下划线
    private static final String aaa = "test";
    private static final String BBB="test";
    private String ccc="test";
//变量名建议首字母小写
    private String DDD="test";
//数组声明
    String args[] = new String[8];

 【正例】

private static final String AAA= "test";
private static final String BBB="test";
private String ccc="test";
private String ddd="test";
String[] args = new String[8];

1.2 常量定义

  1. (建议)不采用魔法数,
  2. 全大写字母:常量名称应全部使用大写字母,单词之间用下划线 _ 分隔。

 【反例】

 public class Constants {
      public static final int maxConnections= 100;
      public static final String defaultUserName= "admin";
  } 

// 不好的做法
  if (count > 100) {
      // ...
  }

 【正例】

//常量大写下划线 
public class Constants {
      public static final int MAX_CONNECTIONS = 100;
      public static final String DEFAULT_USER_NAME = "admin";
  } 

 // 好的做法
  if (count > Constants.MAX_CONNECTIONS) {
      // ...
  }

1.3 代码格式

  1. if 代码块均必须添加成双成对的大括号,并且左大括号在行尾,右大括号独有一行。
  2. (建议)方法和构造函数不超过80行。

 【反例】

 public String getInfo(String userName,Integer code) {
        //缺少括号
        if(true)
            log.info("test");
        return StringUtils.EMPTY;
 }

【正例】

   public String getInfo(String userName,Integer code) {
        //括号
        if(true) {
            log.info("test");
        }
        return StringUtils.EMPTY;
    }

1.4 OOP规约

  1. String类型的比较必须采用 equals。
  2. 避免null.equals("sss")导致的空指针异常。建议将可控制的值放在equals前面

 【反例】

public String getInfo(String userName, Integer code) {
        if (userName == "admin") {

        }
        if (userName.equals("admin")) {

        }
        return StringUtils.EMPTY;
}

 【正例】

public String getInfo(String userName,Integer code) {
        if("admin".equals(userName)){

        }
        if("admin".equals(userName)){

        }
        return StringUtils.EMPTY;
    }

1.5 数量检查

  1. 方法的入参不超过5个,构造函数除外。
  2. 方法的return的地方个数不超过10个。
  3. catch的异常数量尽量不超过3个。
  4. 抛出的异常数量尽量不超过3个。
  5. for循环嵌套不超过3层。如超过3层建议拆分
  6. if嵌套不超过5层。你就想想自己下次能看得懂吗?

 【反例】

  public String getInfo(String userName,String userId,String userNo
            ,String userInfo,String orderId,String orderNum) throws IOException,FileNotFoundException,RuntimeException{
            
        //返回数量
        if(...){
             if(...){
                   if(...){
            return StringUtils.EMPTY;
          }
        }
        }
        //return关键字超过10个
        ......
        try {
            //业务操作
            ......
            try {
                //业务操作
                ......
                try {
                   //业务操作
                   ......
                } catch (RuntimeException e) {
                ......
                }
                
            } catch (Exception e) {
               ...... 
            }
        }catch (Exception ex){
            ......
        }

        return StringUtils.EMPTY;
    }

 【正例】

 public String getInfo(UserInfo user) throws Exception{
        //过多的分支不利于代码阅读,拆分成子方法
        subMethod1();
        ......
        subMethod2();
        return StringUtils.EMPTY;
    }
    
    private String subMethod1(){
        ......
    }

    private String subMethod2(){
        ......
    }
    
    private String subMethod3(){
        ......
    }

1.6 控制语句

  1. Switch 必须携带Default分支,并且放在末尾。
  2. 检查是否有过度复杂的布尔表达式,建议最多不超过三个

 【反例】

   public String getInfo(String userName,Integer code) {
        //无default分支
        switch (userName){
            case "superAdmin":
                return "-1";
            case "admin":
                return "0";
        }
        return StringUtils.EMPTY;
    }


//过度复杂的表达式
    public boolean canUserLogin(User user) {
        return (
            user != null &&
            user.getUsername() != null && !user.getUsername().trim().isEmpty() &&
            user.getPassword() != null && !user.getPassword().trim().isEmpty() &&
            user.isActive()
        );
    }

 【正例】

public String getInfo(String userName,Integer code) {
        //无default分支
        switch (userName){
            case "superAdmin":
                return "-1";
            case "admin":
                return "0";
            default:
                return "1";
        }
    }

//精简
    public boolean canUserLogin(User user) {
        return ( user != null && user.getUsername() );
    }

1.7 导入检查

  1. 对于未使用到的包,及时剔除。
  2. 避免使用*号进行包的引入。

减少不必要的依赖:显式导入可以减少不必要的依赖,使项目更加轻量。通配符导入可能会引入你实际并不需要的类,增加类加载时间和内存占用

 【反例】

//未被使用到
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
//util底下所有包引入
import java.util.*;

 【正例】

import java.util.List;

1.8 注释规约

  1. Java类必须补充注释。
  2. Java的方法必须具备注释。
  3. 方法和类 采用 /** @标签 **/ 采用统一的注释格式,行内注释采用//,并且不能放在行尾。

 【反例】

 //用户用户信息
    private String getInfo(String userName,String userId){
        return StringUtils.EMPTY;
    }

 【正例】

/**
     * 获取用户信息
     * @param userName 用户名
     * @param userId 用户ID
     * @return 返回信息字符串
     */
    private String getInfo(String userName,String userId){
        return StringUtils.EMPTY;
    } 

1.9 其他

  1. (建议)尽量不出现TODO的事项,TODO事项建议在提交代码前处理完成。
  2. 不允许采用system.out方法输出日志。
  3. 不允许采用e.printStackTrace()方法输出堆栈信息。

 以上:祝愿各位遵守规范,多摸鱼。毕竟你可能需要交接别人的代码呢?哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值