一维数组
java中的数组是引用类型,分配在堆空间上。
一维数组的声明方式:
java type var[]; type[] var;
- java中声明数组时不能指定其长度,如下,因为java中的数组是分配在堆空间的,需要new出来。
int[] a = new int[5];
动态初始化
-
数组定义与为数组元素分配空间和赋值的操作分开进行。
int a[]; a = new int[3]; a[0] = 1; a[1] = 2; a[2] = 3;
静态初始化
-
在定义数组的时候就为数组元素分配空间并赋值。
int a[] = {1, 2, 3}; Date days[] = { new Date(1, 4, 2004); new Date(2, 4, 2004); new Date(3, 4, 2004); }
数组元素的默认初始化
- 数组是引用类型,他的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化了。
int a[] = new int[3];
Date days = new Date[3];
// 则a中元素值为0;days中的元素值为null
二维数组
-
java中多维数组的声明和初始化按照从多维到高维的顺序进行。
// 例如 int a[][] = new int [3][]; a[0] = new int[3]; a[1] = new int[4]; a[2] = new int[5]; // int t[][] = new int[][3]; // 错误
二维数组初始化
-
静态初始化
int A[][] = {{1,2}, {3,4}, {5,6,7}}; // 错误 int B[3][2] = {{1,2}, {3,4}, {5,6}}; // 错误 int B[][2] = {{1,2}, {3,4}, {5,6}}; // 错误 int B[3][] = {{1,2}, {3,4}, {5,6}};
动态初始化
```java
int a[][] = new int[2][3];
// 或者
int b[][] = new int[2][];
b[0] = new int[3];
b[1] = new int[4];
```
数组的拷贝
-
使用 java.lang.System 类的静态方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
可以用于数组 src 从第 srcPos 项元素开始的 length 个元素拷贝到目标数组dest 的从 destPos 项开始的 length 个位置。
如果源数据数目超过目标数组边界会抛出 IndexOutOfBoundsException 异常。
public class TestArrayCopy {
public static void main(String args[]) {
String[] s =
{"Mircosoft","IBM","Sun","Oracle","Apple"};
String[] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
for(int i=0;i<sBak.length;i++){
System.out.print(sBak[i]+" ");
}
System.out.println();
int[][] intArray = {{1,2},{1,2,3},{3,4}};
int[][] intArrayBak = new int[3][];
System.arraycopy
(intArray,0,intArrayBak,0,intArray.length);
intArrayBak[2][1] = 100;
for(int i = 0;i<intArray.length;i++){
for(int j =0;j<intArray[i].length;j++){
System.out.print(intArray[i][j]+" ");
}
System.out.println();
}
}
}