我最近知道使用stry
和catch
块NullPointerException
是一种不好的做法。
如果是这样,那么我有以下问题:
- 为什么这是一个不好的做法?
- 捕捉 a 的替代方法是
NullPointerException
什么?
我最近知道使用stry
和catch
块NullPointerException
是一种不好的做法。
如果是这样,那么我有以下问题:
NullPointerException
什么?当您在一段您希望在特定情况下引发 NPE 的代码周围添加一个 try/catch 块时,您可能会无意中忘记该代码使用的另一个对象,该对象也可能为 null 并导致一个对象。然后,当您在 catch 块中添加代码以对预期的 NPE 做出反应时,代码也将在意外的 NPE 上执行。这最多会输出一个误导性的错误消息,最坏的情况会导致完全意外的程序行为。
一个例子:
try {
ThingamabobFactory.getInstance().createThingamabob(ThingamabobFactory.getDefaults()).thingamabobify();
} catch(NullPointerException e) {
// so... which of the above method calls did return null?
// ...or was the NPE even thrown INSIDE one of these methods??
}
因此,当您希望某个对象在某些情况下为 null 并且您想要处理这种情况时,请通过检查if (object == null)
以避免任何误报来做到这一点。
捕获 NullPointerException 的最大问题是知道如何处理它,因为它可能有很多可能的原因。
如果您专门测试 null,您可以更确定您知道什么是 null 以及为什么。例如,假设一段代码包含对在特定情况下返回 null 的方法的调用,并且您希望在它这样做时采取一些措施。如果您立即测试方法结果,您知道null 是由于导致方法返回 null 的情况。
另一方面,如果您将块包装在 try-catch 中并捕获 NullPointerException,则该方法可能返回 null,但您无法确定发生了什么。try 块中可能出现了其他问题,导致异常。
您可以避免使用 throws 直接处理,也可以使用BCEL尝试另一种方法。
如果可能的话,您应该避免出现任何异常,因为生成它们并通过应用程序发送它们在资源上是昂贵的。
空点很容易处理,只需检查某些内容是否为空
当您在音译服务端时包装非法参数异常,或者仅处理可预测的 null 情况以处理模型或方法的先决条件,或在此 catch 内捕获异常,如果实例 Of ... 写入日志或更多。一般来说,永远不要直接捕获空点异常,它是运行时异常,它有逻辑:如果你知道代码中哪里会是空,然后处理它。如果你不知道,在你抓到之后,你会做什么?你不是JVM,对吧?