更新时间:2020-07-31 16:03:02 来源:极悦 浏览1868次
在平时的业务开发中,空值处理是非常麻烦的,Java中的空指针异常让人崩溃,每次看到日志中出现的那些NPE Error日志,都让人痛不欲生。为了避免这么多空指针异常,你的Java程序中是不是遍布着null检查?
null是一个讨厌鬼
null语义不明,通常null什么都不能代表,而又什么都能代表。如果你不检查,空指针异常必定会在最关键的时候蹦出来。
比如说:
对于集合类型来说,空有两种含意:
1、变量是空引用,也就是变量没指向一个集合类型。
2、集合中元素数量为0。
所以经常我们要做如下的检查
list!=null&&list.size()>0
那我们就像上面一样在每一处都做空值检查如何呢?理论上可以,但是实际实行时却困难重重,可能会引起如下的问题:
增加代码长度
问题:大部分代码都是在检查空值上面;一个方法30行代码,有10行是检查各种参数,10行进行异常处理,5行进行业务处理,再写5几行注释。你是这是什么事儿啊。
减少写代码的乐趣
问题:注意力集中的时间段是非常宝贵的。现在的互联网公司,办公区开放、各部门都混坐一起,如果你跟产品和运营坐在一起,那么你从早到晚不停的被打扰,8小时工作时间能集中精力3个小时已经很不容易了。而这短短的有效时间内,还要编写大量的防御性代码,别人不知道,对于我来说,大量编写这样的代码经常会让我思路分散,反而导致我在真正的业务代码上面出错。
这个问题怎么破
实话是:很难破
多年编码后也仅仅总结了几个规约,可以减轻空值带来的痛苦:
对于空值最常用的办法就是:不相信任何输入输出值,每一个关键的参数都需要检查。关键的意思是:如果为空就影响业务处理了。
如果集合中没有元素,使用size为0的空集合对象,不要使用null。
除非null有特殊含意,方法返回的普通对象都不为null。如:从数据库查找对象的方法,如:findById,返回null表示没有找到对象。
使用基本的值类型,而不使用包装过的类型,如:使用int double等等,不使用Integer
免不了有null时,使用guava中的Optional对象,据说可以方便的检查和操作null,JDK8以后也在java.util包中增加了Optional对象。但是实际它的作用更多的是提醒程序员要注意空值处理而已。
集合对象中不保存null。
Map中不保存value为null的K-V对儿,也不用null做key。
使用高效工具对入参为null进行检查,如Spring中的Asserts工具类,Guava中的Preconditions工具类;
以上就是极悦java培训机构的小编针对“编程基础Java空指针异常”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习