对象数组声明后默认为null,初始化后元素仍为null;空指针异常多因对null元素调用方法或运算;预防需区分“数组为空”与“元素为空”,使用前校验数组引用和元素双重状态,并优先初始化及填充默认值。

对象数组本身是引用类型,声明后默认值为 null;即使初始化了数组(如 String[] arr = new String[5]),其中每个元素仍默认为 null。空指针异常常发生在对这些 null 元素调用方法、访问字段或参与运算时。预防核心在于:**区分“数组为空”和“元素为空”,并在使用前明确校验层级**。
初始化数组并预设非null元素
避免在后续逻辑中反复判空,从源头减少隐患:
- 声明即初始化:用
new Type[size]创建数组,而非只声明(如String[] arr;) - 批量填充默认值:尤其适用于工具类或配置类场景
String[] arr = new String[3];<br>Arrays.fill(arr, ""); // 所有元素设为空字符串
- 构造时直接赋值:
Integer[] nums = {1, 2, null, 4};虽然含null,但语义清晰,便于后续针对性处理
访问前检查数组和元素双重状态
不能只判 arr != null 或只查 arr.length > 0,必须分两步确认:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 先确保数组引用不为空:
if (arr == null) return;或抛出明确异常 - 再确保索引合法且元素非空:
if (i >= 0 && i - 对字符串等常用类型,优先用安全工具方法:
Objects.toString(arr[i], "")、Objects.equals(arr[i], "target")
用集合替代裸数组提升安全性
数组长度固定、无内置空值管理,而 List 更易封装约束:
- 返回空集合而非
null:return list != null ? list : Collections.emptyList(); - 使用
ArrayList并配合Optional处理单个元素:Optional.ofNullable(list.get(i)).map(String::toUpperCase).orElse("") - 流式操作自动跳过
null(需主动过滤):Arrays.stream(arr).filter(Objects::nonNull).map(String::trim).collect(Collectors.toList())
借助注解与工具提前暴露问题
让空值风险在编码阶段就浮现,而不是等到运行时报错:
- 在IDE中启用空值分析:IntelliJ / Eclipse 开启
@NotNull/@Nullable检查,对数组参数标注@NonNull String[] arr - 用
Objects.requireNonNull(arr, "arr must not be null")替代手动 if 判空,异常信息更明确 - 静态检查工具如 SpotBugs 可扫描
arr[i].toString()类未判空调用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










