1、字符串文字不应重复
重复的字符串文字使重构过程容易出错,因为您必须确保更新所有出现的内容。另一方面,常量可以从很多地方引用,但只需要在一个地方更新。
案例:
2、方法的认知复杂度不能太高
认知复杂度是衡量方法的控制流的难易程度的度量。具有高认知复杂性的方法将难以维护。
认知复杂度计算方式:
(1)&&、|| 条件判断符号 +1
(2)if、else if、else、switch 分支语句+1
(3)for、while、do while 循环语句+1
(4)catch 捕获异常语句+1
(5)break、continue 中断语句+1
(6)如果if、for、while、do while、catch存在嵌套时,里层的语句相对于外层+1
优化思路:
1.减少if、for、while、do while、catch关键字嵌套,可以把深层次的代码抽象成方法。
2.如果大量相似的if-else语句可以考虑用switch代替
3.没啥规律就看见if、for等关键字提成方法
3、“String#replace”应该优先于“String#replaceAll”
String.replaceAll的底层实现在每次调用java.util.regex.Pattern.compile()方法时都会调用该方法,即使第一个参数不是正则表达式。这会带来巨大的性能成本,因此应谨慎使用。
案例:
优化:
使用replace替换replaceAll
4、切换案例应该以无条件的“break”语句结束
当执行没有在 switch case 结束时显式终止时,它会继续执行后面 case 的语句。虽然这有时是故意的,但通常是导致意外行为的错误。
案例:
优化:
每个case结束添加break终止
5、推荐使用 Try-with-resources
Java 7 引入了 try-with-resources 语句,它保证相关资源将被关闭。由于新的语法更接近防弹,它应该优先于旧的try/ catch/finally版本。
案例:
优化:
6、“indexOf”检查不应该用于正数
大多数针对indexOf值的检查将其与 -1 进行比较,因为 0 是有效索引。任何查找值 >0 的检查都会忽略第一个元素,这可能是一个错误。如果意图只是检查字符串或列表中包含的值,请考虑改用该contains方法。
案例:
优化:
if(getDataType.indexOf("#")>=0){
...
}
或:
if(getDataType.contains ("#")){
...
}