1. 数组:指一种容器,可以用来存储同种数据类型的多个值。(不同种也可以,只要支持隐式类型转换即可)
- 建议:保持容器类型和存储的数据类型一致即可。
2. 数组的定义
- 之前说的定义一个变量a int a = 0;其实是包含两部分,int a 表示定义一个a变量,而= 0表示赋值。
- 对于定义一个数组,也是如此。例:
格式一:数据类型[ ] 数组名
范例:int[ ] array
格式二:数据类型 数组名[ ]
范例:int array[ ] - 数组定义后,只是有个数组名字,存储数据的容器还没有出现。所以数组定义后,只能用数组名指向其他数组(其他创建好的容器),即 array1 = array2,不能对数组内的元素进行赋值,即不能 array [ 1 ] = 2
3. 数组的初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。
- 静态初始化:
完整格式:数据类型[ ] 数组名 = new 数据类型[ ]{元素1,元素2,元素3…};
范例:int[ ] array = new int[ ]{11,22,33};
简化格式:数据类型[ ] 数组名 = {元素1,元素2,元素3…};
范例:double[ ] array2 = {11.1,22.2,33.3};
- 数组初始化完毕后,数组的长度不会发生变化。
例如array数组的长度就固定为3了。
4. 数组的地址值:表示数组在内存中的位置
- 直接打印数组名,打印的是数组的地址值,如图:
- 扩展:地址值的格式含义[D@776ec8df
[:表示当前是一个数组
D:表示当前数组里面的元素都是double类型的
@:表示一个间隔符号(固定格式)
776ec8df:才是真正的地址值(十六进制)
但我们习惯把[D@776ec8df 这个整体叫做数组的地址值。
5. 数组元素访问
- 格式:数组名[索引]
- 索引:也叫作下标,角标
- 索引的特点:从0开始,逐个+1增长,连续不间断。
- 可以用作获取数组里面的元素,也可以把数据存储到数组元素中。
6. 数组遍历:将数组中所有的内容取出来,取出来之后可以(打印,求和,判断…)
- 注意:遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印
- 在java中,数组有一个长度属性:length,它的调用方式为:数组名.length
- 数组的最大索引(最大下标)为数组长度 - 1
- 扩展:idea提供自动的快速生成数组的遍历方式:
数组名.fori - 如果要修改数组里的每一个元素,再遍历打印,尽量用两次循环来完成。因为,一个循环里最好只做一件事,多了就容易把思路弄混。
7. 数组的动态初始化
- 格式:数据类型[ ] 数组名 = new 数据类型[数组长度];
- 在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值
- 数组的默认初始化值的规律
a. 整数类型数组:默认初始化值为 0
b. 小数类型数组:默认初始化值为 0.0
c. 字符类型数组:默认初始化值为 ‘\u0000’ 打印出来是一个空格
d. 布尔类型数组:默认初始化值为 false
e. 引用数据类型数组:默认初始化值为 null(字符串为引用数据类型)
8. 数组动态初始化和静态初始化的区别
- 动态初始化:手动指定数组长度,由系统给出默认初始化值。
- 动态初始化的使用情况:只明确元素个数,不明确具体数值。
- 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度
- 静态初始化使用情况:需求中已经明确了要操作的具体数值。
9. 数组常见的问题
- 索引越界异常
原因:访问了不存在的索引
避免:注意索引的范围。
最小索引:0 最大索引:数组的长度-1