捕获NullPointerException的替代方法

时间:2013-01-22 21:53:07

标签: java nullpointerexception

我最近了解到,对try使用catchNullPointerException块是不好的做法。

如果是,那么我有以下问题:

  1. 为什么这是一种不好的做法?
  2. 有什么方法可以抓住NullPointerException

5 个答案:

答案 0 :(得分:8)

当您在特定情况下希望抛出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??
}

因此,如果您希望某个对象在某些情况下为空并且您想要处理此情况,请通过选中if (object == null)来避免任何误报。

答案 1 :(得分:4)

捕获NullPointerException的一个大问题是知道如何处理它,因为它可能有很多可能的原因。

你可以更确定你知道什么是null,以及为什么你专门测试null。例如,假设一个代码块包含对在特定情况下返回null的方法的调用,并且您希望在执行此操作时执行某些操作。如果您立即测试方法结果,知道 null是由于导致该方法返回null的情况造成的。

另一方面,如果将块包装在try-catch中并捕获NullPointerException,则该方法可能返回null,但您无法确定是发生了什么。在try块中可能出现其他问题,导致异常。

答案 2 :(得分:0)

如果可能的话,你应该避免任何例外,因为制作它们并通过app发送它们的资源很昂贵。

零点很容易处理,只需检查是否有东西

答案 3 :(得分:0)

您可以避免使用throws直接处理,或者您可以使用BCEL尝试替代方法。

答案 4 :(得分:-1)

当您处于音译服务端时,要么包装非法参数异常,要么只处理可预测的null情况以处理模型或方法的前提条件,或捕获异常,在此catch中,如果实例...写入日志或更多。 一般来说,永远不会直接捕获空点异常,它是运行时异常,它有逻辑: 如果你知道代码中的null将在哪里,那么处理它。如果你不知道,你抓住后,你做了什么?你不是JVM,对吧?