java数组声明需明确类型与维度,推荐int[] arr写法;初始化分静态、动态、匿名三类;遍历优先增强for但需防null,传统for适用于索引操作。

Java 中数组的声明、初始化与遍历看似基础,但实际编码中常因类型匹配、内存分配时机或循环边界处理不当引发 NullPointerException 或 ArrayIndexOutOfBoundsException。关键在于理解数组是对象、其长度不可变、且元素默认初始化这三点。
声明时明确类型与维度,避免混淆语法糖
Java 数组声明支持两种等价写法(如 int[] arr 和 int arr[]),但推荐将方括号紧贴类型,体现“数组是一种引用类型”。多维数组声明需注意:只有第一维可省略长度,其余维度必须在初始化时确定。
-
正确声明:
String[][] names = new String[3][];—— 允许后续为每行单独分配长度 -
错误写法:
int[5] nums;—— 编译失败,声明阶段不能指定长度 -
类型安全提醒:泛型不支持基本类型数组,
List<int></int>合法,但List<int></int>不合法;需用Integer包装
初始化分三类场景:静态、动态与匿名
数组初始化本质是堆内存分配 + 元素默认赋值(如 int→0,Object→null)。选择方式取决于数据是否已知、是否需复用引用。
-
静态初始化:适用于编译期确定值,如
int[] a = {1, 2, 3};—— 等价于new int[]{1,2,3} -
动态初始化:运行时决定大小,如
double[] scores = new double[studentCount];—— 所有元素自动设为 0.0 -
匿名数组:仅用于方法调用或临时结构,如
printScores(new int[]{85, 92, 78});—— 无变量名,生命周期由 GC 管理
遍历优先选增强 for,但需警惕修改与越界
增强 for 循环(for-each)语义清晰、不易越界,适合只读或简单修改;传统 for 循环必要时才用(如需索引、反向遍历、跳过元素)。
-
安全遍历:
for (String s : strArray) { System.out.println(s); }—— 自动判空?不!若strArray为 null,仍抛 NPE -
带索引需求:用传统 for,注意边界是
i ,而非 <code>i (后者易错) -
并发修改风险:遍历时调用
Arrays.asList(arr).remove()会抛UnsupportedOperationException—— 数组转 List 是固定大小视图
实战技巧:结合工具类与流式处理提升健壮性
原生数组操作易出错,JDK 提供的工具类和 Stream API 可显著降低风险。
-
非空校验:用
Objects.requireNonNull(arr, "array must not be null")替代手动 if 判空 -
安全复制:
int[] copy = Arrays.copyOf(original, original.length);比手动循环更可靠 -
函数式遍历:对大数组或需过滤/映射时,
Arrays.stream(arr).filter(x -> x > 0).forEach(System.out::println);更具表达力
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











