空指针出现场景:
A.对象引用为null:当一个对象引用为null时,试图使用该对象的成员(如方法或字段)就会导致空指针异常。
B.对象属性为null:当一个类的属性没有被初始化或者赋值为null,在访问该属性时也会导致空指针异常。
C.数组为null:当一个数组引用为null时,试图访问数组的元素也会导致空指针异常。
解决思路:
1.在日常开发中空指针时长会遇到普通判空写法
if (obj != null) {
// 执行操作
}
这是最简单的判空方法,通过检查对象是否为空来避免空指针异常。但是,对于多个对象的判空,使用大量的条件判断会使代码冗长且难以维护。
2.多个条件放一起进行判空使用短路运算符
if (obj != null && obj.getString() != null) {
// 执行操作
}
使用逻辑与运算符(&&),可以将多个判空条件连接在一起。如果前一个条件不成立(即obj为null),则后续的条件不会被执行,从而避免出现空指针异常。
使用Java8的新特性工具类
3.Optional解决空指针异常(NullPointerException)的问题,并提供了一种优雅的方式来处理可能为空的对象。Optional类是一个容器类,它可以保存一个值,这个值可以是null,也可以是非null。
使用Optional类的主要目的是让代码更加健壮和可读,并鼓励开发者明确处理可能为空的情况,而不是简单地依赖于条件判断。以下是一些使用Optional类的常见操作:
- 创建Optional对象:
- 使用
Optional.of(value)
:使用非null的值创建Optional对象。如果传入的值为null,则会直接抛出NullPointerException。 - 使用
Optional.ofNullable(value)
:创建一个Optional对象,允许传入null值。
- 判断Optional对象是否包含值:
- 使用
isPresent()
方法:如果Optional对象包含非null的值,则返回true,否则返回false。
- 获取Optional对象的值:
- 使用
get()
方法:如果Optional对象中存在非null值,返回该值,否则抛出NoSuchElementException异常。 - 使用
orElse(defaultValue)
方法:如果Optional对象中存在非null值,返回该值,否则返回defaultValue。
- 处理Optional对象的值:
- 使用
ifPresent(Consumer<T> consumer)
方法:如果Optional对象中存在非null值,执行传入的消费函数consumer,可以在函数中对值进行相应的处理。 - 使用
orElseThrow(Supplier<X> exceptionSupplier)
方法:如果Optional对象为空,抛出由提供的异常供应函数创建的异常。
Optional<Object> optionalObj = Optional.ofNullable(obj);
if (optionalObj.isPresent()) {
Object value = optionalObj.get();
// 执行操作
}
4.使用三目运算符:
Object result = (obj != null) ? obj.getString() : null;
5.在设计和编写代码时,合理地初始化和赋值对象,尽量避免产生null引用。
public class MyClass {
private String name = "";
// ...
}
标签:obj,地判空,对象,优雅,使用,null,Optional,NullPointerException,指针
From: https://blog.51cto.com/u_16226278/7246174