Java数组需区分声明(定义变量,不分配内存,值为null)和创建(new分配内存、定长、默认初始化),支持动态/静态初始化及匿名数组,长度固定、类型统一、多维即数组的数组。

Java中数组的声明和初始化是基础但关键的操作,核心在于区分“声明”和“创建”,二者不能混淆。
数组声明:只定义类型和名称,不分配内存
声明只是告诉编译器“我需要一个数组变量”,此时并未生成实际数组对象,变量值为null。
- 语法形式:类型[] 变量名;或 类型 变量名[];(推荐前者,更清晰体现“数组是类型的一部分”)
- 例如:
int[] numbers;或String names[];—— 此时numbers和names都未指向任何数组 - 声明后直接访问元素(如
numbers[0])会编译通过,但运行时抛出NullPointerException
数组创建:用new分配内存并指定长度
创建操作真正分配堆内存,确定数组大小(长度不可变),所有元素被自动初始化为默认值(如int为0,boolean为false,引用类型为null)。
- 语法:变量名 = new 类型[长度];
- 例如:
numbers = new int[5];→ 创建含5个int的数组,索引0~4,初始值全为0 - 声明与创建可合并:
int[] scores = new int[3];
数组初始化:赋初值的三种常用方式
初始化是在创建的同时或之后为元素设置具体值。常见方式有:
立即学习“Java免费学习笔记(深入)”;
-
动态初始化:先创建,再逐个赋值
int[] arr = new int[3];
arr[0] = 10; arr[1] = 20; arr[2] = 30; -
静态初始化(简化写法):声明+创建+赋值一步完成,长度由大括号内元素个数决定
int[] arr = {1, 2, 3};或int[] arr = new int[]{1, 2, 3}; -
匿名数组:不命名,常用于方法传参
printArray(new String[]{"a", "b", "c"});
注意点:类型、长度与灵活性限制
Java数组是固定长度、同类型对象的容器,这些特性直接影响使用方式:
- 数组长度一旦创建就不可更改,需扩容时得新建数组并复制数据(可用
Arrays.copyOf()) - 基本类型数组存实际值,引用类型数组存对象引用(数组本身是对象,存于堆中)
- 多维数组本质是“数组的数组”,如
int[][] matrix = new int[2][3];创建2行3列的二维数组 - 不能用变量声明时直接指定长度(除非是final常量),否则编译报错:
int n = 5; int[] a = new int[n];✅合法;但int[] a = new int[n];在类字段声明处且n非常量 ❌不合法










