栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

编码规范总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

编码规范总结

编码规约 命名风格
  • 类名(除VO、DTO、PO外),方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格
  • 常量类以Constant结尾,枚举类以Enum结尾、异常类以Exception 结尾,测试类以测试的类的名称开始以 Test 结尾。常量、枚举属性命名全部大写,单词间用下划线隔开,力求语义表达完整清楚
  • 避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名
  • 在常量与变量命名时,表示类型的名词放在词尾,以提升辨识度,例:startTime / workQueue / nameList / TERMINATED_THREAD_COUNT。如果模块、接口、类、方法使用了设计模式,在命名时要体现出具体模式,例public class OrderFactory;public class LoginProxy;public class ResourceObserver
  • 各层命名规约:
    A)Service / DAO 层方法命名规约:
    1)获取单个对象的方法用 get 做前缀。
    2)获取多个对象的方法用 list 做前缀,复数结尾,如:listObjects
    3)获取统计值的方法用 count 做前缀。
    4)插入的方法用 save / insert 做前缀。
    5)删除的方法用 remove / delete 做前缀。
    6)修改的方法用 update 做前缀。
    B)领域模型命名规约:
    1)数据对象:xxxDO,xxx 即为数据表名。
    2)数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
    3)展示对象:xxxVO,xxx 一般为网页名称。
常量定义
  • 不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护
  • 跨应用共享常量放置在二方库中
代码格式
  • 括号、保留字(if / for / while / switch / do)间的空格与换行
// 左大括号前加空格且不换行;左大括号后换行
if (flag == 1) {
System.out.println("world");
// 右大括号前换行,右大括号后有 else,不用换行
} else {
System.out.println("ok");
// 在右大括号后直接结束,则必须换行

// 注释的双斜线与注释内容之间有且仅有一个空格
String commentString = new String("demo");

// 在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开
double first = 3.2D;
int second = (int)first + 2;
}

// 多个参数逗号后面必须加空格
method(args1, args2, args3);
  • 单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
    1)第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。
    2)运算符与下文一起换行。
    3)方法调用的点符号与下文一起换行。
    4)方法调用中的多个参数需要换行时,在逗号后进行。
    5)在括号前不要换行。
  • 单个方法的总行数不超过 80 行。 说明:除注释之外的方法签名、左右大括号、方法内代码、空行、回车及任何不可见字符的总行数不超过 80 行
  • 不同逻辑、不同语义、不同业务的代码之间插入一个空行以提升可读性,但是没有必要插入多个空行进行隔开。
OOP规约
  • 所有整型包装类对象之间值的比较全部使用 equals
  • BigDecimal
    1)值比较应使用 compareTo() 方法
    2)Double转BigDecimal
BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);
  • 基本数据类型与包装数据类型的使用标准:
    1)所有的 POJO 类属性、RPC方法的返回值和参数必须使用包装数据类型。
    2)所有的局部变量使用基本数据类型。
  • 定义POJO类时,不要设定任何属性默认值
  • 禁止在 POJO 类中,同时存在对应属性 xxx 的 isXxx() 和 getXxx() 方法。框架在调用属性 xxx 的提取方法时,并不能确定哪个方法一定是被优先调用到,神坑之一
  • 使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutOfBoundsException 的风险
// 预期大于 3,结果等于 3 
String str = "a,b,c,,";
String[] ary = str.split(",");
System.out.println(ary.length);
  • 类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter / setter 方法。当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起
日期时间
  • 获取当前毫秒数:System.currentTimeMillis();而不是 new Date().getTime()
  • 使用枚举值来指代月份
集合处理
  • 使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一致、长度为0 的空数组。直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它类型数组将出现ClassCastException 错误
List list = new ArrayList<>(2);
list.add("guan");
list.add("bao");
String[] array = list.toArray(new String[0]);
  • 使用工具类 Arrays.asList() 把数组转换成集合时,后台的数据仍是数组,不能使用其修改集合相关的方法,它的 add/ remove / clear 方法会抛出 UnsupportedOperationException 异常
 String[] str = new String[]{ "yang", "guan", "bao" };
 List list = Arrays.asList(str);
 第一种情况:list.add("yangguanbao"); 运行时异常。
 第二种情况:str[0] = "change"; list 中的元素也会随之修改,反之亦然。
  • 不要对正在被遍历的集合进行remove / add 操作
  • 遍历Map使用Map.forEach 方法,否则使用entrySet而不是 keySet 使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。 说明:keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而
    entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效率更高
并发处理
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号