专栏首页赵KK日常技术记录空指针异常--java.lang.NullPointerException

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

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

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

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

本文分享自微信公众号 - 赵KK日常技术记录(gh_cc4c9f1a9521)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典面试题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    ITXDL
  • 知难而上,砥砺前行

    0.说在前面1.数据处理2.Apoc导入3.Neo4J导入展示4.Web开发5.动态交互可视化6.可视化展示7.作者的话

    公众号guangcity
  • django Highcharts制作图表--显示CPU使用率

    Highcharts 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表

    测试开发社区
  • 掌握 Spring 之异常处理

    这次我们学习 Spring 的异常处理,作为一个 Spring 为基础框架的 Web 程序,如果不对程序中出现的异常进行适当的处理比如异常信息友好化,记录异常日...

    闻人的技术博客
  • Scrapy框架之爬取城市天气预报

    1.项目初始化2.提取数据 2.1 原理分析 2.2 数据抽取 2.3 自定义spider3.存储数据 3.1 修改settings.py 3.2 数据存储4....

    公众号guangcity
  • 由于Gson转换导致int转换成double的问题,使用fastjson替代

    用了几种方式尝试解决无效,得知后台是用的fastjson,于是使用fastjson替代。

    Jingbin
  • ajax+json实现echarts多个统计图显示

    前端时常会遇到这样的问题,有一个单独的模块用作统计图,将多个折线或者柱状图,混合使用,下面的例子是用ajax+json模拟了调用接口实现echarts多个统计图...

    祈澈菇凉
  • JDK_1.9API中文版,java开发者必备

      Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。这时候就得面对两个基础的问题:...

    框架师
  • IT兄弟连 JavaWeb教程 AJAX以及JSON字符串经典案例

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    ITXDL
  • IT兄弟连 JavaWeb教程 JSON和JSON字符串

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    ITXDL

扫码关注云+社区

领取腾讯云代金券