简介
在这个实验中,你将学习如何检查 Java 数组是否包含 null 元素。处理 null 值是 Java 编程中的一项基本技能,可防止像 NullPointerException
这样的常见错误。我们将探索三种不同的方法来实现这一目标:使用循环遍历数组、利用 Stream API 的强大功能,以及统计数组中存在的 null 元素的数量。在本实验结束时,你将掌握在 Java 数组中有效识别和管理 null 值的实用技巧。
在这个实验中,你将学习如何检查 Java 数组是否包含 null 元素。处理 null 值是 Java 编程中的一项基本技能,可防止像 NullPointerException
这样的常见错误。我们将探索三种不同的方法来实现这一目标:使用循环遍历数组、利用 Stream API 的强大功能,以及统计数组中存在的 null 元素的数量。在本实验结束时,你将掌握在 Java 数组中有效识别和管理 null 值的实用技巧。
在这一步中,你将学习如何通过遍历 Java 数组的元素来检查其中是否存在 null
值。处理 null
值在 Java 中至关重要,可避免常见的 NullPointerException
错误。
在 Java 里,null
值表示变量不引用任何对象。当你尝试访问一个值为 null
的变量的方法或字段时,就会抛出 NullPointerException
,导致程序崩溃。
下面我们创建一个简单的 Java 程序,演示如何遍历数组并检查其中的 null
元素。
在 WebIDE 编辑器中打开 HelloJava.java
文件。如果你还未打开该文件,可以在左侧的文件资源管理器中,于 project
文件夹内找到它。
将 HelloJava.java
中的现有代码替换为以下代码:
public class HelloJava {
public static void main(String[] args) {
String[] names = new String[5]; // Declare an array of Strings with size 5
names[0] = "Alice";
names[1] = "Bob";
names[2] = null; // Assign a null value
names[3] = "Charlie";
names[4] = null; // Assign another null value
System.out.println("Checking array for null values:");
// Loop through the array
for (int i = 0; i < names.length; i++) {
// Check if the current element is null
if (names[i] == null) {
System.out.println("Element at index " + i + " is null.");
} else {
System.out.println("Element at index " + i + " is: " + names[i]);
}
}
}
}
下面来看看这段代码的新增部分:
String[] names = new String[5];
:这行代码声明了一个名为 names
的数组,它可以容纳 5 个 String
对象。当你创建这样的对象数组时,元素会自动初始化为 null
。names[2] = null;
和 names[4] = null;
:我们显式地将索引 2 和 4 处的元素赋值为 null
。for (int i = 0; i < names.length; i++)
:这是一个标准的 for
循环,用于从数组的第一个元素(索引 0)遍历到最后一个元素(names.length - 1
)。if (names[i] == null)
:在循环内部,这个 if
语句用于检查当前索引 i
处的元素是否等于 null
。System.out.println("Element at index " + i + " is null.");
:如果元素为 null
,则执行这行代码。System.out.println("Element at index " + i + " is: " + names[i]);
:如果元素不为 null
,则执行这行代码,打印出元素的值。保存 HelloJava.java
文件(Ctrl+S 或 Cmd+S)。
现在,编译修改后的程序。打开 WebIDE 底部的终端,并运行以下命令:
javac HelloJava.java
如果没有错误,编译就会成功。
最后,运行编译后的程序:
java HelloJava
你应该会看到类似以下的输出:
Checking array for null values:
Element at index 0 is: Alice
Element at index 1 is: Bob
Element at index 2 is null.
Element at index 3 is: Charlie
Element at index 4 is null.
这个输出表明我们的程序成功识别并报告了数组中的 null
元素。
在这一步中,你学会了如何手动遍历 Java 数组,并使用简单的 if
条件检查每个元素是否为 null
。这是处理潜在 NullPointerException
的基本技巧。
在上一步中,我们使用传统的 for
循环来检查数组中的 null
值。Java 8 引入了 Stream API,它提供了一种更具函数式风格且通常更简洁的方式来处理数据集合,包括数组。在这一步中,你将学习如何使用 Stream API 来检测 null
元素。
Stream API 允许你以声明式的方式对元素序列执行操作。这意味着你只需描述 要做什么,而不是 如何去做(不像使用 for
循环那样)。
下面我们修改 HelloJava.java
程序,使用 Stream API 来查找并打印 null
元素。
在 WebIDE 编辑器中打开 HelloJava.java
文件。
将现有代码替换为以下代码:
import java.util.Arrays; // Import the Arrays class
import java.util.Objects; // Import the Objects class
public class HelloJava {
public static void main(String[] args) {
String[] names = new String[5];
names[0] = "Alice";
names[1] = "Bob";
names[2] = null;
names[3] = "Charlie";
names[4] = null;
System.out.println("Checking array for null values using Stream API:");
// Convert the array to a Stream
Arrays.stream(names)
// Filter for null elements
.filter(Objects::isNull)
// Print each null element (or a message indicating null)
.forEach(name -> System.out.println("Found a null element."));
}
}
下面来详细分析新增的部分:
import java.util.Arrays;
:我们需要导入 Arrays
类,以便使用其 stream()
方法。import java.util.Objects;
:我们导入 Objects
类,以便使用 isNull()
方法,这是一种方便的检查对象是否为 null
的方式。Arrays.stream(names)
:这行代码将我们的 names
数组转换为一个 String
对象的 Stream
。.filter(Objects::isNull)
:这是一个中间操作。它对流进行过滤,只保留 Objects.isNull(element)
条件为真的元素(即 null
元素)。Objects::isNull
是一个方法引用,是 name -> Objects.isNull(name)
这种 lambda 表达式的简写形式。.forEach(name -> System.out.println("Found a null element."));
:这是一个终端操作。它对流中剩余的每个元素(即过滤后的 null
元素)执行一个操作。在这种情况下,它会为每个找到的 null
元素打印 "Found a null element."。保存 HelloJava.java
文件。
在终端中编译程序:
javac HelloJava.java
运行程序:
java HelloJava
你应该会看到类似以下的输出:
Checking array for null values using Stream API:
Found a null element.
Found a null element.
这个输出证实了 Stream API 成功识别出了数组中的两个 null
元素。对于某些操作(如过滤和处理集合),使用流可以使你的代码更具可读性和表现力。
在前面的步骤中,你已经学习了如何使用 for
循环和 Stream API 来识别数组中的 null
元素。有时候,你可能不仅仅是要识别 null
元素,还需要确切知道数组中到底有 多少个 null
元素。在这一步中,你将学习如何使用 Stream API 来统计 null
元素的数量。
Stream API 提供了一个方便的方法 count()
,当对一个流应用该方法时,它会返回该流中元素的数量。你可以将这个方法与之前使用过的 filter()
操作结合起来,只统计 null
元素的数量。
下面我们再次修改 HelloJava.java
程序,统计 null
元素的数量并打印出总数。
在 WebIDE 编辑器中打开 HelloJava.java
文件。
将现有代码替换为以下代码:
import java.util.Arrays;
import java.util.Objects;
public class HelloJava {
public static void main(String[] args) {
String[] names = new String[5];
names[0] = "Alice";
names[1] = "Bob";
names[2] = null;
names[3] = "Charlie";
names[4] = null;
System.out.println("Counting null values using Stream API:");
// Convert the array to a Stream
long nullCount = Arrays.stream(names)
// Filter for null elements
.filter(Objects::isNull)
// Count the remaining elements (which are null)
.count();
System.out.println("Total number of null elements: " + nullCount);
}
}
下面是新增的部分:
long nullCount = ... .count();
:在对流进行过滤,使其仅包含 null
元素之后,我们调用 count()
终端操作。该操作会将过滤后流中的元素数量作为 long
类型的值返回,并将其存储在 nullCount
变量中。System.out.println("Total number of null elements: " + nullCount);
:这行代码打印出 null
元素的最终统计数量。保存 HelloJava.java
文件。
在终端中编译程序:
javac HelloJava.java
运行程序:
java HelloJava
你应该会看到以下输出:
Counting null values using Stream API:
Total number of null elements: 2
这个输出表明我们的程序正确统计出了数组中的两个 null
元素。将 Stream API 的 filter()
和 count()
方法结合使用,是一种高效且易读的方式,可用于统计集合中特定类型元素的数量,包括 null
值。
现在,你已经学习了三种不同的方法来处理 Java 数组中的 null
值:使用传统的 for
循环检查每个元素、使用 Stream API 过滤并识别 null
元素,以及使用 Stream API 过滤并统计 null
元素的数量。这些技术是编写健壮的 Java 代码、避免 NullPointerException
的基础。
在本次实验中,你学习了如何使用不同的方法来检查 Java 数组中的 null
元素。首先,你实现了一个传统的循环来遍历数组,并使用 if
条件显式地检查每个元素是否为 null
。这种方法清晰且基础,有助于你理解数组中处理 null
值的基本概念。
接着,你探索了更现代、更简洁的 null
检测技术。本实验展示了如何利用 Java Stream API 来高效地检查 null
值。这种方法利用流操作来处理数组元素,并以更具函数式风格的方式确定 null
值的存在。最后,你学习了如何统计数组中 null
元素的数量,从而能够量化 null
值的存在程度。这些方法在处理 Java 数组中的 null
值时,提供了不同程度的表达性和效率。