黑马程序员技术交流社区

标题: 接收数组参数的成员方法进行反射(Object与数组的关系)... [打印本页]

作者: 王璐    时间: 2012-7-1 15:58
标题: 接收数组参数的成员方法进行反射(Object与数组的关系)...
本帖最后由 王璐 于 2012-7-4 15:47 编辑
  1. class First
  2. {
  3. public static void main(String[] args)
  4. {
  5. for(String str: args)
  6. {
  7. System.out.println(str);
  8. }
  9. }
  10. }



  11. ***************************************************************





  12. import java.lang.reflect.*;
  13. class Demo
  14. {
  15. public static void main(String[] args) throws Exception
  16. {
  17. Class clazz=Class.forName("First");
  18. Method mt=clazz.getMethod("main",String[].class);
  19. mt.invoke(null,new Object[]{new String[]{"wang"}});
  20. //mt.invoke(null,new String[]{new String[]{"wang"}});
  21. //mt.invoke(null,new String[][]{new String[]{"wang"}});
  22. }
  23. }
复制代码
mt.invoke(null,new Object[]{new String[]{"wang"," wang"}});    (jdk 1.5)在接收参数时会对String[]数组进行拆分,所以用Object[]进行打包一下。
那么疑问也就来了,Object数组中的元素不应该是对象吗?现在却传了一个数组。。。反复听了张老师讲这知识点的视频,张说:" 每个数组的父类都是Object ”," 数组也是一个对象 "。
数组是一个类吗?我不明白。数组为什么也是一个对象?疑惑。
Object[] 这个数组中的元素类型是什么,是对象吗。Object与数组有什么关系????

作者: Forever。    时间: 2012-7-1 16:16
mt.invoke(null,new Object[]{new String[]{"wang"," wang"}});
在这里因为所有的类都继承自object,所以在这里反射将invoke的参数定义为一个object的数组的形式,如果你穿进来的是一个对象他就会认为你传进来一个长度为1的数组。
而如果你直接将new String[]{"wang"," wang"}传进来他会认为你传进来两个String对象。而你用object数组包装一下,就会变成含有一个String数组对象的object数组。也可以这样说,invoke的第二个参数是一个数组,而反射的那个方法需要的是数组中的对象。
本题中需要的对象就是一个数组,所以你需要把它包装一下,让invoke把他看做成一个对象。




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