我最近了解到,对try
使用catch
和NullPointerException
块是不好的做法。
如果是,那么我有以下问题:
NullPointerException
?答案 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,对吧?