天天看點

Java 之 Array 數組

Java反射技術除了可以在運作時動态地決定要建立什麼類型的對象,通路哪些成員變量,方法,還可以動态地建立各種不同類型,不同次元的數組。

動态建立數組的步驟如下:

1.建立Class對象,通過forName(String)方法指定數組元素的類型

2.調用Array.newInstance(Class, length_of_array)動态建立數組

通路動态數組元素的方法和通常有所不同,它的格式如下所示,注意該方法傳回的是一個Object對象

Array.get(arrayObject, index)

為動态數組元素指派的方法也和通常的不同,它的格式如下所示, 注意最後的一個參數必須是Object類型

Array.set(arrayObject, index, object)

動态數組Array不單可以建立一維數組,還可以建立多元數組。步驟如下:

1.定義一個整形數組:例如int[] dims= new int{5, 10, 15};指定一個三維數組

2.調用Array.newInstance(Class, dims);建立指定維數的數組

通路多元動态數組的方法和通路一維數組的方式沒有什麼大的不同,隻不過要分多次來擷取,每次取出的都是一個Object,直至最後一次,指派也一樣。

動态數組Array可以轉化為普通的數組,例如:

Array arry = Array.newInstance(Integer.TYPE,5);

int arrayCast[] = (int[])array;

【2】示例代碼

A. 一維數組:

public static void main(String args[]) throws Exception {

Class<?> classType = Class.forName("java.lang.String");

// 建立一個長度為10的字元串數組

Object array = Array.newInstance(classType, 10);

// 把索引位置為5的元素設為"hello"

Array.set(array, 5, "hello");

// 獲得索引位置為5的元素的值

String s = (String) Array.get(array, 5);

System.out.println(s);

}

B. 多元數組:

public static void main(String args[]) {

int[] dims = new int[] { 5, 10, 15 };

// 建立一個具有指定的元件類型和次元的新數組。

Object array = Array.newInstance(Integer.TYPE, dims);

// 取出三維數組的第3行,為一個數組

Object arrayObj = Array.get(array, 3);

Class<?> cls = arrayObj.getClass().getComponentType();

System.out.println(cls);

// 取出第3行的第5列,為一個數組

arrayObj = Array.get(arrayObj, 5);

// 通路第3行第5列的第10個元素,為其指派37

Array.setInt(arrayObj, 10, 37);

// 動态數組和普通數組的轉換:強行轉換成對等的數組

int arrayCast[][][] = (int[][][]) array;

System.out.println(arrayCast[3][5][10]);