概述
在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()方法并不会帮助你完成对指针的重定向。