Array类
1、每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
如果此类对象表示一个数组类,则名字的内部形式为:表示该数组嵌套深度的一个或多个 '[' 字符加元素类型名。元素类型名的编码如下:
Element Type | Encoding | |
boolean | Z | |
byte | B | |
char | C | |
class or interface | Lclassname; | |
double | D | |
float | F | |
int | I | |
long | J | |
short | S | |
2、 代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class。
3、 基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组既可以当作Object类型使用,也可当作Object[]类型使用。
4、 Array工具类用于完成对数的反射操作。
示例代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package reflect; 2 3 import java.lang.reflect.Array; 4 import java.lang.reflect.Constructor; 5 import java.lang.reflect.Field; 6 import java.lang.reflect.Method; 7 import java.util.Iterator; 8 9 public class ReflectTest { 10 11 private static final Object Integer = null; 12 13 /** 14 * @author alan 15 * @param args 16 * @throws Exception 17 */ 18 public static void main(String[] args) throws Exception { 19 /* 20 *数组的反射 21 *每个数组属于被映射为 Class 对象的一个类, 22 *所有具有相同元素类型和维数的数组都共享该 Class 对象。 23 */ 24 int [] intArray1=new int[]{1,2,3}; 25 int [] intArray2=new int[4]; 26 int [] []intArray3=new int[3][4]; 27 String[] stringArray=new String[]{"a","b","c"}; 28 System.out.println(intArray1.getClass()==intArray2.getClass()); //输出为true 29 //System.out.println(intArray1.getClass()==intArray3.getClass()); //编译无法通过 30 //System.out.println(intArray1.getClass()==stringArray.getClass());//编译无法通过 31 32 System.out.println("intArray1 is "+intArray1.getClass().getName() ); 33 /* 34 * 类 Object 是类层次结构的根类。 35 * 每个类都使用 Object 作为超类。 36 * 所有对象(包括数组)都实现这个类的方法。 37 */ 38 System.out.println("intArray1's parent is "+intArray1.getClass().getSuperclass().getName()); 39 System.out.println("intArray3's parent is "+intArray3.getClass().getSuperclass().getName()); 40 Object object1=intArray1; //基本类型的一维数组可以被当作Object类型使用 41 Object object2=stringArray; //非基本类型的一维数组可以当作Object类型使用 42 Object[] object3=intArray3; //数组可以为Object类型使用 43 Object[] object4=stringArray; //非基本类型的一维数组可当作Object[]类型使用 44 //Object[] object5=intArray1; //编译出错.基本类型的一维数组不能当作Object[]类型使用,基本类型不是Object。 45 //System.out.println("int's parent is "+int.class.getSuperclass().getName());//运行出错:Exception in thread "main" java.lang.NullPointerException 46 47 /* 48 *Array工具类用于完成对数的发射操作。 49 *Array 类提供了动态创建和访问 Java 数组的方法。 50 *Array 允许在执行 get 或 set 操作期间进行扩展转换, 51 *但如果发生收缩转换,则抛出 IllegalArgumentException。 52 */ 53 54 Class classType=Class.forName("java.lang.String"); 55 Object array=Array.newInstance(classType,10); 56 Array.set(array, 5, "helloWorld!"); 57 String string=(String) Array.get(array, 5); 58 System.out.println("The 5th is "+string); 59 60 //多维数组反射,使用Array类静态方法创建三维、二维、一维数组, 61 //并给数组的每个赋值并取出该值。 62 int[] dims=new int[]{5,15,20}; 63 Object dimsarray3=Array.newInstance(int.class,dims);//此时为三维数组 64 Object dimsarray2=Array.get(dimsarray3, 3); //此时为二维数组 65 Class cls=dimsarray2.getClass().getComponentType(); //获得二维数组的Class类型 66 dimsarray2=Array.get(dimsarray2, 5); //此时为一维数组 67 Array.set(dimsarray2, 10, 37); 68 System.out.println("反射方法获取:"+Array.get(dimsarray2, 10)); 69 int[][][] arrayCast=(int[][][]) dimsarray3; 70 System.out.println("所设的值:"+arrayCast[3][5][10]); 71 } 72 }