天天看点

java 代码换行_java代码开发规范

代码要求

  • 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
  • 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
  • 抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结
  • 类型与中括号紧挨相连来表示数组
  • POJO类中布尔类型变量都不要加is前缀,否则部分框架解析会引起序列化错误
  • Controller层只做数据校验,不做业务处理
  • Service做业务处理,可调用本身的Mapper,如需调用别的模块,需调用其他模块Service,不可直接调用Mapper
  • 避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低
  • 在long或者Long赋值时,数值后使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解
  • 如果是大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格;如果是非空代码块则:
    • 1) 左大括号前不换行。
    • 2) 左大括号后换行。
    • 3) 右大括号前换行。
    • 4) 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。
  • 单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:
    • 1)第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进,参考示例。
    • 2)运算符与下文一起换行。
    • 3)方法调用的点符号与下文一起换行。 *
    • 4)方法调用中的多个参数需要换行时,在逗号后进行。 5)在括号前不要换行

      例: StringBuilder sb = new StringBuilder(); // 超过120个字符的情况下,换行缩进4个空格,点号和方法名称一起换行 sb.append("Jack").append("Ma")... .append("alibaba")... .append("alibaba")... .append("alibaba"); 反例: StringBuilder sb = new StringBuilder(); // 超过120个字符的情况下,不要在括号前换行 sb.append("Jack").append("Ma")...append ("alibaba"); // 参数很多的方法调用可能超过120个字符,不要在逗号前换行 method(args1, args2, args3, ... , argsX);

  • Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals
  • 所有整型包装类对象之间值的比较,全部使用equals方法比较
  • 浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断
  • 所有的POJO类属性必须使用包装数据类型
  • 关于hashCode和equals的处理,遵循如下规则:
    • 1) 只要覆写equals,就必须覆写hashCode。
    • 2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须覆写这两个方法。
    • 3) 如果自定义对象作为Map的键,那么必须覆写hashCode和equals。
  • 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可
  • 所有的覆写方法,必须加@Override注解
  • 相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object
  • 可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)
  • 外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。
  • 为了防止精度损失,禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象。
    • 优先推荐入参为String的构造方法,或使用BigDecimal的valueOf方法,此方法内部其实执行了Double的toString,而Double的toString按double的实际能表达的精度对尾数进行了截断。

      BigDecimal recommend1 = new BigDecimal("0.1"); BigDecimal recommend2 = BigDecimal.valueOf(0.1);

  • 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展
  • final可以声明类、成员变量、方法、以及本地变量,下列情况使用final关键字:
    • 1) 不允许被继承的类,如:String类。
    • 2) 不允许修改引用的域对象。
    • 3) 不允许被覆写的方法,如:POJO类的setter方法。
    • 4) 不允许运行过程中重新赋值的局部变量。
    • 5) 避免上下文重复使用一个变量,使用final可以强制重新定义一个变量,方便更好地进行重构。
  • 慎用Object的clone方法来拷贝对象
    • 对象clone方法默认是浅拷贝,若想实现深拷贝需覆写clone方法实现域对象的深度遍历式拷贝。

方法命名规约

  • 获取单个对象的方法用 get 做前缀。
  • 获取多个对象的方法用 list 做后缀。
  • 获取统计值的方法用 count 做后缀。
  • 插入的方法用 save( 推荐 ) 或 insert 做前缀。
  • 删除的方法用 remove( 推荐 ) 或 delete 做前缀。
  • 修改的方法用 update 做前缀。

文件命名规则

  • 对外暴露的controller文件以Controller结尾
  • service内的接口以Service结尾
  • service的实现以ServiceImpl结尾
  • dao包下的文件以Mapper结尾
  • 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式
  • dto包下的数据传输对象,文件名为xxxDTO.java,其他的vo、form下的文件名命名规范类似

数据脚本

  • 各个版本的放在相应环境各个版本下面的文件内
  • 各个环境下面的文件代表在该环境已经执行的脚本
  • 待执行的可放在v0.0内,此条规定只适用于dev环境,其他环境通过脚本文件比对即可

继续阅读