A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王璐 于 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与数组有什么关系????

1 个回复

倒序浏览
mt.invoke(null,new Object[]{new String[]{"wang"," wang"}});
在这里因为所有的类都继承自object,所以在这里反射将invoke的参数定义为一个object的数组的形式,如果你穿进来的是一个对象他就会认为你传进来一个长度为1的数组。
而如果你直接将new String[]{"wang"," wang"}传进来他会认为你传进来两个String对象。而你用object数组包装一下,就会变成含有一个String数组对象的object数组。也可以这样说,invoke的第二个参数是一个数组,而反射的那个方法需要的是数组中的对象。
本题中需要的对象就是一个数组,所以你需要把它包装一下,让invoke把他看做成一个对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马