代码改变世界

反射 Method和数组

2012-02-25 23:35  党飞  阅读(340)  评论(0)    收藏  举报

---------------------- android培训java培训、期待与您交流! ----------------------

  上一次我介绍了Constructor和Field类,下面再看看Method类:

   对象身上的东西都可以用一个类来表示,那么类身上的方法就可以用Method类来表示。

    看一个简单的应用:

     Method method1=String.class.getMethod("charAt",int.class);

     在这里"charAt"是我们要调用的方法的名称,我在这里调用的是String的charAt方法,后边的

     int.class是调用方法是传递的参数的类型,这里是int。

    得到方法后就该调用了,看下面:

    String str1="abc";

    method1.invoke(str1,1);

    我们要记得,方法的调用一定是针对某个对象来说的,因此上面这个写法相当于

   str1.charAt(1);

    结果是 b.

 

    了解方法反射后,我们再来看下数组的反射:

     对于数组来说,具有相同的类型和纬度就属于同一种类型,我们来看几个例子

     int [] a1=new int[3];

     int [] a2=new int[4];

     int [][]a3=new int[1][2];

     String[] a4=new String[3];

     System.out.println(a1.getClass()==a2.getClass());

     System.out.println(a1.getClass()==a3.getClass());

     System.out.println(a1.getClass()==a4.getClass());

    结果是:

      true,false,false

从结果中可以看出,a1和a2是相等的,其他不相等,由此也可看出,只有类型和位数都相等

的数组才数同种类型。

     在操作数组的时候经常会遇到下面的问题:

              String a2=new String(){"a","b","c"};

       加入我们直接打印数组

      得到的结果是[Ljava.lang.String;@186d4c1

      很显然这并不是我们想要的结果,我们想看数组里面的东西,怎么半呢,看下面:

      System.out.println(Arrays.asList(a1));

      这样就能打印出所有的结果。当然不嫌费事,用for循环完全可以实现。

---------------------- android培训java培训、期待与您交流! ----------------------