Java数组初始化分两类:先实例化再初始化,或声明即赋值;实例化(如new int[5])分配内存并设默认值,初始化向已分配空间写具体值;未实例化的数组变量为null,访问元素抛NullPointerException。

Java 数组初始化分两类:一类是先分配内存(实例化),再填数据(初始化);另一类是声明即赋值,一步到位。关键不在于“怎么写”,而在于理解「什么时候必须显式赋值」「哪些值是自动给的」「哪些操作真正改变了数据」。
明确区分实例化与初始化
数组变量本身只是引用。没 new 就没内存,不能存东西。
-
实例化:用
new int[5]这类语句申请内存空间,长度固定,元素自动设为默认值(int 是 0,String 是 null) - 初始化:往已分配的空间里写具体值,可以全写、部分写、逐个写或批量写
- 只声明不实例化:
int[] arr;此时 arr 是 null,访问arr[0]直接抛 NullPointerException
分步赋值:适合运行时动态确定内容
适用于需要循环读取输入、计算结果、或根据条件设置不同值的场景。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先实例化:
int[] scores = new int[3]; - 再逐个赋值:
scores[0] = 85; scores[1] = 92; scores[2] = 78; - 或用 for 循环:
for (int i = 0; i - 注意:索引必须在
[0, length)范围内,越界会触发 ArrayIndexOutOfBoundsException
批量赋初值:简洁高效,分三种常见方式
不需要逐个敲,一次性设定多个值或统一值,代码更干净,性能也更好。
立即学习“Java免费学习笔记(深入)”;
-
声明时直接赋值(静态初始化):
String[] names = {"Tom", "Jerry", "Alice"};—— 编译器自动推长度,适合已知全部元素 -
用 Arrays.fill() 设统一值:
int[] flags = new int[10]; Arrays.fill(flags, 1);→ 全变成 [1,1,…,1] -
用 Arrays.fill() 设局部范围:
Arrays.fill(flags, 2, 6, -1);→ 索引 2 到 5(含)设为 -1,其余不变
二维数组的初始化逻辑同样适用
本质是一维数组的嵌套,每层都遵循「先实例化、再初始化」原则。
- 规则矩形:
int[][] grid = new int[3][4];→ 所有元素自动为 0 - 不规则(锯齿):
int[][] jagged = new int[3][];,再逐行 new:jagged[0] = new int[2]; jagged[1] = new int[5]; - 静态初始化二维:
int[][] mat = {{1,2}, {3,4,5}};→ 每行长度可不同,编译器自动识别

















