反射與數組
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:
http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html