苦于没有素材的时候,路上突然想起来同事说今天遇到好多调用方法走不下去,全都是空指针异常,刚写代码或者代码篇幅过多的时候,总会忘记防止空指针异常,那么就此总结下关于空指针异常,及解决方案。
1:什么是空指针异常?
2:怎么产生的?
《阿里巴巴开发手册》中提到,
1)返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
2) 数据库的查询结果可能为 null。
3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
5) 对于 Session 中获取的数据,建议 NPE 检查,避免空指针。
6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。正例:使用 JDK8 的 Optional 类来防止 NPE 问题。
3:如何防止
①对象防止,直接!=null
②集合类判空:一般采用!=null&&判断size(),或者调用isEmpty()方法,或者用Collection工具类判空,java8种Optional类
③字符串判空:需要判断是否==null&&"".equals(str)来判断,或者StringUtils工具类判断
另外项目中要对所有前台参数,对象判空,数据库查询语句判空,JSON对象,JSON数组判空,get()后的值判空
4:Optional类
JDK8中的Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测
Optional<Object> opt = Optional.empty();
Optional<Object> opt = Optional.of(new Object());
Optional<Object> opt = Optional.ofNullable(null);
if(opt.isPresent()){
System.out.println(opt.get());
}else{
System.out.println("没有数据");
}
如开发手册所说防止 NPE,是程序员的基本修养。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有