黑马程序员技术交流社区
标题:
接收数组参数的成员方法进行反射(Object与数组的关系)...
[打印本页]
作者:
王璐
时间:
2012-7-1 15:58
标题:
接收数组参数的成员方法进行反射(Object与数组的关系)...
本帖最后由 王璐 于 2012-7-4 15:47 编辑
class First
{
public static void main(String[] args)
{
for(String str: args)
{
System.out.println(str);
}
}
}
***************************************************************
import java.lang.reflect.*;
class Demo
{
public static void main(String[] args) throws Exception
{
Class clazz=Class.forName("First");
Method mt=clazz.getMethod("main",String[].class);
mt.invoke(null,new Object[]{new String[]{"wang"}});
//mt.invoke(null,new String[]{new String[]{"wang"}});
//mt.invoke(null,new String[][]{new String[]{"wang"}});
}
}
复制代码
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