java空指针的显性预防和测试

概述

在java中我们不鼓励创建引用型变量而不确定指向,这会导致难以维护的空指针异常,而有些时候我们也可以在代码中显性的处理可能出现的空指针异常,这里就提到了Objects类中提供的两个静态方法,requireNonNullElse()和requireNonNull(),注意此处不是Object类。

特性

1.requireNonNullElse()可以给定两个参数,若obj为空指针,则会指向defaultObj。

public static <T> T requireNonNullElse(T obj, T defaultObj)

2.requireNonNull()可以给定两个参数,若obj为空指针,则会带message抛异常。

public static <T> T requireNonNull(T obj, String message)

代码

1.使用requireNonNullElse()方法

public class Main {
    public static void main(String[] args) {
        String str = null;

        // 使用 requireNonNullElse 方法检查对象是否为 null
        str = Objects.requireNonNullElse(str, "unknown");

        // 此行会继续执行
        System.out.println(str.length());
    }
}
7

进程已结束,退出代码0

 2.使用requireNonNull()方法

public class Main {
    public static void main(String[] args) {
        String str = null;

        // 使用 requireNonNull 方法检查对象是否为 null
        Objects.requireNonNull(str, "字符串对象不能为 null");

        // 此行不会执行,因为上面的 requireNonNull 方法会抛出异常
        System.out.println(str.length());
    }
}
Exception in thread "main" java.lang.NullPointerException: 字符串对象不能为 null
	at java.base/java.util.Objects.requireNonNull(Objects.java:235)
	at com.company.Main.main(Main.java:11)

进程已结束,退出代码1

经验总结

1.对于可能出现的空指针异常,我们可以选择赋一个值继续执行,也可以抛异常结束执行。

2.对于抛异常结束执行,可以直接调用Objects的方法;而对于赋值继续执行,则需要记得赋值给原对象的引用,requireNonNullElse()方法并不会帮助你完成对指针的重定向。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值