数组是相同类型数据的有序集合。可以通过整型下标可以访问数组中的每一个值
- 数组长度是确定的;数组一旦被创建,它的大小就是不可以改变的
- 其元素的类型必须是相同类型,不允许出现混合类型
- 数组类型可以是任何数据类型,包括基本数据类型和引用数据类型
- 数组变量属于引用类型,数组也是对象;数组中的元素相当于对象的属性
声明数组
在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字
- 声明数组时,并没有实例化任何对象,只有在实例化数组对象时,JVM才会分配空间,这时才与长度有关
- 构造一个数组,必须指定长度
数组初始化
数组的初始化方式有两种:静态初始化、动态初始化
- 当前已经知道存入的元素值,用静态初始化
- 当前还不清楚要存入哪些数据,用动态初始化
静态初始化数组
静态初始化数组:定义数组的时候直接给数组赋值
静态初始化语法格式:
- 完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… }; - 简化格式:
数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
// 完整格式
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
int[] ages = new int[]{12, 24, 36};
// 简化格式
int[] ages = {12, 24, 36};
动态初始化数组
动态初始化数组:定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据
动态初始化数组语法格式:数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
动态初始化后数组中存放的是该数组类型的默认值
| 数据类型 | 默认值 |
|---|---|
| byte、short、int、long | 0 |
| float、double | 0.0 |
| char | \'\u0000\' |
| boolean | false |
| 类、接口、数组、String | null |
使用数组
- 访问数组元素:通过在数组引用变量后紧跟一个方括号([]),方括号里是数组元素的索引值
- 数组索引是从0开始的,最后一个数组元素的索引值是数组长度减1
- 如果访问数组元素时指定的索引值小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时出现异常:ArrayIndexOutOfBoundsException:N(数组索引越界异常)异常信息后的N就是程序员试图访问的数组索引
- 如果数组变量中没有存储数组的地址,而是null,在访问数组信息时会出现空指针异常(NullPointerException)
数组的遍历
数组元素下标的合法区间:[0,lenght-1];可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值
// 定义数组
int[] arr = new int[4];
// 初始化数组元素的值
for (int i = 0; i < arr.length; i++) {
arr[i] = 100 * i;
}
// 读取元素的值
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
for-each 循环
for-each 是 JDK1.5 新增的功能,专门用于读取数组或集合中所有的元素(即遍历数组)
- for-each循环的对象必须是一个数组或者是一个实线了
Iterable接口的类对象 - for-each循环在遍历数组时不能修改数组中某元素的值
- for-each仅适用于遍历,不涉及有关索引(下标)的操作
- for-each循环只能处理一维数组;要想访问多维数组的元素,需要结合嵌套循环来使用
int[] arr = {1, 2, 3};
for (int a : arr) {
System.out.println(a);
}
多维数组
多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组。但是实际开发中用的非常少,最多到二维数组
// Java中多维数组的声明和初始化应按从低维到高维的顺序进行
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[4];