05 - JavaSE之数组

一维数组

  • 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();
    }
  }
}
上一篇:微软停止Windows2003技术支持服务


下一篇:10 - JavaSE之网络编程