前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >空指针异常--java.lang.NullPointerException

空指针异常--java.lang.NullPointerException

作者头像
疯狂的KK
发布2019-10-10 17:19:41
2.2K0
发布2019-10-10 17:19:41
举报
文章被收录于专栏:Java项目实战Java项目实战

苦于没有素材的时候,路上突然想起来同事说今天遇到好多调用方法走不下去,全都是空指针异常,刚写代码或者代码篇幅过多的时候,总会忘记防止空指针异常,那么就此总结下关于空指针异常,及解决方案。

1:什么是空指针异常?

  • 调用 null 对象的实例方法。
  • 访问或修改 null 对象的字段。
  • 将 null 作为一个数组,获得其长度。
  • 将 null 作为一个数组,访问或修改其时间片。
  • 将 null 作为 Throwable 值抛出。

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提供很多有用的方法,这样我们就不用显式进行空值检测

代码语言:javascript
复制
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,是程序员的基本修养。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 赵KK日常技术记录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档