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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值