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

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

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类剩下的几个方法。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值