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