数组(array)是一种用于存储多个相同类型数据的存储模型。
定义格式
格式1:数据类型[ ] 变量名
例:int[ ] arr
定义了一个int类型的数组,数组名是arr
格式2:数据类型 变量名[ ]
例:int arr[ ]
定义了一个int类型的变量,变量名是arr数组
动态初始化
Java语言中的数组必须初始化后才能使用,数组初始化即为数组中的元素分配内存空间,并为每个元素赋值。
动态初始化:初始化时指定数组长度,由系统为数组分配初始值。
格式:数据类型[ ] 变量名 = new 数据类型 [ 数组长度 ] ;
例:int[ ] arr = new int[5];
int: 说明数组类型为整型
[ ]:说明定义了一个数组
arr:数组名称
new:为数组申请内存空间
int:数组中的元素类型是int类型
5:数组长度,也是数组中元素的个数
元素访问
数组变量访问方式
格式:数组名
数组内部保存的数据的访问方式
格式:数组名[索引]
索引:数组中访问数据的编号方式,用于访问数组中的数据使用。
索引的特征:从0开始,连续,逐一增加,每次加1。
内存分配
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,对空间进行了不同区域的划分,每一块区域都有特定的处理数据方式和内存管理方式。
栈内存:
存储局部变量,即定义在方法中的变量,例如arr,使用完毕,立即消失。
堆内存:
存储new出来的内容(实体、对象)。
数组在初始化时,会为存储空间添加默认值,
整数:0
浮点数:0.0
布尔:false
字符:空字符
引用数据类型:null
每一个new出来的东西都要有一个地址值,使用完毕,会在垃圾回收器空闲时被回收。
静态初始化
静态初始化:初始化时指定每个元素的初始值,由系统决定数组长度。
格式:数据类型[ ] 变量名 = new 数据类型[ ] {数据1,数据2,数据3,……};
例:int [ ] arr = new int[ ]{1, 2, 3};
简化格式:数据类型[ ] 变量名 = {数据1,数据2,数据3,……};
例:int[ ] arr = {1, 2, 3};
public class day_005 {
public static void main(String[] args){
//动态初始化
int arr1[] = new int[3];
System.out.println("动态初始化");
System.out.println("在内存中的地址是:"+arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
System.out.println("------");
//静态初始化
int[] arr2 ={
2,3,4};
System.out.println("静态初始化");
System.out.println("在内存中的地址是:"+arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
}
两个常见问题
1. 索引越界
访问了数组中不存在的索引对应的元素,造成索引越界问题
public class day_005 {
public static void main(String[] args) {
//动态初始化
int arr1[] = new int[3];
System.out.println(arr1[3]);
System.out.println("------");
}
}
2. 空指针异常
访问的数组已经不再指向对内存的数据,造成空指针异常
public class day_005 {
public static void main(String[] args) {
//动态初始化
int arr1[] = new int[3];
//null,空值,引用数据类型的默认值,表示不指向任何有效对象
arr1 = null;
System.out.println(arr1[1]);
}
}
两个常见操作
1. 遍历
格式:
int[ ] arr = {……};
for(int i = 0; i < arr.length; i++){
arr[i] //对arr[i]进行操作
}
public class day_005 {
public static void main(String[] args) {
//静态初始化
int[] arr = {
1, 2, 3};
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
其中,arr.length
表示获取数组元素数量,也就是数组的长度。
2. 获取最值
//最大值
public class day_005 {
public static void main(String[] args) {
//静态初始化
int[] arr = {
23, 2, 35, 67, 10};
//定义变量用来保存最值
int max = arr[0];//取数组中第一个值作为最值的初始值
//将定义的最值变量与数组中每一个值进行比较,每次都将最大值保存在变量中
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
//比较结束后输出最值
System.out.println("最大值为:" + max);
}
}