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

createh52个月前 (03-06)技术教程11

我想问的是有关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类,您可以利用它而不是创建自己的类

相关文章

Java中的空指针怎么处理?

#暑期创作大赛#Java程序员工作中遇到最多的错误就是空指针异常,无论你多么细心,一不留神就从代码的某个地方冒出NullPointerException,令人头疼。1. 对象设置默认值Object o...

java 中如何避免空指针

在Java中,空指针异常(NullPointerException)是常见的运行时异常,通常是因为在对一个空对象(null)进行方法调用、字段访问等操作时引起的。为了避免空指针异常,可以采取以下几种方...

告别空指针-Kotlin这一点把Java比下去了

写Java的各位想必没少被空指针异常(NullpointException)困扰,但在Kotlin中,我们终于可以跟它Say Goodbye了。严格来说,Kotlin中不是消灭了空指针异常,而是通过更...

工作5年总结9种方式,帮你减少Java程序中80%的空指针异常

Java程序员工作中遇到最多的错误就是空指针异常,无论你多么细心,一不留神就从代码的某个地方冒出NullPointerException,真是令人头疼。到底怎么避免空指针异常?下面的方法能够帮助你。1...

「Java」一张图教会你关于null的几种处理方式(内附代码)

对于Java程序员来说,空指针一直是恼人的问题,我们在开发中经常会受到NullPointerException的蹂躏和壁咚。Java的发明者也承认这是一个巨大的设计错误。那么关于null,你应该知道下...

没用 Java 8,怎么优雅地避免空指针?

作者:汪小哥来源:https://blog.csdn.net/u012881904/article/details/68935009JDK 8 里面有 Optional ,如果你还在使用 JDK 7...