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

举报
赵KK日常技术记录 发表于 2023/06/30 23:36:20 2023/06/30
【摘要】   苦于没有素材的时候,路上突然想起来同事说今天遇到好多调用方法走不下去,全都是空指针异常,刚写代码或者代码篇幅过多的时候,总会忘记防止空指针异常,那么就此总结下关于空指针异常,及解决方案。        1:什么是空指针异常?调用 null 对象的实例方法。访问或修改 null 对象的字段。将 null 作为一个数组,获得其长度。将 null 作为一个数组,访问或修改其时间片。将 null...

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

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

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,是程序员的基本修养。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。