让代码更好的小建议

工作了四年,整理了20个让代码更好的建议

  1. 仅是判断是否存在时,select count 比 select 具体的列,更好
  2. 复杂的if逻辑条件,可以调整顺序(根据执行条件调整),让程序更高效
  3. 写查询Sql的时候,只查需要用到的字段,还有通用的字段,可以节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率
  4. 一条sql搞定的尽量不要通过逻辑循环查询sql,优先考虑批量进行。
  5. catch了异常,需要打印出具体的exception,方便更好定位问题
  6. 一个方法,拒绝过长的参数列表。不仅看起来不优雅,并且接口升级时,可能还要考虑新老版本兼容。如果参数实在是多怎么办呢?可以用个DTO对象包装一下这些参数
  7. 使用缓冲流,减少IO操作,减少IO次数,提高读写效率。
  8. 优化程序逻辑,比如前面已经查到的数据,在后面的方法也用到的话,是可以把往下传参的,减少方法调用/查表
  9. 不要为了方便,直接在代码中使用0,1等魔法值,应该要用enum枚举代替。使用魔法值,维护代码起来很难受
  10. 当成员变量值不会改变时,优先定义为静态常量,因为如果定义为static,即类静态常量,在每个实例对象中,它只有一份副本。如果是成员变量,每个实例对象中,都各有一份副本。显然,如果这个变量不会变的话,定义为静态常量更好一些。
  11. 注意检验空指针,不要轻易相信业务,说正常逻辑某个参数不可能为空。
  12. 捕获到的异常,不能忽略它,至少打点日志
public static void testIgnoreException() throws Exception {
   		 try {       
        // 搞事情
    } catch (Exception e) {    
        //捕获了异常,啥事情不做,日志也不打??
    }
}
  1. 处理Java日期时,当心YYYY格式设置的问题,正确姿势是使用yyyy格式,否则年会+1YYYY是基于周来计算年的
  2. static静态变量不要依赖spring实例化变量,可能会导致初始化出错
  3. 不要用一个Exception捕捉所有可能的异常
public void test(){
    try{
        //…抛出 IOException 的代码调用
        //…抛出 SQLException 的代码调用
    }catch(IOException e){
        //仅仅捕捉 IOException
        log.info(“IOException in test,exception:{}, e);
    }catch(SQLException e){
        //仅仅捕捉 SQLException
        log.info(“SQLException in test,exception:{}, e);
    }
}
  1. 函数不要过度封装,言简意赅即可。函数不要过度封装,把意思表达清楚即可。并且,方法调用会引起入栈和出栈,导致消耗更多的CPU和内存,过度封装,会损耗性能的!
  2. 如果变量的初值一定会被覆盖,就没有必要给变量赋初值
  3. 金额数值计算要使用BigDecimal
  4. 如果数据库一次查询的数量过多,建议分页处理。
  5. 修改对外老接口的时候,思考接口的兼容性。如果你的需求是在原来接口上修改,尤其这个接口是对外提供服务的话,一定要考虑接口兼容。举个例子,比如dubbo接口,原本是只接收A,B参数,现在你加了一个参数C,就可以考虑这样处理。
//老接口
void oldService(A,B);{
  //兼容新接口,传个null代替C
  newService(A,B,null);
}

//新接口,暂时不能删掉老接口,需要做兼容。
void newService(A,B,C);
  1. 多线程异步优先考虑恰当的线程池,而不是new thread,同时考虑线程池是否隔离,多个不同的业务尽量不要使用同一个线程池

补充中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值