数组
(一)数组定义的格式(推荐使用 格式一)
格式一:数据类型[ ] 变量名
范例:
int[] arr
定义了一个 int类型的数组,数组名为arr
格式二:数据类型 变量名 [ ]
范例:
int arr[]
定义了一个int类型的变量,变量名是arr数组
(二)数组的初始化
1.数组初始化概述
java中的数组必须先初始化,然后才能使用
所谓初始化:就是为数组元素分配内存空间,并为每个数组元素赋值。
2.数组初始化方式
1)动态初始化
【初始化时只指定数组长度,由系统为数组分配初始值】
格式:数组类型[ ] 变量名 = new 数据类型[数组长度];
new:为数组申请内存空间
范例:
int[] arr = new int[3]
2) 静态初始化
【初始化时指定每个数组元素的初始值,由系统决定数组长度】
格式:数据类型[ ] 变量名 = new 数据类型[ ] {数据1, 数据2 , 数据3, ......};
范例:
int[] arr = new int[]{1,2,3};
简化格式:数据类型[ ] 变量名 = {数据1,数据2,数据3,......};
范例:
int[] arr = {1,2,3};
程序举例:
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr); // [I@119d7047
System.out.println(arr[0]); // 1
System.out.println(arr[1]); // 2
System.out.println(arr[2]); // 3
}
(三)数组元素访问
1.数组变量访问方式
格式:数组名
2.数组内部保存的数据的访问方式
格式:数组名[索引]
【索引是数组中数据的编号方式】
- 作用:索引是用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
- 特征①:索引从0开始
- 特征②:索引是连续的
特征③:索引逐一增加,每次加1
程序举例:
public static void main(String[] args){ int[] arr = new int[3]; //输出数组名 System.out.println(arr);// [I@119d7047 这是数组申请的内存空间的地址值 //输出数组中的元素 System.out.println(arr[0]);// 0 System.out.println(arr[1]);// 0 System.out.println(arr[2]);// 0 }
(四)Java 中的内存分配
0.数据类型的默认值
数组在初始化时,会为存储空间添加默认值
- 整数:默认值0
- 浮点数:默认值0.0
- 布尔值:默认值false
- 字符:默认值是空字符
- 引用数据类型:默认值是null 【null:空值,引用数据类型的默认值,表示不指向任何有效对象】
1.栈内存
【存储局部变量】
使用完毕,立即消失
2.堆内存
【存储new出来的内容(实体,对象)】
每一个new出来的东西都有一个地址值
使用完毕,会在垃圾回收器空闲时被回收。
3.多个数组指向相同的内存图
程序举例:
public static void main(String[] args){
int[] arr1 = new int[3];
arr1[1] = 200;
arr1[2] = 300;
System.out.println(arr1); // [I@119d7047
System.out.println(arr1[1]);// 200
System.out.println(arr1[2]);// 300
int[] arr2 = arr1; // 当多个数组指向同一个内存图时,其中一个数组的值改变时,另一个数组的值也会随着它的改变而改变
arr2[1] = 220;
arr2[2] = 330;
System.out.println(arr1); // [I@119d7047
System.out.println(arr2); // [I@119d7047
System.out.println(arr1[1]);// 220
System.out.println(arr1[2]);// 330
System.out.println(arr2[1]);// 220
System.out.println(arr2[2]);// 330
}
(五)数组操作的两个常见小问题
1.索引越界
【访问了数组中不存在的索引对应的元素,造成索引越界问题】
int[] arr = new int[3];
//输出数组中不存在的元素
System.out.println(arr[3]); // ArrayIndexOutOfBoundsException(索引越界)
2.空指针异常
【访问的数组已经不再指向堆内存的数据,造成空指针异常】
int[] arr = new int[3];
System.out.println(arr[2]);
//把null赋值给数组
arr = null;
//输出元素
System.out.println(arr[2]); // NullPointerException(空指针异常)
(六)数组常见操作
1.遍历
通用格式:
int[] arr = {1, 2, 3, 4};
// arr.length 用于获取数组的长度
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
2.获取数组中的最大值
通用格式:
int[] arr = {100, 99, 55, 66, 88, 11};
// 定义一个变量用于保存最大值,并把数组的第一个元素保存在这个变量中
int max = arr[0];
// 将这个最大值与数组的其他每个元素进行比较大小,每次对比将较大的值重新赋值给这个变量
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
// 输出最大值
System.out.println("max:" + max);