容易引发NullPointerException异常的场景
- 对象未初始化直接使用
String str;
int length = str.length(); // 这里会抛出NullPointerException,因为str未初始化
- 方法返回值可能为null时直接使用
- 比如调用一个返回字符串的方法,而该方法在某些情况下可能返回null:
public String getString() {
// 假设这里根据某个条件返回null
if (Math.random() > 0.5) {
return null;
}
return "test";
}
public void useString() {
String result = getString();
int length = result.length(); // 如果getString()返回null,这里会抛异常
}
- 数组元素为null时访问其属性或方法
String[] strArray = new String[2];
strArray[0] = "hello";
int length = strArray[1].length(); // strArray[1]为null,会抛异常
- 通过空对象调用方法
Object obj = null;
obj.toString(); // 这里会抛出NullPointerException,因为obj为null
避免NullPointerException异常的处理方法
- 使用前判空
String str;
if (str!= null) {
int length = str.length();
}
public void useString() {
String result = getString();
if (result!= null) {
int length = result.length();
}
}
- 使用Optional类(Java 8及以上)
import java.util.Optional;
public String getString() {
// 假设这里根据某个条件返回null
if (Math.random() > 0.5) {
return null;
}
return "test";
}
public void useString() {
Optional<String> result = Optional.ofNullable(getString());
result.ifPresent(s -> {
int length = s.length();
});
}
- 初始化对象
- 对于对象未初始化直接使用的场景,可以在声明时初始化:
String str = "";
int length = str.length();
- 对数组元素进行检查
String[] strArray = new String[2];
strArray[0] = "hello";
if (strArray[1]!= null) {
int length = strArray[1].length();
}