异常处理注意点

阅读:263

目录介绍

  • 01.尽量捕获原始的异常
  • 05.不要打印堆栈后再抛出异常
  • 07.不要用异常处理机制代替判断
  • 08.异常使用指南

01.尽量捕获原始的异常

  • 尽量捕获原始的异常
    • 实际应该捕获 FileNotFoundException,却捕获了泛化的 Exception。示例如下。很多人误以为捕获泛化的 Exception 更省事,但也更容易让人“丈二和尚摸不着头脑”。相反,捕获原始的异常能够让协作者更轻松地辨识异常类型,更容易找出问题的根源。
    InputStream is = null;
    try {
        is = new FileInputStream("沉默王二.txt");
    } catch (Exception e) {
        e.printStackTrace();
    }
    

05.不要打印堆栈后再抛出异常

  • 不要打印堆栈后再抛出异常
    • 当异常发生时打印它,然后重新抛出它,以便调用者能够适当地处理它。就像下面这段代码一样。但是这样做的坏处是调用者可能也打印了异常,重复的打印信息会增添排查问题的难度。
    public static void main(String[] args) throws IOException {
        try  {
            InputStream is = new FileInputStream("yc.txt");
        }catch (IOException e) {
            e.printStackTrace();
            throw e;
        } 
    }
    

07.不要用异常处理机制代替判断

  • 本来应该判 null 的,结果使用了异常处理机制来代替。
    public static void main(String[] args) {
        try {
            String str = null;
            String[] strs = str.split(",");
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }
    


08.异常使用指南

  • 总结起来,应该在以下情况使用异常:
    • 在恰当的级别处理问题。(在知道该如何处理的情况下才捕获异常)
    • 解决问题并且重新调用产生异常的方法。
    • 进行少许修补,然后绕过异常发生的地方继续执行。
    • 用别的数据进行计算,以代替方法预计会返回的值。
    • 把当前运行环境下能做的事情尽量做完,然后把相同的异常重抛到更高层。
    • 把当前运行环境下能做的事情尽量做完,然后把不同的异常抛到更高层。
    • 终止程序。
    • 进行简化。(如果异常模式使问题变得太复杂,那么会很难使用)
    • 让类库和程序更安全。(这既是在为调试做短期投资,也是为程序的健壮性做长期投资)

赞赏支持


精彩留言

发表评论