1、空指针异常
在Java中,当声明一个对象但没有为其分配内存(即没有用new关键字创建一个实例),则这个对象引用就会指向null
。如这种状态下尝试访问对象的方法或属性,就会抛出空指针异常(NullPointerException)。
public class Main {
public static void main(String[] args) {
String text = null;
int length = text.length(); // 这里会抛出NullPointerException
System.exit(0); //success
}
}
2、如何解决避免空指针异常
1)检查空指针
在使用对象之前,先检查它是否为null
。如果为空则抛出异常或采取其他措施。
例如,
public class Main {
public static void main(String[] args) {
String str = null;
if (str == null) {
throw new NullPointerException("str is null");
}
// 使用 str
String text = null;
int length = text.length();
System.exit(0); //success
}
}
2)使用 Optional 类
Java 8 引入的 Optional
类可以用于表示可能为 null
的值。这有助于避免直接使用 null
。
例如,
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// 获取一个可能为 null 的字符串
Optional<String> optionalString = Optional.ofNullable(getStringValue());
// 检查 Optional 对象是否有值
if (optionalString.isPresent()) {
// 如果有值,则打印它
System.out.println(optionalString.get());
} else {
// 如果没有值,打印默认消息
System.out.println("No value present");
}
System.exit(0); //success
}
// 模拟一个可能返回 null 的方法
public static String getStringValue() {
// 模拟条件,可以返回 null 或非 null 值
boolean returnsNull = Math.random() < 0.5;
if (returnsNull) {
return null;
} else {
return "Hello, World!";
}
}
}
3)提供默认值
当预期的引用可能为 null
时,提供一个默认值。
import java.util.Optional;
public class Main {
public static void main(String[] args) {
// 获取一个可能为 null 的字符串
String text = Optional.ofNullable(getStringValue()).orElse("default");
System.out.println(text);
int length = text.length();
System.out.println(length);
System.exit(0); //success
}
// 模拟一个可能返回 null 的方法
public static String getStringValue() {
// 模拟条件,可以返回 null 或非 null 值
boolean returnsNull = Math.random() < 0.5;
if (returnsNull) {
return null;
} else {
return "Hello, World!";
}
}
}