天天看點

java 數組反射_Java中的反射機制(三) 反射與數組

反射與數組

java.lang.Array類提供了動态建立和通路數組元素的各種靜态方法。

例程ArrayTester1類的main()方法建立了一個長度為10的字元串數組,接着把索引位置為5的元素設為“hello”,然後再讀取索引位置為5的元素的值。

java 數組反射_Java中的反射機制(三) 反射與數組

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);

}

}

java 數組反射_Java中的反射機制(三) 反射與數組

多元數組

首先,差別一下下面兩者:

System.out.println(Integer.TYPE);

System.out.println(Integer.class);

輸出:

int

class java.lang.Integer

一個多元數組的程式執行個體:

java 數組反射_Java中的反射機制(三) 反射與數組

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 數組反射_Java中的反射機制(三) 反射與數組

參考資料

張龍老師Java SE教學視訊。

文檔連結:

Array: