Java中数组的基本概念与声明
在Java中,数组是一种用于存储固定大小同类型元素的数据结构,它是一组连续的内存空间,所有元素共享同一个变量名,通过索引(下标)来访问和操作,数组一旦创建,其长度不可改变,因此在使用前需要明确元素数量或初始化数据。

数组的声明语法有两种形式:
type[] arrayName; // 推荐方式,将[]放在类型后,更符合可读性 type arrayName[]; // 兼容C/C++风格,但不推荐使用
type可以是Java中的任何数据类型(如int、String、自定义类等),arrayName是数组的名称,声明一个整型数组:
int[] numbers; String[] names;
需要注意的是,声明数组仅会在栈内存中分配一个引用变量,并未为数组分配堆内存空间,因此此时数组不能直接使用,必须进行初始化。
数组的初始化与内存分配
数组的初始化分为静态初始化和动态初始化两种方式,不同的初始化方式决定了数组赋值的方法。
静态初始化:声明时直接赋值
静态初始化是指在声明数组的同时为数组元素分配内存并赋初值,由系统根据初始值的自动计算数组长度,语法如下:
type[] arrayName = new type[]{元素1, 元素2, ..., 元素n};
或简写为(省略new type[],仅在声明时可用):
type[] arrayName = {元素1, 元素2, ..., 元素n};
int[] primes = new int[]{2, 3, 5, 7, 11}; // 显式指定类型和初始值
String[] fruits = {"Apple", "Banana", "Orange"}; // 隐式初始化,省略new type[]
静态初始化适用于元素数量固定且已知的场景,代码简洁直观,避免了后续逐个赋值的麻烦。

动态初始化:先分配空间后赋值
动态初始化是指先声明数组并指定长度,然后再为数组元素逐个赋值,语法如下:
type[] arrayName = new type[length]; // 分配指定长度的数组空间 arrayName[index] = value; // 通过索引为元素赋值
double[] scores = new double[5]; // 创建长度为5的double类型数组 scores[0] = 89.5; // 为第一个元素赋值 scores[1] = 92.0; scores[2] = 78.5; scores[3] = 85.0; scores[4] = 90.5;
动态初始化适用于数组长度已知但元素值需要在运行时确定的场景,例如从用户输入或文件中读取数据后填充数组。
通过索引为数组元素赋值
无论是静态初始化还是动态初始化,数组元素的赋值和访问都依赖于索引,Java中数组的索引从0开始,到数组长度-1结束,越界访问会抛出ArrayIndexOutOfBoundsException异常。
索引赋值的基本语法
arrayName[index] = value;
index必须为整数类型(int、short、byte等,不能为long),且0 ≤ index < arrayName.length。
boolean[] flags = new boolean[3]; flags[0] = true; // 第一个元素赋值true flags[1] = false; // 第二个元素赋值false flags[2] = true; // 第三个元素赋值true
批量赋值的方法
当需要为数组多个元素赋值时,可以使用循环结构简化操作,为整型数组arr的10个元素赋值为索引的平方:
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i * i; // 通过循环逐个赋值
}
Java 8及以上版本提供了Arrays.setAll()方法,支持函数式风格的批量赋值:
import java.util.Arrays; int[] arr = new int[10]; Arrays.setAll(arr, i -> i * i); // 使用Lambda表达式为每个元素赋值
数组赋值的注意事项
-
数据类型匹配:赋值时元素的类型必须与数组声明的类型兼容,否则编译会报错。
int数组不能直接赋值String类型:
int[] numbers = new int[3]; numbers[0] = "Hello"; // 编译错误:类型不匹配
-
索引越界风险:访问或赋值时需确保索引在有效范围内,否则运行时会抛出异常。
int[] arr = new int[5]; arr[5] = 10; // 运行时异常:ArrayIndexOutOfBoundsException(索引最大为4)
-
数组长度不可变:数组一旦初始化,长度不能改变,若需要动态调整长度,可使用
ArrayList等集合类。int[] oldArr = {1, 2, 3}; int[] newArr = new int[5]; // 创建新数组 System.arraycopy(oldArr, 0, newArr, 0, oldArr.length); // 复制旧数组到新数组 -
默认值规则:动态初始化时,数组元素会被赋予默认值:数值类型为
0、布尔类型为false、引用类型为null。Object[] objects = new Object[3]; // 引用类型数组默认值为null System.out.println(objects[0]); // 输出null
多维数组的赋值
Java支持多维数组,即数组的数组,二维数组的赋值方式与一维数组类似,只需增加一层索引即可。
二维数组的声明与初始化
int[][] matrix = new int[2][3]; // 2行3列的二维数组
通过索引赋值
matrix[0][0] = 1; // 第一行第一列 matrix[0][1] = 2; matrix[0][2] = 3; matrix[1][0] = 4; // 第二行第一列 matrix[1][1] = 5; matrix[1][2] = 6;
静态初始化二维数组
int[][] matrix = {{1, 2, 3}, {4, 5, 6}}; // 每个子数组代表一行
Java中数组赋值的核心在于理解数组的声明、初始化方式以及索引的使用,静态初始化适合已知元素值的场景,动态初始化适合运行时确定元素值的场景;通过索引可以精确访问和修改数组元素,但需注意类型匹配和索引越界问题,对于复杂需求,可结合循环或Java 8+的函数式API简化赋值操作,掌握数组赋值是Java编程的基础,为后续学习集合框架、算法实现等内容奠定了重要基础。



















