Java反射机制初体验(3)

发表于:2013-3-12 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:AlanZhang    来源:51Testing软件测试网采编

  Array类

  1、每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。

  如果此类对象表示一个数组类,则名字的内部形式为:表示该数组嵌套深度的一个或多个 '[' 字符加元素类型名。元素类型名的编码如下:

  2、代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class。

  3、基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组既可以当作Object类型使用,也可当作Object[]类型使用。

  4、Array工具类用于完成对数的反射操作。

  示例代码:

View Code
 package reflect;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Iterator;
 
 public class ReflectTest {
 
     private static final Object Integer = null;
 
     /**
      * @author alan
      * @param args
      * @throws Exception
      */
     public static void main(String[] args) throws Exception {
         /*
          *数组的反射
          *每个数组属于被映射为 Class 对象的一个类,
          *所有具有相同元素类型和维数的数组都共享该 Class 对象。
          */
         int [] intArray1=new int[]{1,2,3};
         int [] intArray2=new int[4];
         int [] []intArray3=new int[3][4];
         String[] stringArray=new String[]{"a","b","c"};
         System.out.println(intArray1.getClass()==intArray2.getClass());    //输出为true
         //System.out.println(intArray1.getClass()==intArray3.getClass());    //编译无法通过
         //System.out.println(intArray1.getClass()==stringArray.getClass());//编译无法通过
        
         System.out.println("intArray1 is "+intArray1.getClass().getName() );
         /*
          * 类 Object 是类层次结构的根类。
          * 每个类都使用 Object 作为超类。
          * 所有对象(包括数组)都实现这个类的方法。
          */
         System.out.println("intArray1's parent is "+intArray1.getClass().getSuperclass().getName());
         System.out.println("intArray3's parent is "+intArray3.getClass().getSuperclass().getName());
         Object object1=intArray1;                //基本类型的一维数组可以被当作Object类型使用
         Object object2=stringArray;            //非基本类型的一维数组可以当作Object类型使用
         Object[] object3=intArray3;                //数组可以为Object类型使用
         Object[] object4=stringArray;             //非基本类型的一维数组可当作Object[]类型使用
         //Object[] object5=intArray1;             //编译出错.基本类型的一维数组不能当作Object[]类型使用,基本类型不是Object。
         //System.out.println("int's parent is "+int.class.getSuperclass().getName());//运行出错:Exception in thread "main" java.lang.NullPointerException
        
         /*
          *Array工具类用于完成对数的发射操作。
          *Array 类提供了动态创建和访问 Java 数组的方法。
          *Array 允许在执行 get 或 set 操作期间进行扩展转换,
          *但如果发生收缩转换,则抛出 IllegalArgumentException。
          */
        
         Class classType=Class.forName("java.lang.String");
         Object array=Array.newInstance(classType,10);
         Array.set(array, 5, "helloWorld!");
         String string=(String) Array.get(array, 5);
         System.out.println("The 5th is "+string);
        
         //多维数组反射,使用Array类静态方法创建三维、二维、一维数组,
         //并给数组的每个赋值并取出该值。
         int[] dims=new int[]{5,15,20};
         Object dimsarray3=Array.newInstance(int.class,dims);//此时为三维数组
         Object dimsarray2=Array.get(dimsarray3, 3);    //此时为二维数组
         Class cls=dimsarray2.getClass().getComponentType(); //获得二维数组的Class类型
         dimsarray2=Array.get(dimsarray2, 5);    //此时为一维数组
         Array.set(dimsarray2, 10, 37);
         System.out.println("反射方法获取:"+Array.get(dimsarray2, 10));
         int[][][] arrayCast=(int[][][]) dimsarray3;
         System.out.println("所设的值:"+arrayCast[3][5][10]);        
     }
 }

相关链接:

Java反射机制初体验(1)

Java反射机制初体验(2)

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号