目录
- java数组基础详解
- 一、引言
- 二、声明数组
- 三、初始化数组
- 3.1 静态初始化
- 3.2 动态初始化
- 四、访问数组元素
- 五、遍历数组
- 六、分析数组内存
- 七、数组常见异常
- 7.1 索引越界异常ArrayIndexOutOfBoundsException
- 7.2 空指针异常NullPointerException
java数组基础详解
一、引言
数组定义
数组是一种数据结构,用来存储同一类型值的集合
继基本数据类型后,为什么还要学数组?
变量虽然也能存储数据,但是存储的数据有限。
为了避免变量名的冗余以及为了方便对同一类型的数据进行操作,便有了数组。
二、声明数组
格式一:数据类型[] 数组名
int[] array;
格式二:数据类型 数组名[]
int array[];
注释:大多数java程序员喜欢第一种风格
三、初始化数组
什么是初始化?
在内存中,为数组容器开辟空间,并将数据存入容器的过程
注意:未经初始化的数组不可以使用,如下所示:
java中初始化分为静态初始化和动态初始化
- 静态初始化:
- 手动指定数组元素,系统会根据元素个数,计算出数组长度
- 动态初始化:
- 手动指定数组长度,由系统给出默认初始化值
3.1 静态初始化
完整格式:数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3…};
int[] array=new int[]{1,2,3,4};
简化格式:数据类型[] 数组名={元素1,元素2,元素3…};
int[] array={1,2,3,4};
3.2 动态初始化
格式:数据类型[] 数组名=new 数据类型[数组长度];
int[] arr=new int[3];
动态初始化:手动指定数组长度,由系统给出默认初始化值,如下所示:
例子:
int[] arr = new int[3];
System.out.println(arr[1]);
int[][] array1 = new int[2][];
for (int i = 0; i < 2; i++) {
System.out.println(array1[i]);//默认初始化为null
}
int[][] array2=new int[2][3];
for (int i = 0; i < 2; i++) {
System.out.println(array2[i]);
}
System.out.println(array2[0][0]);
运行结果
0
null
null
[I@4eec7777
[I@3b07d329
0
四、访问数组元素
访问数组元素
格式:数组名[索引];
索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长
例子:
int[] array={1,2,3}
System.out.println(array);//打印数组名
System.out.println(array[0]);//访问数组中第一个元素
运行结果
[I@4eec7777
1
那么,数组名中存放的 [I@4eec7777是什么意思呢?
- [:表示当前空间为数组类型
- I:表示当前数组的数据类型为int类型
- @:分隔符
- 4eec7777:数组在内存中的十六进制地址
总结一下:
数组名:数组地址
数组名[索引]:数组元素
五、遍历数组
方法一:for循环
int[] array={1,2,3};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
方法二:for each 循环
int[] array={1,2,3};
for(int element:array){
System.out.println(element);
}
六、分析数组内存
java内存分配介绍
方法区:字节码文件加载时进入的内存
栈内存:方法运行时所进入的内存
堆内存:new出来的东西会在这块内存中开辟空间并产生地址(今天学的数组便是)
例子1:
int[] array1={1,2,3};
int[] array2=array1;
for(int element:array2){
System.out.println(element);
}
System.out.println("array1的地址为:"+array1);
System.out.println("array2的地址为:"+array2);
运行结果:
1
2
3
array1的地址为:[I@682a0b20
array2的地址为:[I@682a0b20
结论:
array1在堆空间中开辟出了一块空间,在运行时,栈空间记录的是array1在堆空间的地址。
随后又将array1中记录的地址值赋值给了array2,所以array2与array1所指向的是同一块空间。
例子2:
结论:
数组名中存储的是arr在堆空间的地址,所以在change方法中可以改变arr中元素的值。
七、数组常见异常
7.1 索引越界异常ArrayIndexOutOfBoundsException
当访问了数组中不存在的索引,就会引发索引越界异常
7.2 空指针异常NullPointerException
当引用数据类型变量被赋值为 null 之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常
例子:
int[] array1={1,2,3};
array1=null;
System.out.println(array1);//会报空指针异常