数组定义格式:
• 格式1:数据类型[ ] 变量名,如: int[] arr
•即是定义了一个int类型的数组,数组名叫arr[ ]
• 格式2:数据类型[] 变量名,如:int arr[]
•即是定义了一个int类型的变量,变量名是arr数组
动态初始化
初始化只指定数组长度,由系统数组分配初始数值
• 动态初始化
• 静态初始化
格式: 数据类型[] arr=new 数据类型[数组长度];
范例: int[] arr=new int[5]; //new是为数组arr申请内存空间
静态初始化
格式: 数据类型[] 变量名=new 数据类型[]{*数据1,数据2,数据3,…*}
范例: int[ ] arr=new int[ ]{1,2,3};
范例: int[ ] arr={数据1,数据2,数据3};
简化: int[ ] arr={1,2,3};
数组元素访问:
• 数组变量访问方式
• 格式:数组名
• 数组内部保存的数据的访问方式
• 格式:数组名[索引]
• 索引是数据中数据的编号方式
• 作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
特征:0开始,连续的,逐一增加
内存分配
• 栈内存:存储局部变量
• int[] arr
定义在方法中的变量,例如:arr使用完毕立马消失
• 堆内存:存储new出来的内容(实体,对象)
• new int[3]
//数组赋值
int[] arr=new int[2];
int[] arr2=new int[2];
arr[0]=100;
arr2[0]=200;
arr2[2]=300;
int[] arr2=arr;
数组常见操作问题
• 索引越界:访问了数组中不存在的对应元素,造成索引越界问题;
典例:索引越界异常(ArrayIndexOutOfBoundsException)
int[] arr=new int[3];
System.out.println(arr[3]);//我们可以知道int[3]是0,1,2,那么arr[3]不存在;
• 空指针异常:访问的数组已经不再是指向堆内存的数据,造成空指针异常;
典例:空指针异常(NullPointerException)
int[] arr=new int[3];
System.out.println(arr[2]);
arr=null; //此时arr地址指向null,找不到原来的地址了,下面强行访问arr[0]就会报错;
System.out.println(arr[0]);
遍历
即是将数组中的所有数输出一遍
//典例:输出数组数据
int[] arr=**new** int[3];
**for** (int i = 0; i <arr.length ; i++) {
System.out.println(arr[i]);
}
典例:取最值
int[] arr={12,45,23,67,87,22};
int max=arr[0];
**for** (int i = 1; i <arr.length ; i++) {
**if**(max<arr[i]){
max=arr[i];
}
}
System.out.println(max);