1. 数组(Array)
1.1 概述
- 1.1.1 定义:数组是存储同一数据类型多个元素的容器
- 1.1.2 核心限制:数组长度一旦确定不能修改,即不能添加或删除元素
1.2 声明方式
- 1.2.1 推荐写法:
数据类型[] 数组名
- 1.2.2 兼容写法:
数据类型 数组名[]
1.3 初始化赋值
- 1.3.1 静态初始化:手动添加元素,系统自动统计长度
int[] arr = {'q', 12, 7, 8, 4, 6};
- 1.3.2 动态初始化:手动定义长度,系统自动赋默认值
String[] strs = new String[5];
double[] dous = new double[]{1, 7, 8, 54, 9, 4, 6};
- 1.3.4 先声明后赋值:不能使用静态初始化,只能用
new
int[] ints;
// ints = {1,4,5,7,8,9}; // 报错
ints = new int[10]; // 正确
ints = new int[]{1,2,3,4,5,6}; // 正确
1.4 数组的使用
- 1.4.1 访问元素:
数组名[索引值],索引从 0 开始
- 1.4.2 获取长度:
数组名.length
1.5 数组的打印
- 1.5.1 直接打印数组名:输出的是地址值,如
[I@2f4d3709,无实际意义
- 1.5.2 打印数组内容:需使用
Arrays.toString(数组名),需导包 import java.util.Arrays;
System.out.println(Arrays.toString(strs)); // [null, null, null, null, null]
1.6 动态初始化默认值
| 数据类型 | 默认值 |
|---|
byte / short / int / long | 0 |
float / double | 0.0 |
char | '\u0000'(空字符) |
boolean | false |
引用类型(如 String) | null |
1.7 常见异常
- 1.7.1 ArrayIndexOutOfBoundsException(数组索引越界):使用了超出范围的索引时抛出,合法索引范围为
0 ~ length - 1
int[] ints = new int[]{1, 7, 8, 4, 5, 6};
System.out.println(ints[ints.length]); // 报错,最大索引为 length - 1
- 1.7.2 NullPointerException(空指针异常):数组被赋值为
null 后,调用其索引、长度等操作时抛出
String[] str = null;
System.out.println(str[0]); // 报错,str 为 null
2. 示例代码
2.1 Demo01
package com.itszt.day03;
import java.util.Arrays;
public class Demo01 {
public static void main(String[] args) {
// 静态初始化
int[] arr = {'q', 12, 7, 8, 4, 6};
System.out.println(arr[5]); // 6
System.out.println(arr.length); // 6
// 动态初始化,打印地址值 vs 打印内容
String[] strs = new String[5];
System.out.println(strs); // 地址值
System.out.println(Arrays.toString(strs)); // [null, null, null, null, null]
// 动态初始化(带元素)
double[] dous = new double[]{1, 7, 8, 54, 9, 4, 6};
System.out.println(dous.length); // 7
// 先声明后赋值,只能用 new
int[] ints;
ints = new int[10];
ints = new int[]{1, 2, 3, 4, 5, 6};
}
}
2.2 Demo03
package com.itszt.day03;
import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) {
int[] ints = new int[5];
System.out.println(Arrays.toString(ints)); // [0, 0, 0, 0, 0]
byte[] bs = new byte[5];
System.out.println(Arrays.toString(bs)); // [0, 0, 0, 0, 0]
long[] l = new long[5];
System.out.println(Arrays.toString(l)); // [0, 0, 0, 0, 0]
double[] dou = new double[5];
System.out.println(Arrays.toString(dou)); // [0.0, 0.0, 0.0, 0.0, 0.0]
boolean[] boo = new boolean[5];
System.out.println(Arrays.toString(boo)); // [false, false, false, false, false]
char[] ch = new char[5];
System.out.println(Arrays.toString(ch)); // [ , , , , ]
}
}
2.3 Demo04
package com.itszt.day03;
public class Demo04 {
public static void main(String[] args) {
// ArrayIndexOutOfBoundsException:索引越界
// int[] ints = new int[]{1,7,8,4,5,6};
// System.out.println(ints[ints.length]); // 报错
// NullPointerException:空指针异常
// String[] str = null;
// System.out.println(str[0]); // 报错
}
}
3. 总结
| 知识点 | 核心要点 |
|---|
| 长度限制 | 数组长度固定,不可增删元素 |
| 静态初始化 | {元素1, 元素2} 直接赋值 |
| 动态初始化 | new 类型[长度] |
| 动态初始化带元素 | new 类型[]{元素1, 元素2} |
| 先声明后赋值 | 只能用 new,不能用 {} |
| 访问元素 | 数组名[索引],索引从 0 开始 |
| 打印内容 | 用 Arrays.toString() |
| 整数默认值 | 0 |
| 浮点默认值 | 0.0 |
| 布尔默认值 | false |
| 字符默认值 | '\u0000' 空字符 |
| 引用类型默认值 | null |
| 索引越界异常 | 使用超出范围的索引 |
| 空指针异常 | 数组为 null 时访问其成员 |