java代码优化

来源:互联网 发布:射手 mac 字幕 编辑:程序博客网 时间:2024/06/10 23:09

下面讲一些代码优化的事情

  1. 还记得刚开始写代码的时候,遇到过一个简单的编程程序,根据班上同学考试的分数来分类,90~99为A,80~89为B,70~79为C,60~69为D,0~59为E,相信大家随便都能写出来,代码如下
    public char typeOf(double score){if(score >= 90 && score < 100){return 'A';}else if(score >= 80 && score < 90){return 'B';}else if(score >= 70 && score < 80){return 'C';}else if(score >= 60 && score < 70){return 'D';}else{return 'E';}}
    很简单的就写出代码来了,那我们现在来分析下运行时这段代码的状况,假设,我们现在计算一个班(30人)的数据,正常情况  [90-99] 和 [0-59] 都是比较少的,而 [70-90] 的比较多,先假设 [90-99] 只有1人,而[70-90]的有20个。这个时候,有20个[70-90]的需要多判断一次【是否是[90-99]区间的】,那么就无用的判断是20多次。如果把上面的代码中,判断[90-99]的放在[70-90]判断的后面,1人是[90-99]之间的,只多了2次判断([80-90] 和[70-80] 的判断)。通过这个例子,想说明的是善用if else。
  2. (不喜欢个人心理活动的,可以直接跳到粗体字部分)最近一直在看代码,看到了很多的错误,也看到了自己的不足,刚开始接触别人的代码有点无论怎么样还是有点抵触,倒是后面看多了也就习惯了,现在回想反思一下,看到了自己的不足,为什么自己当初就不能正确面对看代码这问题,面对好的代码,学习人家写得好的方面,面对写得不太注意的地方,自己反思自己是不是这样写的,然后也能或多或少的有两点,好了不扯远了。回归主题:介绍一下场景,在数据库有配置create_table_handler字段,并在spring的xml里面配置了相应的子类,下面的代码片段就是从配置中获取id,再根据id获取对象,对于spring的Application获取不做介绍,大家可网上查资料很多。先贴出代码:
    public static <T> T getBean(String name) throws BeansException {return (T) applicationContext.getBean(name);}
    if(tableInfo != null && tableInfo.getCreateTableHandle() != null){CreateTableDefaultHandle handle = SpringContextUtil.getBean(tableInfo.getCreateTableHandle());if(handle != null){try {                        handle.createTable(null, this.getRequest());} catch (BusinessLevelException e) {e.printStackTrace();}}}
    上面的代码总体上来说写得很严谨,每个使用的变量的非空校验,但是对于Sping的getBean,我觉得使用的地方应该不会少,而每处都要在使用getBean()之前校验传入id的判断,在我感觉有点有点越俎代庖了,这个校验我觉得应该交给前面的代码自己处理,自己根据情况才决定返回null或者对象或者抛出异常,而且这样写的会为代码缩减很多代码,也更符合面向对象代码。
  3. 偶看代码,看到下面的代码,自己有一个小小的优化。
    for(BusUnitProject pj:projectList){        if(!hasHoliday){hasHoliday = pj.isHoliday();}weekReportKey = saveOneProject( keyId, pj, curRpBase, weekMap);}
    修改后:
    for(BusUnitProject pj:projectList){hasHoliday &= pj.isHoliday();weekReportKey = saveOneProject( keyId, pj, curRpBase, weekMap);}

0 0