补充数组和反射的结合,先来看一下数组和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类中的静态方法,访问数组的元素
浙公网安备 33010602011771号