一聚教程网:一个值得你收藏的教程网站

热门教程

Java 数组声明与初始化的避坑指南

时间:2026-06-18 08:42:58 编辑:袖梨 来源:一聚教程网

Java数组应声明为int[] arr而非int arr[],优先使用{ }静态初始化或new动态初始化,避免悬空声明导致NullPointerException。

Java数组看似简单,但声明和初始化稍有不慎,就容易引发NullPointerException、越界异常或语义混淆。关键不是“能跑通就行”,而是选对写法,让代码一眼可读、不易出错、便于维护。

声明必须用 int[] arr,别写成 int arr[]

这是最基础也最容易被忽视的一点。推荐写法是 int[] numbers,它明确表达“numbers 是一个 int 数组”;而 int numbers[] 是 C 风格遗留写法,容易让人误以为 “numbers 是 int 类型,加了 [] 修饰”,尤其在多维数组如 int[][] matrixint matrix[][] 对比时,后者语义模糊、易出错。

  • 正确: String[] namesbyte[][] data
  • 不推荐: String names[]byte data[][]

已知全部元素,直接用 { } 静态初始化

如果编译期就能确定所有值——比如状态码、配置项、测试用例数据——就该用最简洁、最安全的方式:

  • int[] status = {200, 401, 403, 500};
  • String[] roles = {"admin", "editor", "viewer"};

这种写法由编译器自动推断长度,不会写错大小;也不建议混用 new int[]{...},除非要作为匿名数组传参(例如 method(new String[]{"a","b"}))。

立即学习“Java免费学习笔记(深入)”;

只知长度不知内容,用 new 动态初始化

适用于缓冲区、待计算结果、外部数据加载前的占位结构:

  • byte[] buffer = new byte[8192];(默认全 0)
  • String[] users = new String[100];(默认全 null)

注意:动态初始化后长度固定不可变;基本类型元素自动设为 0/false/0.0/'u0000',引用类型为 null,无需再写循环赋默认值。

别留空悬引用:声明即初始化,或确保首次使用前已实例化

int[] arr; 然后很久不赋值,是常见隐患。此时 arr 为 null,一旦调用 arr.lengtharr[0] 就直接抛 NullPointerException

  • 推荐:int[] scores = new int[5];int[] scores = {85, 92, 78};
  • 若确需延迟创建(如依赖注入、条件分支),务必在首次访问前完成初始化,避免裸声明长期悬空

热门栏目