Reflect 数组操作示例

来源:互联网 发布:ps -ef|grep java 编辑:程序博客网 时间:2024/05/04 16:27


package com.age.www;
import java.lang.reflect.Array;


public class ReflectArrayDemo {

 public static void main(String[] args) throws Exception{
  Object arry1d=Array.newInstance(Class.forName("java.lang.String"), 5);
  String[] strary=(String[])arry1d;
  strary[3]="abc";// 通过数组变量给实例赋值
  Array.set(arry1d, 2, "bcd");//通过反射给实例赋值
  System.out.println(Array.get(arry1d, 2)+strary[3]);  /*
  Object --arry1d-->赋值给了strary。 分别用
  1.Array反射的方式设定数组的值。
  2.直接将object对象向下转型为数组,然后再赋值。
  //此时实例对象,被数组变量和反射方式进行了赋值!
  
  
  */
  System.out.println("****************************************");
  Object intary=Array.newInstance(int.class, 2,3);//如果两个int参数说明是2维数组,3个就是3维数组。 也可以将参数改为int[]{2,3} ,也可以表述为2行3列。
  Object intary_sub=Array.get(intary, 1);//找到intary[1]这个对象,这个对象实际也是一个一维数组。因为它是一个地址指向的是一个长度是3个int数组。
  int[] intary_tmp=(int[])intary_sub;
  intary_tmp[2]=20; //将intary_sub引用变量直接向下转型为数组变量;然后将引用复制给另一个数组变量;然后在里面赋值. 这个数组引用变量和intary_sub指向同一个实例。。。此时然后再用Array反射输出这个实例的第三个位置的值:
  System.out.println("将intary_sub引用变量直接向下转型为数组变量;然后将引用复制给另一个数组变量;然后在里面赋值. 这个数组引用变量和intary_sub指向同一个实例。。。此时然后再用Array反射输出这个实例的第三个位置的值:"+Array.get(intary_sub, 2));
  
  //另一种方式是:
  Array.set(intary_sub, 1, 10);
  int[][] arr=(int[][])intary;
  //System.out.println(Array.get(intary,1,2 )); 不能这样使用。。。 因为只有一个Static get(Object array,int)
  System.out.println(arr[1][2]+"++++"+arr[1][1]);  //所以必须用2维数组变量,输出相应的值。

 }

}


0 0
原创粉丝点击