Java数组的声明与初始化方法

Java数组的声明与初始化方法

技术背景

在Java编程中,数组是一种非常重要的数据结构,它可以存储相同类型的多个元素。了解如何正确声明和初始化数组是进行Java开发的基础,不同的声明和初始化方式适用于不同的场景,能够提高代码的效率和可读性。

实现步骤

一维数组

声明

1
2
3
int[] nums1; // 最佳实践
int []nums2;
int nums3[];

初始化

  • 使用默认值
1
2
int[] nums = new int[3]; // [0, 0, 0]
Object[] objects = new Object[3]; // [null, null, null]
  • 使用数组字面量
1
2
3
4
int[] nums1 = {1, 2, 3};
int[] nums2 = new int[]{1, 2, 3};
Object[] objects1 = {new Object(), new Object(), new Object()};
Object[] objects2 = new Object[]{new Object(), new Object(), new Object()};
  • 使用for循环
1
2
3
4
5
6
7
8
int[] nums = new int[3];
for (int i = 0; i < nums.length; i++) {
nums[i] = i; // 可以包含任何填充策略
}
Object[] objects = new Object[3];
for (int i = 0; i < objects.length; i++) {
objects[i] = new Object(); // 可以包含任何填充策略
}
  • 使用for循环和Random
1
2
3
4
5
int[] nums = new int[10];
Random random = new Random();
for (int i = 0; i < nums.length; i++) {
nums[i] = random.nextInt(10); // 随机整数从0到9
}
  • 使用Stream(Java 8及以后)
1
2
3
4
5
6
7
8
9
int[] nums1 = IntStream.range(0, 3).toArray(); // [0, 1, 2]
int[] nums2 = IntStream.rangeClosed(0, 3).toArray(); // [0, 1, 2, 3]
int[] nums3 = IntStream.of(10, 11, 12, 13).toArray(); // [10, 11, 12, 13]
int[] nums4 = IntStream.of(12, 11, 13, 10).sorted().toArray(); // [10, 11, 12, 13]
int[] nums5 = IntStream.iterate(0, x -> x <= 3, x -> x + 1).toArray(); // [0, 1, 2, 3]
int[] nums6 = IntStream.iterate(0, x -> x + 1).takeWhile(x -> x < 3).toArray(); // [0, 1, 2]
int size = 3;
Object[] objects1 = IntStream.range(0, size).mapToObj(i -> new Object()).toArray(Object[]::new);
Object[] objects2 = Stream.generate(() -> new Object()).limit(size).toArray(Object[]::new);
  • 使用Random和Stream(Java 8及以后)
1
2
3
4
int size = 3;
int randomNumberOrigin = -10;
int randomNumberBound = 10;
int[] nums = new Random().ints(size, randomNumberOrigin, randomNumberBound).toArray();

多维数组

声明

1
2
3
4
5
int[][] nums1; // 最佳实践
int [][]nums2;
int[] []nums3;
int[] nums4[];
int nums5[][];

初始化

  • 使用默认值
1
2
int[][] nums = new int[3][3]; // [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Object[][] objects = new Object[3][3]; // [[null, null, null], [null, null, null], [null, null, null]]
  • 使用数组字面量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int[][] nums1 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int[][] nums2 = new int[][]{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Object[][] objects1 = {
{new Object(), new Object(), new Object()},
{new Object(), new Object(), new Object()},
{new Object(), new Object(), new Object()}
};
Object[][] objects2 = new Object[][]{
{new Object(), new Object(), new Object()},
{new Object(), new Object(), new Object()},
{new Object(), new Object(), new Object()}
};
  • 使用for循环
1
2
3
4
5
6
7
8
9
10
11
12
int[][] nums = new int[3][3];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
nums[i][j] = i + j; // 可以包含任何填充策略
}
}
Object[][] objects = new Object[3][3];
for (int i = 0; i < objects.length; i++) {
for (int j = 0; j < objects[i].length; j++) {
objects[i][j] = new Object(); // 可以包含任何填充策略
}
}

核心代码

以下是一些不同场景下数组声明和初始化的核心代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
// 一维数组初始化示例
int[] oneDimArray = {1, 2, 3};

// 多维数组初始化示例
int[][] multiDimArray = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

// Java 8 Stream初始化示例
int[] streamArray = IntStream.range(0, 5).toArray();

最佳实践

  • 使用推荐的声明方式:对于一维数组,推荐使用int[] nums的形式,能更清晰地表明这是一个数组类型。
  • 根据场景选择初始化方式:如果需要创建固定值的数组,使用数组字面量是最简洁的;如果需要动态生成数组元素,使用循环或Stream会更合适。
  • 注意多维数组的使用:多维数组本质上是数组的数组,在使用时要注意索引的范围,避免越界。

常见问题

  • 数组越界异常:在访问数组元素时,如果使用的索引超出了数组的有效范围,会抛出ArrayIndexOutOfBoundsException异常。在使用数组时,要确保索引在0array.length - 1之间。
  • 数组赋值问题:当将一个数组赋值给另一个数组时,实际上是将引用赋值给了另一个变量,两个变量指向同一个数组对象。如果需要复制数组内容,需要手动遍历数组并复制每个元素。
  • 使用反射创建数组:使用Array.newInstance方法创建数组时,需要注意类型的匹配,否则可能会抛出ClassCastException异常。

Java数组的声明与初始化方法
https://119291.xyz/posts/2025-05-14.java-array-declaration-and-initialization/
作者
ww
发布于
2025年5月14日
许可协议