java - 如果捕获空指针异常不是一个好习惯,那么捕获异常是一个好习惯吗?

标签 java exception exception-handling nullpointerexception

我听说捕获 NullPointerException 是一种不好的做法,我认为这是明智的。让 NullPointerException 传播到顶部将允许检测到出错的地方。但很多时候,我看到很多 friend 直接捕获Exception,这样他们就不用担心上面代码中可能出现的各种不同类型的异常。这是一个好习惯吗?最好不要处理的其他类型的异常是什么?此外,在确定异常来源的特定代码上处理 NullPointerException 对我来说也很有意义。那么异常什么时候处理,什么时候不处理呢?最好不要处理的可能异常列表是什么?

最佳答案

Pokemon 异常处理很糟糕。特别是,如果它是一个空 block 而你只是吞下它们。您有特定类型的异常,因为它们实际上意味着特定上下文中的特定事物(本质上它们是在告诉您出了什么问题)。因此,通过捕获 Exception,您是在说您不关心这些异常是什么,也不关心发生了什么。这可能不是您想要的。

一般来说,捕获异常时遵循以下规则:

  • 在此级别处理异常是否有意义?如果是,则处理它。如果没有,则传播。
  • 结合第一条规则,“处理”还可以表示捕捉、包裹和重新 throw 。这是一种防止抽象泄漏的方法,因此方法的调用者不必了解底层实现。
  • 空的 catch block 并不意味着您已经处理了异常。这就是所谓的“吞咽”;至少,您想记录异常。有时发生的异常实际上是代码逻辑流程的一部分,因此您可能想做一些特别的事情(但请原谅双关语,这是异常而不是规则。最好检查导致异常的情况而不是将它们合并到代码的逻辑流程中)。

您可以轻松检查代码中的空值,因此无需显式捕获空指针异常。让 NullPointerException 发生是没有意义的(这是不好的做法)。即使您有一些抛出 NullPointerException 的代码,并且它是您无法控制且无法修复的代码,您也应该确定导致 NullPointerException 的输入参数,特别是为他们测试。

另一个不应该捕获的异常是 IllegalArgumentException。此异常意味着您传入了一个没有意义的参数。您不应捕获此异常,而应显式测试输入参数以确保它们正常并且不会导致 IllegalArgumentException

关于java - 如果捕获空指针异常不是一个好习惯,那么捕获异常是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716353/

相关文章:

Java 将 ASCII 值的字节数组转换为 int

java - BoxLayout 忽略 setYAlighment

java - 使用 Hibernate 关系

java - 我应该在函数中抛出 IllegalArgumentException 吗?

java - OpenGL 旋转框

node.js - 处理 Node.js 中的错误和异常日志记录

Oracle 堆栈跟踪行号与源代码不匹配!

java - FileNotFoundException 但文件存在于正确的路径中

c# - 异常处理 C# 的行为与我预期的不同——为什么?

c++ - boost 异常