java - 避免使用 try-catch 语句的充分理由

标签 java exception-handling try-catch

示例#1:

try { fileChooser.setSelectedFile(new File(filename)); }
catch (NullPointerException e) { /* do nothing */ }

示例#2:

if (filename != null)
    fileChooser.setSelectedFile(new File(filename));

#1 是出于性能或稳定性(或任何其他原因)本身就不好,还是只是有点不同?这不是一个很好的例子,因为 #1 与 #2 相比没有优势,但在不同的情况下可能会有优势(例如提高可读性、减少代码行等)。


编辑: 共识似乎是#1 是一个禁忌。最常见的原因:开销

另外,@Raph Levien 有很好的洞察力:

避免#1 的一个原因是它会损害您使用异常断点的能力。正常运行的代码永远不会故意触发空指针异常。因此,将调试器设置为在每次发生时停止是有意义的。在#1 的情况下,您可能会经常遇到此类异常。除了其他充分的理由外,还有潜在的性能影响。

此外,See Link更深入。

最佳答案

#2 无疑是更好的选择。异常处理不应用作程序控制流中的结构。应该使用异常来处理不受程序员控制的情况。在此示例中,您可以检查 fileChooser 是否为 null,以便它在您的控制之下。

关于java - 避免使用 try-catch 语句的充分理由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440107/

相关文章:

具有可关闭资源的 Java 收集器作为累加器

java - 将可接受的路径字符串存储到 MySQL

ruby - 在 Ruby 中自动记录异常

c# - 在类型上找不到匹配的构造函数

c++ - 在内部使用 try catch 防止 C++ DLL 异常

java - 避免在每一行 try catch 的聪明方法

Java字节码最终字段赋值(jasmin)

java - 迭代器 hasnext() 返回 true 但 next() 抛出 NoSuchElementException

c++ - 初始化列表中的 try/catch 是如何工作的?

c++ - throw-catch 导致联动错误