数组与Object的关系及其反射类型。
具有相同类型和同一维数的数组属于同一类型,即具有相同的Class实例对象。int[]的父类型 是Object,基本数据类型的一维数组可以当作Object来使用,不能当作Object[]来使用,非基本数据类型的一维数组可以当作 Object来使用,也可以当作 Object[]来使用。
int[] a2=new int[4];
int[][] a3=new int[2][3];
String[] a4=new String[]{"a","b","c"};
System.out.println(a1.getClass() == a2.getClass());//true
// System.out.println(a1.getClass() == a3.getClass());
//得到int[]的父类类型。
System.out.println(a1.getClass().getSuperclass().getName());//Object
System.out.println(a3.getClass().getSuperclass().getName());//Object
Object aObj1=a1;
Object aObj2=a3;
Object aObj3=a4;
// Object[] aObj4=a1;编译不通过。
Object[] aObj5=a3;
Object[] aObj6=a4;
// Arrays.asList()方法处理int[]和String[]的区别:
System.out.println(Arrays.asList(a1));//[[I@61de33],jdk1.4的语法,封包.
System.out.println(Arrays.asList(a4));//[a, b, c],jdk1.5的语法,可变参数.</span>
//数组的反射应用。
//需求:定义一个打印对象的方法。
<span style="font-size:18px;">private static void printObject(Object obj) {
/*
* Array 类提供了动态创建和访问 Java 数组的方法。
Array 允许在执行 get 或 set 操作期间进行扩展转换,但如果发生收缩转换,
则抛出 IllegalArgumentException。
*/
Class clazz=obj.getClass();
if(clazz.isArray()){
int len= Array.getLength(obj);
for(int i =0;i<len;i++){
System.out.println(Array.get(obj, i));
}
}else{
System.out.println(obj);
}
}