目录
一、什么是数组?
1.数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
2.数组的组成:数组名、下标(或索引)、元素、数组的长度。
3.数组的特点:
- 数组本身是
引用数据类型
,而数组中的元素可以是任何数据类型
,包括基本数据类型和引用数据类型。 - 创建数组对象会在内存中开辟一整块
连续的空间
。占据的空间的大小,取决于数组的长度和数组中元素的类型。 - 数组中的元素在内存中是依次紧密排列的,有序的。
- 数组,一旦初始化完成,其长度就是确定的。数组的
长度一旦确定,就不能修改
。 - 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 数组名中引用的是这块连续空间的首地址。
二、一维数组
1.声明格式:
元素的数据类型[] 一维数组的名称; (java写法)
元素的数据类型 一维数组名[]; (C语言写法)
//比如,要存储一组电脑数据
int[] id;
int[] computer;
//比如,要存储一组字母
char[] letters;
//比如,要存储一组姓名
String[] names;
//比如,要存储一组成绩
double[] grade;
2.说明
(1)数组的维度:在Java中数组的符号是[],[]表示一维,[][]表示二维。
(2)数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的Java的数据类型。例如:int、String、Computer等。
(3)数组名:就是代表某个数组的标识符,数组名其实也是变量名,按照变量的命名规范来命名。数组名是个引用数据类型的变量,因为它代表一组数据。
(4)注意:Java语言中声明数组时不能指定其长度(数组中元素的个数)。 例如: int a[10]; //错误的写法
3.静态初始化
(1)格式
①格式1:
数据类型[ ] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
或
数据类型[ ] 数组名;
数组名 = new 数据类型[]{元素1,元素2,元素3,...};
②格式2:
数据类型[ ] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写
String[] student1 = new String[]{"Theodore","Andy"};
String[] student2;
student2 = new String[] {"Theodore","Andy"};
String[] student3 = {"Theodore","Andy"};
(2)补充:new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用
new创建数组实体。
(3)说明:
- 如果数组变量的初始化和数组元素的赋值操作同时进行,那就称为静态初始化。
- 静态初始化,本质是用静态数据(编译时已知)为数组初始化。此时数组的长度由静态数据的个数决定。
4.动态初始化
(1)格式
数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
或
数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[10];
或
int[] arr;
arr = new int[10];
(2)说明
- 数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。
- 动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。
- [长度]:数组的长度,表示数组容器中可以最多存储多少个元素。
- 数组有定长特性,长度一旦指定,不可更改。
- 后面有{}指定元素列表,就不需要在[]中指定元素个数了
5.数组元素
(1)表示:每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)或下标
,可以通过数组的索引/下标访问到数组中的元素。
(2)范围:Java中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
6.数组的遍历
int[] arr = new int[]{1,2,3,4};
//打印数组的属性,输出结果是4
System.out.println("数组的长度:" + arr.length);
//遍历输出数组中的元素
System.out.println("数组的元素有:");
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
三、多维数组
1.格式
元素的数据类型[][] 二维数组的名称; (推荐)
元素的数据类型 二维数组名[][];
元素的数据类型[] 二维数组名[];
2.静态初始化
int[][] arr = new int[][]{{1,0,2},{2,2},{1,0,1}};
3.动态初始化
(1)规则矩阵数组
①确定行数和列数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
其中,m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
其中,n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格
此时创建完数组,行数、列数确定,而且元素也都有默认值
②再为元素赋新值
二维数组名[行下标][列下标] = 值;
int[][] arr = new int[10][22];
(2)不规则数组
①先确定总行数
元素的数据类型[][] 二维数组名 = new 元素的数据类型[总行数][];
此时只是确定了总行数,每一行里面现在是null
②再确定每一行的列数,创建每一行的一维数组
二维数组名[行下标] = new 元素的数据类型[该行的总列数];
此时已经new完的行的元素就有默认值了,没有new的行还是null
③再为元素赋值
二维数组名[行下标][列下标] = 值;
int[][] arr = new int[10][];
3.多维数组的长度和角标
- 二维数组的长度/行数:二维数组名.length
- 二维数组的某一行:二维数组名[行下标],此时相当于获取其中一组数据。它本质上是一个一维数组。行下标的范围:[0, 二维数组名.length-1]。此时把二维数组看成一维数组的话,元素是行对象。
- 某一行的列数:二维数组名[行下标].length,因为二维数组的每一行是一个一维数组。
- 某一个元素:二维数组名[行下标][列下标],即先确定行/组,再确定列。
4.多维数组的遍历(for循环的嵌套)
for(int i=0; i<二维数组名.length; i++){ //二维数组对象.length
for(int j=0; j<二维数组名[i].length; j++){//二维数组行对象.length
System.out.print(二维数组名[i][j]);
}
System.out.println();
}
四、数组的常见异常
1.数组角标越界异常
当访问数组元素时,下标指定超出[0, 数组名.length-1]的范围时,就会报数组下标越界异常:ArrayIndexOutOfBoundsException。
2.空指针异常
当数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException
空指针异常。
总结
本篇对java数组进行了简单的整理,便于回顾和学习。部分内容源于互联网,如果侵权请联系作者删除。