数组
一、认识数组
1.什么是数组
- 数组就是一个容器,用来存一批同种类型的数据。
举例
20, 10, 80, 60, 90
int[] arr = {20, 10, 80, 60, 90};张三, 李四, 王五
String[] names = {"张三", "李四", "王五"};
2.为什么要使用数组
假设用变量解决随机点名的需求
- 代码繁琐:大量变量的定义。
- 实现需求繁琐。
String name1 = "张誉";
String name2 = "刘疏桐";
String name3 = "田启峰";
...
...
String name68= "张学颖";
String name69= "李沁霖";
String name70= "陈侃";Random r = new Random();
int number = r.nextInt(70) + 1; // 1 - 70
switch (number){
case 1:
System.out.println(name1 + "出来回答问题!");
break;
case 1:
System.out.println(name2 + "出来回答问题!");
break;
...
}
用数组解决随机点名的需求
- 代码简洁。
- 逻辑清晰。
String[] names = {“张誉”, “刘疏桐”, “田启峰”,… “张学颖”, “李沁霖”, “陈侃”,};
Random r = new Random();
int i = r.nextInt(70); // 0- 69
System.out.println(names[i] + “出来回答问题!”)
结论
- 结论:遇到批量数据的存储和操作时,数组比变量更适合。
二、数组的定义和访问
1.静态初始化数组
1.1 定义
- 义数组的时候直接给数组赋值。
1.2 静态初始化数组的格式
- 数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };
// 完整格式
int[] ages = new int[]{12, 24, 36}
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
- 数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
// 简化格式
int[] aes = {12, 24, 36};
注意
- “数据类型[] 数组名”也可写成 “数据类型 数组名[] ”。
- 什么类型的数组只能存放什么类型的数据。
- 数组变量名中存储的是数组在内存中的地址,数组是一种引用数据类型。
1.3 数组的访问
1.3.1 数组的访问
- 数组名[索引]
// 取值
System.out.println(arr[0]); // 12
// 赋值
arr[2] = 100;
System.out.println(arr[2]); // 100
1.3.2 数组的长度属性:length
// 获取数组的长度(就是数组元素的个数)
System.out.println(arr.length); // 3
1.3.3 数组的最大索引
数组名. length – 1 // 前提:元素个数大于0
注意:
- 访问数组时,若使用的索引超过了数组最大索引,执行程序时会出bug,出现一个索引越界的异常提示
1.4 数字的遍历
1.4.1 遍历定义
- 就是一个一个数据的访问。
1.4.2 为什么要遍历数组
- 求和
- 元素搜索
- 找最大值
- 找最小值
2.动态初始化数组
2.1 定义
- 定义数组时先不存入具体的元素值,只确定数组存储的数据类型和数组的长度
2.2 数组的动态初始化格式
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];// 后赋值
arr[0] = 10;
System.out.println(arr[0]); // 10
注意
静态初始化和动态初始化数组的写法是独立的,不可以混用。
2.3 动态初始化数组元素默认值规则
数据类型 | 默认值 |
---|---|
byte、short、char、int、long | 0 |
float、double | 0.0 |
boolean | false |
类、接口、数组、String | null |
3.数组在计算机中的执行原理
3.1 数组的执行原理,Java程序的执行原理
3.1.1 ava 内存分配介绍
- 方法区
- 栈
- 堆
- 本地方法栈
- 寄存器
简单说说 int a = 20; int[] arr = new int[3]这两行代码的执行原理?
- a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
- new int[3]是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
- arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。
3.2 多个变量指向同一个数组的问题
- 如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象
总结
-
多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
- 多个数组变量中存储的是同一个数组对象的地址。
- 多个变量修改的都是同一个数组对象中的数据。
-
如果某个数组变量中存储的null,代表什么意思?需要注意什么?
-
代表这个数组变量没有指向数组对象。
p-1747228570011)] -
如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象
总结
-
多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
- 多个数组变量中存储的是同一个数组对象的地址。
- 多个变量修改的都是同一个数组对象中的数据。
-
如果某个数组变量中存储的null,代表什么意思?需要注意什么?
-
代表这个数组变量没有指向数组对象。
-
可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,会报空指针异常:NullPointerException。