Java 入门教程-4

1. 数组的声明

两种写法等价:

1
2
3
4
5
// 类型 [] 数组名 (Java 语言风格)
int[] arr1;

// 类型 数组名 [] (C 语言风格)
int arr2[];

2. 数组的初始化

2.1 静态初始化

创建数组的同时给元素赋值,长度由系统根据元素个数自动推断:

1
2
int[] a = {1, 2, 3};           // 最常用写法
int[] b = new int[]{1, 2, 3}; // 等价写法

注意:new int[]{1,2,3} 方括号内不能写数字,不能写成 new int[3]{1,2,3}(会编译报错)。

2.2 动态初始化

只指定长度,不写元素。元素会取该类型的默认值

  • 整数类型默认 0,小数类型默认 0.0
  • 字符类型默认 '\u0000',布尔类型默认 false
  • 引用类型(如 String)默认 null
1
2
int[] arr = new int[3];      // 3 个元素, 初值均为 0
System.out.println(arr[0]); // 0

动态初始化后再逐个赋值:

1
2
3
4
int[] scores = new int[3];
scores[0] = 90;
scores[1] = 85;
scores[2] = 78;

3. 数组的访问

通过 数组名[下标] 访问元素,下标范围是 0 ~ length-1。数组对象有属性 length 表示元素个数。

1
2
int[] arr = {10, 20, 30};
System.out.println(arr.length); // 3

越界访问会抛异常 ArrayIndexOutOfBoundsException

4. 数组的遍历

遍历就是“把每个元素都访问一遍”。常用 for 循环,下标从 0 到 length-1

1
2
3
4
int[] arr = {10, 20, 30};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}

也可以使用增强 for(foreach),写法更简洁,但拿不到下标:

1
2
3
for (int value : arr) {
System.out.print(value + " ");
}

5. 二维数组

二维数组是“数组的数组”,适合表示表格、矩阵。

声明并动态初始化:3 行 4 列,元素默认 0:

1
int[][] grid = new int[3][4];

静态初始化:

1
2
3
4
5
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

访问与遍历(外层行、内层列):

1
2
3
4
5
6
7
8
9
10
System.out.println(matrix.length);     // 3 行
System.out.println(matrix[0].length); // 3 列
System.out.println(matrix[1][2]); // 6: 第 2 行第 3 列

for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}

6. 数组工具类 Arrays

java.util.Arrays 提供了许多现成的数组方法,使用前需要 import java.util.Arrays;

方法 作用
Arrays.toString(arr) 把数组内容转成易读的字符串
Arrays.sort(arr) 升序排序
Arrays.binarySearch(arr, key) 二分查找(要求数组已排序),返回下标,找不到返回负数
Arrays.copyOf(arr, 新长度) 复制数组(可扩展/截断长度)
Arrays.fill(arr, 值) 用指定值填充数组

Java 入门教程-4
https://flowerdown.org/posts/20230827-151236
作者
Unrealfeathers
发布于
2023年8月27日
许可协议