一、数组的特点
- 数组是一个引用类型
- 数组是在堆内存中的一串连续的地址存在
- 堆内存的数组空间长度一但确定 不能再次发生改变
- 数组在初始化必须指定长度
- 栈内存的变量中存储的是数组的地址引用
- 数组内部存储的类型可以是基本数据类型 也可以是引用类型
- 数组是一组数据类型相同的数据组合,将这些数据统一的管理起来
- 数组本身是一个引用数据类型,数组内存的类型可以是基本数据类型,也可以是引用类型
二、数组的定义
//第一种 有长度没有元素
//动态初始化
数据类型[] 数组名字=new 数据类型[长度];
//第二种 有元素没有长度
//静态初始化
数据类型[] 数组名字=new 数据类型[]{}
实例:
//定义了一个长度为5的数组 但是没有元素
//动态初始化的实例
String[] array=new String[5];
//定义一个有三个元素的数组 但是没有长度
//静态初始化的实例
String[] array1=new String[]{"第一个值","第二个值","第三个值"}
注:在静态初始化数组的时候, 此时的数组不是真的没有元素,每个类型都有自己对应的默认值
- 整数默认值:0
- 浮点数默认值:0.0
- 字符型默认值:0—char 97—a 65-A 48—’0‘
- 布尔型默认值:false
- 引用数据默认值:null
我们该怎么判断什么时候使用静态初始化的数组还是动态初始化的数组
- 当元素个数比较少的时候 -----静态初始化
- 当元素个数很多的时候并且有规律-----动态初始化
- 元素个数多并且没有规律的时候-----静态初始化
三、数组的使用
-
访问数组
通过元素在数组中的位置来访问数组的索引是从0开始的
String[] array=new String[]{"这是第一个值","这是第二个值","这是第三个值"} //通过元素在数组中的位置index(下标)来访问 //array[index] String value=array[0]; String value1=array[1]; String value2=array[2]; System.out.println(value); System.out.println(value1); System.out.println(value1);
以上程序执行的结果:
这是第一个值 这是第二个值 这是第三个值
-
遍历数组中的元素
- 通过循环的方式访问数组中的每一个元素
//定义一个数组 String[] array=new String[3]; //给数组添加数据 根据下标赋值 array[0]="这是第一个值"; array[1]="这是第二个值"; array[2]="这是第三个值"; //遍历数组中的元素 for (int i = 0; i < array.length; i++) { System.out.println(array[i]); }
以上程序执行结果为:
这是第一个值 这是第二个值 这是第三个值
- 在jdk1.5之后增加了很多特性,出现了一个新的特性,增强for循环
//定义一个数组 String[] array=new String[3]; //给数组添加数据 根据下标赋值 array[0]="这是第一个值"; array[1]="这是第二个值"; array[2]="这是第三个值"; //遍历数组中的元素 使用增强for循环 for (String item:array) { System.out.println(item) }
以上程序执行的结果为:
这是第一个值 这是第二个值 这是第三个值
四、二维数组
二维数组就是一维数组的嵌套
-
数组的定义
//动态初始化 数据类型 数组名[][]=new 数据类型[m][n]; //静态初始化 数据类型 数组名[][]={{}}
实例:
//动态初始化 String arrays[][]=new String[2][2]; array[0][0]="这是第一个数组中的第一个值"; array[0][1]="这是第一个数组中的第二个值"; array[1][0]="这是第二个数组中的第一个值" array[1][1]="这是第二个数组中的第二个值"; //静态初始化 String[][] array={{"这是第一个数组中第一个值","这是第一个数组中的第二个值"},{"这是第二个数组中的第一个值","这是第二个数组中的第二个值"}};
以上两种不同创建方式的数组结果都是一样的
-
数组的使用
通过双层循环遍历出二维数组中的元素
- 通过for循环遍历
String arrays[][]=new String[2][2]; array[0][0]="这是第一个数组中的第一个值"; array[0][1]="这是第一个数组中的第二个值"; array[1][0]="这是第二个数组中的第一个值" array[1][1]="这是第二个数组中的第二个值"; for(int i=0;i<array.length;i++){ for(int j=0;j<array[i].length;j++){ System.out.println(array[i][j]); } }
以上程序执行结果为:
这是第一个数组中的第一个值 这是第一个数组中的第二个值 这是第二个数组中的第一个值 这是第二个数组中的第二个值
- 通过增强for来遍历数组中的元素
String arrays[][]=new String[2][2]; array[0][0]="这是第一个数组中的第一个值"; array[0][1]="这是第一个数组中的第二个值"; array[1][0]="这是第二个数组中的第一个值" array[1][1]="这是第二个数组中的第二个值"; for (String items[]:array) { for (String item:items){ System.out.println(item); } }
以上程序执行的结果为:
这是第一个数组中的第一个值 这是第一个数组中的第二个值 这是第二个数组中的第一个值 这是第二个数组中的第二个值