黑马程序员技术交流社区

标题: 求助:帮我把这个程序详细的解释一下(自己只能懂一点) [打印本页]

作者: axing110    时间: 2014-10-25 09:07
标题: 求助:帮我把这个程序详细的解释一下(自己只能懂一点)
public class test_11 {

        public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException   {
                String str=args[0];
                Method me=Class.forName(str).getMethod("main",String[].class);
            me.invoke(null,(Object)new String[]{"wo","ai","zhonghua"});
        }
}
class MyMain
{
        public static void main(String[] args)
        {
                for(String  ss:args)
                {
                        System.out.println(ss);
                }
               
        }
}
首先说下我自己的理解:
1:首先通过调用的ages[0]获取被调用的类名
2:在通过类名获取方法
3:在用方法去调用对应的参数。
{为什么强制类型转换为String不行,而能强制类型转换为Obj呢?}


作者: 郑飞    时间: 2014-10-25 09:26
Method me=Class.forName(str).getMethod("main",String[].class);//这里第二个参数是String数组;
            me.invoke(null,(Object)new String[]{"wo","ai","zhonghua"});//你传入String数组的话,jdk1.5新特性,可变参数原理,会将你的new String[]{"wo","ai","zhonghua"拆成3个String,造成参数错误找不到该方法;
所以转成Object是为了不让jdk把你的数组当成可变参数给拆开;
作者: axing110    时间: 2014-10-25 09:28
郑飞 发表于 2014-10-25 09:26
Method me=Class.forName(str).getMethod("main",String[].class);//这里第二个参数是String数组;
         ...

你好,你说的这个我能懂,我只是不懂,为什么必须强制类型转换为Object 或者打包到Object[]数组里面去呢?为啥我不能把他强制类型转换为String 或者String[],这样我想应该是可以的,但是操作确不行,为什么呢?
作者: 郑飞    时间: 2014-10-25 09:39
new String[]{"wo","ai","zhonghua"}这是个数组啊 怎么能转成String或放到String[]里去啊
只能转Object或者用 放到Object[]里去吧




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