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!"; } } }