Java 中的 NullPointerException

2024年9月10日 | 阅读 6 分钟

在本教程中,我们将学习 Java 中的空指针异常。空指针异常是运行时异常。Null 是一种特殊类型的值,可以赋给对象的引用。每当有人尝试使用具有 Null 值的引用时,就会引发 NullPointerException。

空指针异常的不同场景

观察以下可能引发 NullPointerException 的一些场景。

  • 计算 Null 的大小或长度,就好像它是一个元素数组一样。

文件名: ThrowNullExcep.java

输出

Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "" is null at ThrowNullExcep.main(ThrowNullExcep.java:7)
  • 使用具有 Null 值的对象调用方法。

文件名: ThrowNullExcep1.java

输出

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "ThrowNullExcep1.foo()" because "" is null
	at ThrowNullExcep1.main(ThrowNullExcep1.java:13)
  • 当您尝试同步 NULL 对象时。

文件名: ThrowNullExcep2.java

输出

Exception in thread "Thread-0" Exception in thread "Thread-1" java.lang.NullPointerException: Cannot enter synchronized block because "this.sendr" is null
	at ThreadSend.run(ThrowNullExcep2.java:42)
java.lang.NullPointerException: Cannot enter synchronized block because "this.sendr" is null
	at ThreadSend.run(ThrowNullExcep2.java:42)
  • 而不是抛出值,而是抛出 Null。

文件名: ThrowNullExcep3.java

输出

Exception in thread "main" java.lang.NullPointerException: Cannot assign field "a" because "" is null
	at ThrowExcep3.main(ThrowExcep3.java:10)

Null 值的需求

null 是 Java 中使用的一种特殊值。它通常用于表示没有值被赋给引用变量。Null 值主要用于实现数据结构,如链表或树。它也用于单例模式。

避免 NullPointerException

为了避免 NullPointerException,在可以使用所有对象之前,应该确保正确初始化了所有对象。在声明引用变量时,在使用引用访问字段或方法之前,应验证是否未将 null 值赋给引用。

观察以下常见问题及其解决方案。

情况 1:将字符串与文字进行比较

一个常见的问题是将文字与 String 变量进行比较。文字可以是枚举元素或字符串。与其从 null 对象调用方法,不如考虑使用文字调用它。

文件名: NullPntrExcption.java

输出

NullPointerException has been caught.

现在,让我们看看如何避免它。

文件名: NullPntrExcption1.java

输出

NullPointerException has been caught.

情况 2:注意方法参数

必须先检查方法参数是否为 null 值,然后再执行方法。否则,很有可能会抛出 IllegalArgumentException,并向调用方法指示传递的参数有问题。

文件名: NullPntrExcption2.java

输出

0
3
IllegalArgumentException has been caught. java.lang.IllegalArgumentException: The argument can never be null.

情况 3:使用三元运算符

也可以使用三元运算符来避免 NullPointerException。在三元运算符中,首先评估布尔表达式。如果表达式评估为 true,则返回 val1。否则,返回 val2。

文件名: NullPntrExcption3.java

输出

String is Null.
javaTpoint