• 异常不要用来做流程控制、条件控制,因为异常的处理效率比条件分支低。

    //正例
    if(obj!=null){
        ...
    }
    
    //反例
    try{
        obj.method()
    }catch(NullPointException e){
        ...
    }
    
  • 对大段代码进行try/catch,这是不负责任的表现。请分清稳定代码和非稳定代码。
  • 捕获代码是为了处理它,如果不想处理它,请把该异常抛给它的调用者。最外层的业务处理者,必须处理异常,并将其转化为用户可以理解的内容。
  • 避免直接抛出new RuntimeException(),更不允许抛出Exception或者Throwable,应该用有业务含义的自定义异常。推荐业界已定义过的自定义异常,如:DAOException、ServiceException等。
  • 避免出现重复的代码(Don’t Repeat Youself),即DRY原则。必要时抽取公共方法,或者抽象公共类,甚至是组件化。