黑马程序员技术交流社区

标题: 反射调用main方法疑问 [打印本页]

作者: Sponge    时间: 2011-12-16 22:04
标题: 反射调用main方法疑问
本帖最后由 Sponge 于 2011-12-16 22:04 编辑

有一个类如下:
class StrDemo
{
        public void  testArrayPara(String[] args)
        {
                for(String arg : args)
                {
                        System.out.println(arg);
                }
        }
}

普通可变参数方法的调用如下:
StrDemo demo = new StrDemo();
demo.testArrayPara(new String[]{"nihao","ds"});

可是大家记得张老师讲的反射调用main函数吗?
有一句 mainMethod.invoke(null, (Object)new String[]{"111","222","333"});不懂为什么一定要加(Object)转换
同样都是调用这么一个方法,为什么不能跟上面一样不用Object转换?










作者: 马伟奇    时间: 2011-12-16 22:28
当我们调用一个类的main方法时,invoke方法传入的对象可以为null,因为main方法是静态的,第二个参数传入一个String数组,但是因为jdk1.5兼容1.4,在方法运行时它会将数组拆开,变成多个参数,所以我们需要将String数组用一个Objrct数组包装,避免这种情况发生,因为String数组就是一个Object,我们也可以在数组前面用Object转换类型
作者: Sponge    时间: 2011-12-17 11:13
马伟奇 发表于 2011-12-16 22:28
当我们调用一个类的main方法时,invoke方法传入的对象可以为null,因为main方法是静态的,第二个参数传入一个S ...

哦,明白了,谢谢哈
作者: 我心飞翔    时间: 2011-12-17 12:49
Object表示一个对象,对象里可以存放任何类型的数据:String int 数组,list   其他对象等等,不过要想使用都要想使用Object里的数据几乎都要先判断是不是null后在转换成想要的数据




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