黑马程序员技术交流社区

标题: 数组的反射 [打印本页]

作者: Simple_love    时间: 2013-10-3 03:22
标题: 数组的反射
int[] a1=new int[]{2,3,4};
int[] a2=new int[4];
int[][] a3=new int[2][3];
String[] A4=new String[]{"abc","bcd","cdf"}

//运行结果为true,具有相同的维数和元素的类型属于统一的字节码
  System.out.println(a1.getClass()==a2.getClass());
//结果为false,虽然数组的元素的类型相同但是a1是一维数组a2是二维数组,
  System.out.println(a1.getClass()==a3.getClass());
//结果为false,a1和a2两个数组都是一维数组,但是a1是整数数组,a2是字符串数组,
   System.out.println(a1.getClass()==a4.getClass());

  //结果为true, a1整数数组和a2字符串数组的父类都是Object
   System.out.println(a1.getClass().getSuperclass().getName()==a4.getClass().getSuperclass().getName()));
//
Object obj1=a1;//正常,基本类型的一维数组可以被Object类型使用
Object[] onj11=a1//编译错误;基本类型的一维数组不当着Object[]类型使用,
//下面两句运行正常, 因为非基本类型的一维数组可以当做Object使用也可以当做Object[]使用,  
Object obj3=a4;
Object[] obj12=a4;
  //下面两句运行正常,任何二位数组可以当做Object使用, 也可以当做Object[]使用,因为二维数组的元素是个一维数组,Object是数组的父类
Object obj4=a3;
Object[] obj11=a3;

System.out.println(Arrays.asList(a1));
   System.out.println(Arrays.asList(a4));
运行的结果[[I@de6ced]
       [a, b, c]
因为在jDk1.4版本asList()方法接受的是一个Object[]类型,a4是字符串数组类型,可以被转换成Object[]类型,所有就会a4的数组中所有的元素存入List集合中。a1的整数数组,不能转为Object[]类型,只能转成Object类型,所有就不会去找jdk1.4版本运行, 就会去找jdk1.5,但是1.5版本asList接收的是可变参数,这时会把a1的整数数组当做一个元素存入在list集合中,

数组的反射
public class ReflectTest {
  public static void main(String[] args)
{
Object[] a4= new Object[]{"abc",4,true}
     printObject(a4)

  }
public static void  printObject(Object obj)
{
      Class clazz=obj.getClass();


    //判断传进来的参数类型是不是数组类型
   if(clazz.isArray())
   {
得到数组的个数
   int len= Array.getLength(obj);
//clazz.getClass.getName在这里无法得到数组中的元素类型,
   for(int x=0;x<len;x++)
   {
//获取数组中的每一个元素
    System.out.println(Array.get(obj, x));
//可以得到数组中某一个具体的元素的类型
    System.out.println( Array.get(obj, x).getClass().getName());
   }
   } else
   {
    System.out.println(obj);
   }
}
运行的结果为
abc
java.lang.String
4
java.lang.Integer
  true
java.lang.Boolean

作者: 蔚蓝天色    时间: 2013-10-3 08:03
( ⊙ o ⊙ )啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2