数组是存储同一种数据类型多个元素的集合。简单的说就是一个容器。它既可以储存基本数据类型,也可以储存引用数据类型。
1.一维数组的初始化以及定义格式
数组的初始化可以分成动态初始化和静态初始化:
1.动态初始化:只给定数组的长度,由系统进行初始化,定义格式:
int[] arr = new int[5];
int arr[] = new int[5];//(这种格式一般不采用)
创建一个长度为5的int型数组,数组中的元素的初始值系统系统给定,为0。
在数组进行默认初始化时,整形的初始化值为0,浮点型的初始化值为0.0;字节型的初始化值为’\u0000’;布尔型的初始化值为false;而应用数据类型的初始化值为null。
2.静态初始化:给出初始化值,长度由系统根据给出元素的个数决定,定义格式如
int[] arr = {1,2,3};
或
int[] arr = new int []{1,2,3};
其中第二种形式在定义时,中括号中不用再写数组的长度。
1.1 创建一个数组的内存图解
代码:创建一个长度为3的数组并对数组的第一个元素赋值
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 4;
}
1.2 创建两个个数组三个引用的内存图解
public static void main(String[] args) {
int[] arr1 = new int[3];
int[] arr2 = new int[2];
int[] arr3 = arr2;
arr1[0] = 2;
arr2[0] = 3;
arr3[1]=4;
}
1.3 数组内存中的生命周期
一旦创建数组,就会在堆内存中划分一块区域来储存数组实体,当不在有任何引用指向数组时,数组就成了垃圾,最后通过垃圾回收机制清理出内存
2 二维数组的的定义
二维数组的定义有三种格式:
int [][] arr = new int [3][2];
也可以写成:
int [] arr[] = new int [3][2];
内存图解如下图:
2. int[][] arr = new int[3][];表示定义一个包涵三个一维数组的二维数组,每个一维数组的长可以后面指定。例:
public static void main(String[] args){
int[][] arr = new int[2][];
arr[0] = new int[2];
arr[1] = new int[3];
}
内存图解如下图:
3.
int[][] arr = {{1,2}{3,4,2}{1,2,4,5}};//表示定义一个具有三个一维数组,长度分别为2,3,4的二维数组。
3 遍历数组
3.1 遍历一维数组
public static void arrayDeom() {
int[] arr = {1,2,3,4,5}; //定义一个一维数组
for(int i=0;i<arr.length;i++) { //遍历数组,直到角标等于arr.length-1
System.out.println(arr[i]); //输出第角标为i的元素
}
}
3.2 遍历二维数组
public static void arrayDemo2() {
int[][] arr = {{1,2,3},{4,5,},{6,7,8,9}}; //定义一个二维数组
for(int i=0;i<arr.length;i++) { //遍历二维数组,外层循环直到i等于一维数组长度减1,
for(int j=0;j<arr[i].length;j++) { //内层循环遍历每隔一维数组
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
3 数组常见异常
数组常见的异常有两个:
1.ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
如
int[] arr = {1,2,3};
System.out.println(arr[3]);
由于数组arr不存在角标为3的元素,就会产生次异常,应该注意的,数组角标的取值范围是从0开始一直都数组的长度减一。
2.NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
如:
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);