捕获空指针异常

14 java exception try-catch nullpointerexception

我问这个关于Java的主题,但我想它适用于许多语言.

考虑,

if(myVariable==null){
       doSomethingAboutIt();
}
else carryOn(myVariable);
Run Code Online (Sandbox Code Playgroud)

try{
     carryOn(MyVariable);
}catch(NullPointerException e ){
      doSOmethingAboutIt();}
Run Code Online (Sandbox Code Playgroud)

这两个代码块是否基本相同?有没有理由选择第二种方法?当然,更好的是myVariable永远不会为null,但似乎检查它的最佳方法是做一个简单的if语句.

Mak*_*oto 10

从我的立场来看,我犹豫是否认为这两个代码块在意图上是等价的.当然,他们经历了相同的错误处理,但这是开发人员的决定,而不是其他任何事情.

对我而言,if正在测试是否可以使用某个值,如果不能,则会解决该问题.该try...catch假设该值是有效的,如果不是,则它会通过解决异常行为.

当出现异常的,破坏程序的代码(除零等)时,应首先考虑例外情况.


che*_*ken 5

不,这些代码块根本不一样。

在第一个代码块中,您正在检查 if myVariableis null,并且您只在一个时间点执行此操作。稍后,myVariable可能会变成null并最终抛出一个NullPointerException. 如果发生这种情况,第二个代码片段将捕获异常,但第一个不会。

此外,第二个代码片段将捕获NullPointerExceptions可能从调用产生的调用堆栈中的任何地方抛出的内容carryOn(myVariable)。这太可怕了;你正在吞下一个异常,假设一个特定的变量null可能完全是别的东西。

使用第一个代码片段。