今天看了一篇空指针异常处理的文章,觉得非常实用,特意整理了一些处理空指针异常的方案!

1、前言

对于刚入门的程序员来说,往往被NPE(Null Pointer Exception)也就是所谓的指针异常搞得头昏脑涨,非常恶心,而处理NPE,防止NPE的存在是一个程序员的基本修养。现在我们就利用Java8的新特性 Optional 来高效处理空指针的同时也可以简化代码。

2、NPE

NPE(Null Pointer Exception)空指针是Java中最常见的异常,它是属于运行时的异常,当Java尝试去调用真实对象上的任何方法时,如果在运行中,该对象调用的是空引用(Null Reference) 那么就会抛出异常。

NPE产生的原因有如下几种:

<1>字符串变量未初始化

<2>接口类型的对象没有用具体的类初始化

如:List list;---会报错

List list = new ArrayList();---则不会报错

<3>当一个对象的值为空时

3、Optional

Optional类是Java 8 引入的一个很有趣的特性,他主要是为了解决臭名昭著的空指针异常(NPE)

  • Optional 类是一个可以为 null 的容器对象。如果值存在则 isPresent()方法会返回true,调用get()方法会返回该对象。
  • Optional 类是个容器:它可以保存类型T的值,或者仅仅保存null。

3.1、Optional 对象创建

首先,我们打开Optional类,去看一下Optional类都有哪些方法

这里看一下几个创建Optional对象的方法:

Optional类中的两个构造方法都是 private 私有的,我们没办法在外面new Optional对象。

这个静态方法是创建一个包装值为空的一个对象

这个静态方法是创建一个包装值非空的一个对象

这个静态方法是如果参数value为空,则创建一个空对象,如果value不为空,则创建一个有参对象

下面做一个简单的实例,分别与上面的几个方法对象:

<1>创建一个包装对象值为空的Optiional对象

Optional<String> optEmpty = Optional.empty();

<2>创建一个包装对象值非空的Optional对象

Optional<String> optOf = Optional.of("optional");

<3>创建包装对象值允许为空也可以不为空的Optional对象

Optional<String> optNullable = Optional.ofNullable(null);

Optional<String> optOfNullable = Optional.ofNullable("optional");

 3.2、Optional.get()方法 --- 返回对象的值

get()方法是返回一个Optional的实例值

如果value不为空则做返回,如果value为空则抛出异常“No Value present”,简单实例展示如下:

 3.3 、Optional.isPresent()方法 --- 判断是否为空

isPresent()方法就是会返回一个boolean类型值,如果对象不为空则为true,如果为空则为false

简单实例展示

 3.4、Optional.ifPresent()方法 --- 判断是否为空并返回函数

ifPresent()方法是如果对象不为空,则运行函数体

简单实例

如果对象不为空,则会执行这个函数打印年龄,其内部已经做了非空判断,不用担心出现空指针异常的情况。

3.5、Optiional.filter()方法 -- 过滤对象

filter()方法的意思是接受一个对象,然后对它进行条件过滤,如果条件符合则返回Optional对象本身。如果不符合则犯规空Optional。

简单实例

本期内容先暂时讲到这里,下期咱们再讲Optional类剩下的几个方法。

高效处理NPE(空指针)异常的方法(一)相关推荐

  1. 高效处理NPE(空指针)异常的方法(二)

    前言 上篇文章中我们提到了空指针异常以及利用Optional类处理空指针异常的几个方法,现在我们继续说下Optional类剩下的几个常用方法. 1 .Optional.map()方法(对象进行二次包装 ...

  2. 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法...

    今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: String pat ...

  3. activeMQ高并发发送消息异常解决方法

    高并发发送消息异常解决方法: 现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not conne ...

  4. java null指针_注意:java 这些地方经常发生 NullPointerException(空指针)异常

    上一篇文章讲到java NullPointerException异常处理,这一篇来讲一下具体有哪些地方容易遇到NullPointerExcetion(空指针)异常. 磨刀不误砍柴工,不太清楚空指针的朋 ...

  5. 14种异常检测方法总结

    作者丨Ai 来源丨宅码 编辑丨极市平台 本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码).不足之处,还望批评指正. 一.基于分布的方法 1. 3sigma 基于正态分布,3sigma ...

  6. lambda stream流处理异常的方法/Either不终止stream流处理异常

    lambda stream流处理异常的方法/Either不终止stream流处理异常 1.直接用try/catch捕获 1.1 stream流中使用try/catch 案例如下,在list中存在可能引 ...

  7. 消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

    消除安卓SDK更新时的"https://dl-ssl.google.com refused"异常的方法 消除安卓SDK更新时的"https://dl-ssl.google ...

  8. Enhanced-RCNN: 一种高效的比较句子相似性的方法 |​WWW 2020

    作者 | 彭爽 出品 | AI科技大本营(ID:rgznai100) 国际顶级会议WWW2020将于4月20日至24日举行.始于1994年的WWW会议,主要讨论有关Web的发展,其相关技术的标准化以及 ...

  9. [转]设计高效SQL: 一种视觉的方法

    原文地址:http://www.itpub.net/thread-1357925-1-1.html 英文原文:http://www.simple-talk.com/sql/performance/de ...

最新文章

  1. python布尔系列_python – 获取pandas布尔系列为True的索引列表
  2. string 类的初始化和赋值(程序成长之路的一颗米)
  3. 代码Review发现问题
  4. [html] iframe可以使用父页面中的资源吗(如:css、js等)?
  5. 设计模式(4)----抽象工厂模式
  6. 优质的vray视频教程素材推荐,不容错过
  7. 秒懂!何凯明的深度残差网络PPT是这样的|ICML2016 tutorial
  8. 计算机键盘上的每一个按键编码,键盘按键修理
  9. JavaWeb-16 (E家园项目案例1)
  10. fullPage.js使用
  11. Ubuntu18.04和Win10共享文件夹
  12. 分散性与变异性的度量——全距、四分位距、标准差、标准分
  13. 2020李宏毅学习笔记——15.Recurrent Netural Network 上
  14. 软件测试体系学习及构建(8)-HTML之图像,表格,列表,区块
  15. 怎样用电脑收发短信?
  16. nginx php 设置时区,laravel5.8(二十)解决时区设置差8个小时解决办法
  17. ui(new Ui::MainWindow) 解惑
  18. yuv与rgb图像格式转换
  19. 精读《对 Markdown 的思考》
  20. GIF录制器之-ScreentoGif--非常好用

热门文章

  1. Java设计模式之设计原则-里氏替换原则 (LSP)
  2. conda环境名称消失问题
  3. [RFID]射频卡介绍(一)ID-EM4100
  4. 分享一些web前端工程师常用且实用的网站
  5. 文本分析——分配单词权重
  6. 微信公众号开发整理(一)所有微信资料整理参考慕课网学习而得
  7. 单圆盘转子的临界转速和不平衡响应
  8. 怎样学Java才是硬道理
  9. 群辉(NAS)的虚拟机套件环境下安装window7系统
  10. 海康安防平台监控画面通道命名修改