首页 > java > basic > 21.Java编码优化

21.Java编码优化

一个工程代码量超过10w行,是什么体验?

混乱的结构,感觉就像是被强奸.清晰的代码结构, 就像读一个优美的文章,赏心悦目.这个正是我们追求的, 代码逻辑的美, 只有程序员懂.

1 写代码前的准备

  1. 编码思想
    写出更优雅的代码,超越实现功能的要求.熟悉常用的设计模式.
  2. 编码规范
    参考规范.
  3. 工具统一
    多人开发同一个项目时需要注意:
  • 同样版本的IDE
  • 同样版本的SKD
  • 同样的代码格式化配置

2 一些java编码优化建议

  • 必要的注释是代码生命力的重要支撑.
  • 需要改进的地方, 或者没完成的部分采用//TODO注释.方便查漏补缺.
  • 合理的继承关系.
  • 功能模块化.
  • 清晰合理的目录结构, 根据功能模块分类明确.
  • 合理利用成熟的设计模式. 例如:单例模式, 工厂模式, 观察者模式等.
  • 静态代码检查, 帮你做一些基本的逻辑检查. 例如: Intelij IDEA的findBugs插件, PWD
  • 效率优化,通过效率检测工具. 例如:jprofile,jmap,jstack等.
  • 有继承关系的类,能采用子类时,采用子类对象,省去父类强转的过程.
  • 合理的log记录,方便debug. 例如: log4j
  • 清理无效的代码和注释.
  • 尽量降低多维集合维度. 例如:二维数组,第二维长度不超过3时, 尽量采用多个一维数组.
  • 缩小变量作用域. 只有本类调用的方法和变量修饰为private.方法内的变量,用到时创建.
  • 方法复用. Intelij IDEA中有个很棒的提示, 如果代码重复, 会在编辑器中提示.可以用这个功能检查重复代码.
  • 执行运算前判断参数是否合法. 例如:return 的合理应用,不合法return.
  • 创建工具类, 统一存放static方法,方便管理static方法.
  • final的合理应用, 避免数据误操作. 例如:从配置文件读取的变量不需要的时候,设置为final,避免误操作修改.
  • 集合类操作的封装. 尽量采用泛型和接口来提高代码复用.
  • 高频次使用变量的临时记录. 例如:同一个方法内多次使用系统时间, 可以采用局部变量记录, 执行时用变量结果不用重复计算, 提高效率.
  • 降低定长集合的维度, 尽量减少循环嵌套, 降低集合维度.
ArrayList<Item> items = new ArrayList()
// 改为定义3个对象
Item item0;
Item item1;
Item item2;
  • 复杂的判断条件拆分 如果一个判断语句太复杂,可以将其中的部分拆出来作为单独的参数.降低表达式复杂度.
  • 删除魔鬼数,采用常量定义.
public static final int THIS_IS_VALUE = 0;
  • 移除不必要的局部变量, 降低无效代码量.
int type = obj.getType();
if(type > 0){
}
// 可以改为
if(obj.getType() > 0){

}
  • if情况超过3个时,切换为switch,switch情况小于3个时,切换为if.
  • switch语句中,养成case和break对应的习惯,防止少写break,导致bug.
  • 整合只调用一次, 并且代码量小于20行的方法到同一个方法中.
  • 一个对象持有另一个对象的多个属性时,修改为持有对象,不重新声明变量及赋值.提高效率, 降低内存消耗.
  • 互斥的if情况采用if{}else{}的结构,不采用if{} if{}的方式.
  • 遍历HashMap采用entrySet替换keySet. Entry 对象带有value属性,keySet遍历还需要get一次,Entry效率高50%左右.
转载请保留原文链接.