一、数组的概念
数组是用来存储一系列同类型数据的内存区域。
二、存储数据
1、静态初始化数组
作用: 定义数组时直接赋值。
格式: 【数据类型[] 变量名 = new 数据类型[]{值1,值2…,值n}】
示例:
double[] height = {172.5,170.1,145.1,152.5,167.8};
double[] weight = new double[]{84,72,55,63,71};
基本原理:
height 作为数组变量,存储的是数组第一个元素的内存地址,通过该内存地址可以直接输出第一个元素,而数组是连续的内存区域,所以可以直接通过地址计算进行获取。
-
数组访问
数组访问有两个值:索引访问,长度访问。 -
索引访问
格式: 【数组名[索引]】
注意: 索引是从0开始计算 -
长度访问
格式: 【数组名.length】 -
注意事项
1、数组的两种写法:数组类型[] 数组名 <=> 数组类型 数组名[]
2、数组存放的数据类型必须相同。
3、数组一旦定义,程序执行过程中长度和类型不能更变。
2、动态初始化数组
作用: 定义数组的时候只确定元素类型和长度,再赋值数据。
格式: 【数据类型[] 数组名 = new 数据类型[数组长度]】
默认值:
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0.0 |
布尔型 | false |
引用型 | null |
三、数组遍历
概念: 将数组中的数据一个个获取。
遍历方式:
- 顺序索引遍历
double[] height = {172.5,170.1,145.1,152.5,167.8};
System.out.println(height[0]);
System.out.println(height[1]);
System.out.println(height[2]);
System.out.println(height[3]);
System.out.println(height[4]);
- 循环索引遍历
double[] height = {172.5,170.1,145.1,152.5,167.8};
for (int i = 0; i < height.length; i++) {
System.out.println(height[i]);
}
- 迭代器遍历
double[] height = {172.5,170.1,145.1,152.5,167.8};
for (double h :height) {
System.out.println(h);
}
四、解决实际问题
1、销售部门的销售总额求和。
double[] money = {16,32,8,100,78};
double total = 0;
for (double m :money) {
total += m;
}
System.out.println(total); //234.0
2、求取身高最高的人。
double[] height = {172.5,170.1,145.1,152.5,167.8};
double max = height[0];
for (double h :height) {
max = Math.max(max, h);
}
System.out.println(max); //172.5
3、冒泡排序
思想: 每次从数组找到最大值并将其排到最后。
int[] arr = {1,5,3,2,8,6};
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]){
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr)); //[1, 2, 3, 5, 6, 8]
五、内存原理
1、Java内存分配
- 栈
栈内存是方法执行时或变量声明进入的内存区域。 - 堆
堆内存是对象存储的内存区域,开辟空间并产生地址。 - 方法区
字节码加载时进入的内存区域 - 本地方法栈
- 寄存器
2、数组内存图
从字节码文件载入开始,一步步执行文件代码,从程序入口函数main转至栈内存,查找对应main函数的地址,再执行下一步代码即创建数组。创建数组时,先在栈内存开辟一个变量空间,再向堆内存中开辟一块连续的空间,当存在数组空间后,再将连续空间的第一个元素地址写入堆内存的变量空间。
六、数组使用注意点
1、数组越界异常(ArrayIndexOutOfBoundsException)
若访问元素位置超过最大索引,则会引发越界异常。
2、空指针异常(NullPointerException)
若访问数组时,数组变量没有存储地址,则引发空指针异常。
补充知识
在系统开发中,我们会遇到各种各样的代码错误或是程序异常,那么我们就需要Debug工具去查找错误的地方,现有的程序编辑器中都带有debug工具,浏览器端也只需要在文件窗口打上断点标记,就可以查看前端逻辑错误。后端可以在编辑器上目标代码行打上断点标记,在程序执行时遇到标记则会停止执行。