java catch 空指针异常_关于Java:捕获空指针异常

Java (5) 2024-05-10 16:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说java catch 空指针异常_关于Java:捕获空指针异常,希望能够帮助你!!!。

我想问的是有关Java的多数知识,但我想它适用于许多语言。

考虑,

if(myVariable==null){

doSomethingAboutIt();

}

else carryOn(myVariable);

try{

carryOn(MyVariable);

}catch(NullPointerException e ){

doSOmethingAboutIt();}

这两个代码块基本相同吗? 是否有任何理由选择第二种方法? 当然,myVariable永远不会为空,但是似乎最好的检查方法是执行简单的if语句。

NullPointerException应该被视为程序员错误。 不要抓住他们。 确保它们永远不会被抛出。

从我的立场来看,我不愿考虑这两个代码块的意图。当然,他们会经历相同的错误处理,但这是开发人员的决定,而不是其他任何事情。

对我来说,if正在测试以查看是否可以使用值,如果不能使用,则可以解决该问题。 try...catch块假定该值是有效的,如果不是有效的,它就会变通以解决异常行为。

当出现异常,程序中断代码(除以零等)时,应首先考虑异常。

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

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

此外,第二个代码段将捕获NullPointerExceptions,该NullPointerExceptions可能是由于carryOn(myVariable)调用而从调用堆栈中的任何位置抛出的。这真糟糕;您正在吞下一个例外,该例外是在特定变量可能完全是其他变量的情况下假设null运行的。

使用第一个代码段。

一个分开的想法。 如果您正在捕获任何运行时异常(例如NullPointerException),则可能是您做错了什么。 以编程方式确定此类异常的来源非常困难,因此正确处理它们非常困难。

您仅将例外用于例外情况。使用第一段代码,而不是第二段。

好吧,carryOn(MyVariable);本身不会抛出NPE,除非carryOn中的其他内容引用了空实例上的方法或属性调用。

与捕获异常相比,捕获异常的计算量更大,因为生成异常需要生成堆栈跟踪等。

我认为这也会导致"更干净"的代码。

也可以看看:

-Java try / catch性能,是否建议将try子句中的内容保持在最低限度?

-尝试捕获性能Java

第一种方法比捕获异常更好,因为这会导致性能下降。我认为最好的方法是应用Null Object模式。 Guava库提供了Optional类,您可以利用它而不是创建自己的类。

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复