网站首页 > 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类,您可以利用它而不是创建自己的类
猜你喜欢
- 2025-03-30 用最通俗易懂的方式给你讲明白NullPointerException
- 2025-03-30 什么是“指针变量”?它为什么如此重要?
- 2025-03-30 野指针有多野(野指针有几种)
- 2025-03-30 知道空指针,你也能改bug了(空指针的问题怎么解决)
- 2025-03-30 「Java」一张图教会你关于null的几种处理方式(内附代码)
- 2025-03-30 Java中NullPointerException的完美解决方案
- 2025-03-30 java新特性之Optional类介绍,解决空指针问题的终极类
- 2025-03-30 没用 Java 8,怎么优雅地避免空指针?
- 2025-03-30 告别空指针-Kotlin这一点把Java比下去了
- 2025-03-30 java 中如何避免空指针(java中空指针异常的原因)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)