美文网首页
ITEM 77: 不要忽视异常

ITEM 77: 不要忽视异常

作者: rabbittttt | 来源:发表于2020-08-10 11:57 被阅读0次

    ITEM 77: DON’T IGNORE EXCEPTIONS
      虽然这个建议看起来很明显,但它经常被违背,因此需要重复。当API的设计者声明一个抛出异常的方法时,他们试图告诉你一些事情,不要忽略它!用一个catch块为空的try语句包围方法调用,很容易忽略异常:

    // Empty catch block ignores exception - Highly suspect!
    try { ...
    } catch (SomeException e) { 
    }
    

      空catch块无法实现异常的目的,即强迫您处理异常条件。忽略异常类似于忽略火警警报,并将其关闭,这样其他人就没有机会看到是否真的发生了火灾。你可能会侥幸逃脱,或者结果可能是灾难性的。每当你看到一个空的捕捉块,警钟应该在你的头脑中响起。
      在某些情况下,忽略异常是合适的。例如,在关闭 FileInputStream 时,它可能是合适的。您没有更改文件的状态,因此不需要执行任何恢复操作,并且您已经从文件中读取了所需的信息,因此没有理由中止正在进行的操作。记录异常可能是明智的,这样您就可以在这些异常经常发生时调查问题。如果你选择忽略异常,catch 块应该包含一个解释为什么这样做是合适的注释,变量应该命名为 ignore:

    Future<Integer> f = exec.submit(planarMap::chromaticNumber); 
    int numColors = 4; // Default; guaranteed sufficient for any map 
    try {
      numColors = f.get(1L, TimeUnit.SECONDS);
    } catch (TimeoutException | ExecutionException ignored) {
      // Use default: minimal coloring is desirable, not required
    }
    

      本项目中的建议同样适用于已检查的异常和未检查的异常。无论异常是表示可预测的异常情况还是编程错误,使用空catch块忽略它都会导致程序在出现错误时静默地继续运行。程序可能会在将来的任意时间失败,在代码中与问题的根源没有明显关系的一点上。正确处理异常可以完全避免失败。仅仅让异常向外传播至少会导致程序快速失败,从而保留信息来帮助调试失败。

    相关文章

      网友评论

          本文标题:ITEM 77: 不要忽视异常

          本文链接:https://www.haomeiwen.com/subject/ysaddktx.html