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


反射與數組

  

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM