简介
在这个实验中,你将学习如何检查 Java 中的数组是否为 null
。我们将从理解如何检查数组引用本身是否为 null
开始,以防止出现 NullPointerException
。
接下来,我们将探讨如何将空值检查与长度检查相结合,以实现更健壮的数组处理。最后,你将通过处理一个已初始化的空数组来检验自己的理解程度。
在这个实验中,你将学习如何检查 Java 中的数组是否为 null
。我们将从理解如何检查数组引用本身是否为 null
开始,以防止出现 NullPointerException
。
接下来,我们将探讨如何将空值检查与长度检查相结合,以实现更健壮的数组处理。最后,你将通过处理一个已初始化的空数组来检验自己的理解程度。
null
在这一步中,你将学习如何检查 Java 中的数组引用是否为 null
。检查 null
是 Java 编程中的一项基本操作,可防止出现 NullPointerException
,这是一种常见的运行时错误。
当你试图将一个指向空值(即 null
)的变量当作对象使用时,就会发生 NullPointerException
。这就好比你试图打开一个根本不存在的盒子,当你遇到 NullPointerException
时,情况与此类似。
下面我们创建一个简单的 Java 程序,来演示如何检查数组引用是否为 null
。
如果 HelloJava.java
文件尚未在 WebIDE 编辑器中打开,请打开该文件。
将文件的全部内容替换为以下代码:
public class HelloJava {
public static void main(String[] args) {
String[] names = null; // Declaring an array reference and setting it to null
// Check if the array reference is null before trying to use it
if (names == null) {
System.out.println("The 'names' array is null.");
} else {
System.out.println("The 'names' array is not null.");
}
}
}
下面来看看这段代码的新增部分:
String[] names = null;
:这行代码声明了一个名为 names
的数组变量,该变量可以存储 String
对象。随后,我们立即将其赋值为 null
。这意味着 names
变量目前并未指向内存中的任何实际数组对象。if (names == null)
:这是一个 if
语句,用于在编程中进行条件判断。它会检查括号内的条件(names == null
)是否为真。==
运算符用于比较 names
变量是否等于 null
。System.out.println("The 'names' array is null.");
:只有当条件 names == null
为真时,才会执行这行代码。System.out.println("The 'names' array is not null.");
:只有当条件 names == null
为假(即 names
不为 null
)时,才会执行这行代码。保存文件(Ctrl+S 或 Cmd+S)。
编译修改后的程序。在终端中运行以下命令:
javac HelloJava.java
如果编译成功,你将不会看到任何输出。
运行编译后的程序:
java HelloJava
你应该会看到以下输出:
The 'names' array is null.
这个输出证实了我们的检查正确地识别出 names
数组引用为 null
。
理解如何检查 null
对于编写健壮的 Java 代码至关重要。在下一步中,我们将探讨当尝试访问一个为 null
的数组的长度时会发生什么,以及如何组合使用各种检查。
在上一步中,我们学习了如何检查数组引用是否为 null
。现在,让我们来探讨一下当尝试访问一个 null
数组的长度时会发生什么,以及如何将空值检查与数组长度检查结合起来。
尝试访问一个 null
数组引用的 .length
属性会导致 NullPointerException
。这是因为你试图访问一个不存在的对象的属性。
让我们修改程序来演示这一点,然后添加一个组合检查。
在 WebIDE 编辑器中打开 HelloJava.java
文件。
将文件的全部内容替换为以下代码:
public class HelloJava {
public static void main(String[] args) {
String[] names = null; // Declaring an array reference and setting it to null
// Attempting to access the length of a null array (will cause an error)
// int length = names.length; // Uncommenting this line would cause a NullPointerException
// Combine null check and length check
if (names != null && names.length > 0) {
System.out.println("The 'names' array is not null and has elements.");
} else {
System.out.println("The 'names' array is null or empty.");
}
}
}
以下是新增或修改的部分:
String[] names = null;
,以从一个 null
数组开始。// int length = names.length;
展示了如果我们直接尝试访问长度会发生什么。我们将其注释掉,这样程序就不会立即崩溃。if (names != null && names.length > 0)
:这是组合检查。
names != null
:这部分检查 names
数组引用是否 不是 null
。&&
:这是逻辑与运算符。&&
两边的条件都必须为真,整个条件才为真。names.length > 0
:这部分检查 names
数组的长度是否大于 0。由于 Java 中 &&
运算符的短路特性,只有当第一部分 (names != null
) 为真时,才会执行此检查。这可以防止 NullPointerException
。else
块现在会输出一条消息,表明数组要么是 null
,要么为空。保存文件(Ctrl+S 或 Cmd+S)。
编译修改后的程序:
javac HelloJava.java
同样,如果编译成功,将不会有输出。
运行编译后的程序:
java HelloJava
你应该会看到以下输出:
The 'names' array is null or empty.
这个输出表明我们的组合检查正确地识别出数组要么是 null
,要么为空。由于我们将其初始化为 null
,if
条件的第一部分 (names != null
) 为假,因此执行了 else
块。
像这样组合检查是在 Java 中安全处理数组引用的标准方法,可确保在检查长度等属性或访问元素时不会遇到 NullPointerException
。
在前面的步骤中,我们学习了如何检查数组引用是否为 null
,以及如何将其与长度检查结合起来。我们看到,组合检查能够正确识别出 null
数组。
现在,让我们使用一个不为 null
但为空(长度为 0)的数组来测试我们的组合检查。这是你会遇到的另一种常见情况。
在 WebIDE 编辑器中打开 HelloJava.java
文件。
修改声明并初始化 names
数组的那一行。将 String[] names = null;
改为 String[] names = new String[0];
。其余代码,包括带有组合检查的 if
语句,应保持不变。
更新后的代码应如下所示:
public class HelloJava {
public static void main(String[] args) {
String[] names = new String[0]; // Declaring and initializing an empty array
// Combine null check and length check
if (names != null && names.length > 0) {
System.out.println("The 'names' array is not null and has elements.");
} else {
System.out.println("The 'names' array is null or empty.");
}
}
}
以下是修改之处:
String[] names = new String[0];
:这行代码现在创建了一个大小为 0 的 String
对象数组。names
变量现在指向内存中的一个实际数组对象,但该数组不包含任何元素。它 不是 null
。保存文件(Ctrl+S 或 Cmd+S)。
编译修改后的程序:
javac HelloJava.java
如果编译成功,将不会有输出。
运行编译后的程序:
java HelloJava
你应该会看到以下输出:
The 'names' array is null or empty.
这个输出与数组为 null
时的输出相同。让我们来理解一下原因。我们的 if
条件是 if (names != null && names.length > 0)
。
names != null
:这部分现在为真,因为 names
指向一个空数组对象。names.length > 0
:这部分检查数组的长度是否大于 0。由于数组的长度为 0,这个条件为假。&&
条件的第二部分为假,整个条件 (names != null && names.length > 0)
的计算结果为假,因此执行 else
块。这表明我们的组合检查能够正确识别 null
数组和空数组,当你只想处理包含元素的数组时,这通常是你期望的行为。
在本次实验中,我们学习了如何检查 Java 中的数组引用是否为 null
,以防止出现 NullPointerException
。我们首先创建了一个简单的程序,演示了如何使用 if
语句和 ==
运算符来检查 null
数组引用。
然后,我们探讨了如何将空值检查与长度检查结合起来,以处理数组不为 null
但可能为空的情况。最后,我们使用一个已初始化的空数组对组合检查进行了测试,以理解 null
数组引用和空数组之间的区别。