黑马程序员--java反射(补)

来源:互联网 发布:centos挂载ntfs 编辑:程序博客网 时间:2024/05/17 02:21

----------android培训java培训、java学习型技术博客、期待与您交流! ----------

 

补充数组和反射的结合,先来看一下数组和Object的关系:

 1 public class ArrayTest 2 { 3     public static void main(String[] args) 4     { 5  6         int[] a1 = new int[3]; 7         int[] a2 = new int[4]; 8         int[][] a3 = new int[2][3]; 9         String[] a4 = new String[3];10         // Class对象只有一个可以不必用equals方法11         System.out.println(a1.getClass() == a2.getClass());12         // System.out.println(a1.getClass() == a4.getClass());//报错13         // System.out.println(a1.getClass() == a3.getClass());//报错14         System.out.println(a1.getClass().getName());15         System.out.println(a2.getClass().getName());16         System.out.println(a3.getClass().getName());17         System.out.println(a1.getClass().getSuperclass().getName());18         System.out.println(a3.getClass().getSuperclass().getName());19         System.out.println("\n" +"--------------------------------");20         Object aObj1 = a1;21         Object aObj2 = a4;22         for(int i = 0; i < ((String[])aObj2).length; i++)23         {24             System.out.print(((String[])aObj2)[i] + " ");25         }//遍历26         //Object[] aObj3 = a1;//报错,原因int[]类型是object类型,27         //所以Object aObj1 = a1;正确,而int类型不是object类型28         System.out.println("\n" + int.class.getName());29         //System.out.println(int.class.getSuperclass().getName());//抛异常30         Object[] aObj4 = a4;//正确因为String是object类型的31         for(int i = 0; i < aObj4.length; i++)32         {33             System.out.print((String)aObj4[i] + "  ");34         }35         //Object[][] aObj5 = a3;//报错,原因同上,int不是Object类型36         System.out.println("\n" +"--------------------------------");37         Object aObj6 = a3;38         39         for(int i = 0; i < ((int[][])aObj6).length; i++ )40         {41             System.out.println();42             for(int j = 0; j < ((int[][])aObj6)[i].length; j++)43             {44                 System.out.print(((int[][])aObj6)[i][j] + " ");45             }46         }47         System.out.println("\n" +"----------------------------");48         49         Object[] aObj7 = a3;//正确,因为int[]类型的是Object类型50         //aObj7长度为2,aObj7[i]都是一个长度为3的一位数组51         System.out.println("\n" + aObj7.length);52         for(int i = 0; i < aObj7.length; i++ )53         {54             for(int j = 0; j < ((int[])aObj7[i]).length; j++)55             {56                 System.out.print(((int[])aObj7[i])[j] + " ");57             }58             System.out.println();59         }60         61     }62 }


 

这个例子说明了基本数据类型的一维数组和二维数组和Object的关系,以前可能不太注意,在这里详细说明一下:int[]是Object类型的,int不是Object类型的,String是Object类型的,String[]也是Object类型的

数组的反射:

 1 public class ArrayTest1 2 { 3     public static void main(String[] args) 4     { 5         Class clazz = int.class; 6         int[] a = new int[]{2,3}; 7         //创建一个二维的数组,利用反射 8         Object obj1 = Array.newInstance(clazz, a); 9         int[][] b = (int[][]) obj1;//把它转化成真实的类型10 11         System.out.println(obj1.getClass().getName());12         //输出数组的第一维的长度13         System.out.println(Array.getLength(obj1));14         System.out.println(Array.get(((int [][])obj1)[0], 0));15         int[] a1 = new int[4];16         System.out.println(a1.getClass().getName());17 18     }19 }


 

利用反射创建数组,用的是Array中的静态方法Array.newInstance(clazz, a);第一个参数为Class对象,第二个是一个数组int类型的,指出数组的每维的长度;

在结合Array类中的静态方法,访问数组的元素

 

 

----------android培训java培训、java学习型技术博客、期待与您交流! ----------

原创粉丝点击