java数组空指针异常源于数组引用为null或元素为null时未判空,需分别防护:遍历前检查数组引用是否为空,访问元素前检查元素是否为空,对象数组需手动实例化,推荐用optional、工具方法及注解增强健壮性。

Java数组遍历中触发空指针异常,通常不是因为“数组里有空值”,而是因为数组引用本身为null,或元素为null却直接调用方法。关键在分清这两层null,并针对性防护——判空要落在该判的地方,初始化要落在该初始化的位置。
先确认数组引用是否为空
声明但未初始化的数组变量(如 String[] arr;),其值就是 null。此时连 arr.length 都会抛出 NullPointerException。
- 遍历前必须显式检查:
if (arr != null) { /* 安全遍历 */ } - 推荐用工具方法增强可读性:
Objects.nonNull(arr)或ArrayUtils.isNotEmpty(arr)(Apache Commons) - 方法参数建议加
@NonNull注解(配合 Lombok 或 IDE 静态检查),让问题在编译期暴露
遍历时逐个判断元素是否为空
数组存在(arr != null)不等于元素都非空。例如 new String[5] 创建的是 5 个 null 引用,这是合法且常见的状态。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 不能写:
arr[i].trim()—— 若arr[i]是null,立刻崩溃 - 应写:
if (arr[i] != null) { arr[i].trim(); } - 流式处理要过滤:
Arrays.stream(arr).filter(Objects::nonNull).map(String::trim).collect(...) - 若业务不允许元素为
null,初始化后主动填充默认值,或改用List配合不可变容器约束
对象数组需额外注意实例化
像 Count[] arr = new Count[101]; 只分配了 101 个 null 引用空间,每个位置并未自动创建 Count 实例。访问 arr[i].count++ 就是在对 null 操作。
- 推荐懒初始化:首次使用时再创建实例,避免无意义开销
if (arr[i] == null) arr[i] = new Count(); - 避免全量遍历未使用的索引,尤其在稀疏统计场景中
- 输入值务必校验范围,防止
ArrayIndexOutOfBoundsException和后续误判为NullPointerException
用 Optional 或封装方法提升语义清晰度
当某个元素可能为空且属于正常业务逻辑(比如用户昵称可选),用 Optional 显式表达“可能存在/不存在”,比裸 null 更安全、更易维护。
- 包装单个元素:
Optional<string> name = Optional.ofNullable(arr[i]);</string> - 链式安全转换:
name.map(String::toUpperCase).orElse("ANONYMOUS") - 也可封装工具方法:
safeGet(arr, i, "default"),内部统一判空并返回默认值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










