-
数组的作用:就是一个容器,用于在程序中存储一批同种类型的数据。
1.数组的定义
数组属于引用型,且当调用 Sysout.out.println(arr) ==> 得到结果为 一字符串;
所以在调用数组时可以理解为:数组名表示数组存在堆内存中的地址 、 索引表示调用指定地址的第几个元素。
1.1静态初始化数组
格式1: 数据类型[] 数组名称 = new 数组类型[]{元素1,元素2} ;
格式2: 数据类型[] 数组名称 = {元素1 , 元素2 } ; // 简化格式
特点:在定义数组的时候同时为数组确定了数据。
使用场景: 一旦确定了数据的具体值,我们就用这种方式存储批量数据。
1.2动态初始化数组
格式: 数据类型[] 数组名称 = new 数据类型[长度] ;
特点:一开始只确定数组的类型和长度,不确定具体存入的数据值。
使用场景:适合做一开始不能确定具体数据的情况,(如 存储3个随机数);适用于先定义数组(定义数据类型和长度即可),后赋值数据进去。
注意事项: 动态数组 存在初始值 ;
1.3数组的访问
格式:数组名称[索引]
访问形式:
- 取值 ---> 格式: int data = arr[1] ; //表示将数组的第二个值定义给data 变量。
- 赋值 ---> 格式: arr[1] = 222 ; //表示将222 定义成数组的第二个值。
- 长度 ---> 格式:arr.length // 表示属性 ; 注: 不要带括号。
1.4 数组的注意事项:
- 什么类型的数组只能存放什么类型的数据。
- 数据类型[] 变量名称 <==> 数据类型 变量名称[] //注:以上两种写法所表示的含义相同。
- 数组一旦定义出来,程序执行的过程中,长度、类型就固定了(不可改变)。
2.数组的遍历
含义:将数组中元素,一个一个的访问。
为什么要遍历:业务开发中都需要用到,如: 统计数据(求数组中最大值等) 、 搜索数据(找出数组中值为100的元素)。
如何实现数组的遍历:
int [ ] ages = {20 , 30 ,40 ,50 } ;
for (int i = 0 ; i < ages.length ; i++ ) {
System.out.println( ages[ i ] ) ;
}
3.数组的内存图
java内存分配包含三部分:
- 方法区 :存放Class文件
- 栈 : 存放运行的方法、定义的变量。 // 注意方法在栈中,定义变量在方法中,所以变量属于栈中。数组表示引用类型所以数组对应在栈中存储的是数组元素在堆中的存储位置。
- 堆:new 出来的对象,都在堆内存中(所以数组存在于堆中。)
4.数组使用的常见问题
- 不要访问超过数组最大的索引 ; 否则将会出现数组访问越界异常。
- 空指针异常问题:例 int[] arr = null ; ---> System.out.println( arr ); //结果为null ,但是当调用此数组中数据时 :System.out.println( arr.length ); 会出现“空指针异常的情况。”