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

createh51周前 (03-06)技术教程2

我想问的是有关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 判断对象是否所有属性为空,大家觉得这样写可以吗?

序言:在开发Excel数据导入的时候,后台拿到Excel中的数据并接收到List泛型集合中,发现有很多对象的属性全部为null,想通过代码将这些无效的数据给过滤掉,下面是过滤的具体操作。ObjectU...

java8之Optional 判空,简化判空操作

导语在没有用Optional判空之前,你是否也像下面的代码一样判空呢?如果是,请往下看,Optional 相对传统判空的优势。传统阶层判空为什么要用Optional,它到底是什么东西你也看到了上面的那...

Java中的空指针怎么处理?

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

java 中如何避免空指针

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

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

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