反射與數組
java.lang.Array類提供了動态建立和通路數組元素的各種靜态方法。
例程ArrayTester1類的main()方法建立了一個長度為10的字元串數組,接着把索引位置為5的元素設為“hello”,然後再讀取索引位置為5的元素的值。
import java.lang.reflect.Array;
public class ArrayTester1
{
public static void main(String[] args) throws Exception
{
Class> classType = Class.forName("java.lang.String");
//生成數組,指定元素類型和數組長度
Object array = Array.newInstance(classType, 10);
Array.set(array, 5, "hello");
String str = (String)Array.get(array, 5);
System.out.println(str);
}
}
多元數組
首先,差別一下下面兩者:
System.out.println(Integer.TYPE);
System.out.println(Integer.class);
輸出:
int
class java.lang.Integer
一個多元數組的程式執行個體:
import java.lang.reflect.Array;
public class ArrayTester2
{
public static void main(String[] args)
{
int[] dims = new int[] { 5, 10, 15 };
// 注意區分下面兩種
System.out.println(Integer.TYPE); // int
System.out.println(Integer.class); // Integer
// 建立一個三維數組,這個數組的三個次元分别是5,10,15
Object array = Array.newInstance(Integer.TYPE, dims);
// 可變參數,也可以這樣寫:
// Object array = Array.newInstance(Integer.TYPE, 5,10,15);
System.out.println(array instanceof int[][][]);
Class> classType0 = array.getClass().getComponentType(); // 傳回數組元素類型
System.out.println(classType0); // 三維數組的元素為二維數組,輸出:class [[I
// 獲得第一層的索引為3的數組,傳回的是一個二維數組
Object arrayObject = Array.get(array, 3);
Class> classType = arrayObject.getClass().getComponentType(); // 傳回數組元素類型
System.out.println(classType); // 二維數組的元素為一維數組,輸出:class [I
// 此處傳回的是一個一維數組
arrayObject = Array.get(arrayObject, 5);
Class> classType2 = arrayObject.getClass().getComponentType(); // 傳回數組元素類型
System.out.println(classType2); // 一維數組的元素為int
// 給一維數組下标為10的位置設定值為37
Array.setInt(arrayObject, 10, 37);
int[][][] arrayCast = (int[][][]) array;
System.out.println(arrayCast[3][5][10]);
}
}
參考資料
張龍老師Java SE教學視訊。
文檔連結:
Array: