一、一维数组的初始化
数组属于引用数据类型,必须在使用前初始化,否则会报NullPointerException异常(运行时异常)。
引用传递:多个栈内存指向同一个堆内存。
1.动态初始化(声明并开辟数组)
数据类型[] 数组名称 = new 数据类型[长度];
eg:
// 声明并开辟一个长度为5的整数数组
int[] data = new int[5];
(1)数组通过下标索引来取得元素,下标默认从0开始;
如果下标超出数组长度,数组越界异常(属于运行时异常)。
(2)数组中每个元素都有默认值,该默认值是数组数据类型的默认值。
(3)数组名称.length,取得数组长度。
(4)数组遍历推荐使用 for-each 循环(JDK1.5)。
因为 for-each 循环只能读取数组内容,而不能修改;要想修改内容,还是要用常规 for 循环。
for-each 循环:
int[] data = new int[]{1,2,3};
for(int x : data){
. . .
}
2.静态初始化
在数组定义时直接设置内容,根据值得个数确定数组长度,且一旦定义好数组长度不能修改。
(1)简化格式
数据类型[] 数组名称 = {值,值,...};
eg:
int[] data = {1,2,3,4,5};
(2)完整格式(推荐)
数据类型[] 数组名称 = new 数据类型[]{值,值,...};
eg:
int[] data = new int[]{1,2,3,4,5};
匿名数组只支持完整格式,且所有的匿名空间只使用一次,使用完之后就相当于垃圾。
二、二维数组的初始化
1.静态初始化
数据类型[][] data = new 数据类型[][]{{值,值,...},{值,值,...},...};
eg:
int[][] data = new int[][]{{1,2,3},{4,5,6}};
2.动态初始化
数据类型[][] 数组名称 = new 数据类型[行个数][列个数];
eg:
int[][] data = new int[3][4];
三、数组与方法的互操作
(1)方法接收数组
(2)方法返回数组
(3)方法修改数组
1.java中对数组的支持:(静态方法、工具方法)
(1)排序支持:java.util.Arrays.sort(数组名称);
支持所有基本数据类型数组;内部使用双轴快速排序。
(2)数组的部分拷贝:
System.arraycopy(源数组名称, 源数组开始点, 目标数组名称, 目标数组开始点, 拷贝长度);
public static void main(String[] args){
int[] data = new int[]{1,2,3,4,5};
int[] data1 = new int[10];
System.arraycopy(data,0,data1,3,5);
for(int i:data1){
System.out.print(i + " ");
}
}
输出结果为:
0 0 0 1 2 3 4 5 0 0
(3)数组全拷贝:
java.util.Arrays.copyOf(源数组名称, 新数组长度); 返回 int[ ]
从源数组第一个元素开始拷贝新数组长度个元素到新数组中
java动态数组动态扩容
public static void main(String[] args){
int[] data = new int[]{1,2,3,4,5};
int[] data1 = new int[10];
int[] data2 = java.util.Arrays.copyOf(data,data1.length);
for(int i:data2){
System.out.print(i + " ");
}
System.out.println();
int[] data3 = new int[3];
int[] data4 = java.util.Arrays.copyOf(data,data3.length);
for(int i:data4){
System.out.print(i + " ");
}
}
输出结果为:
1 2 3 4 5 0 0 0 0 0
1 2 3