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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄晶 中级黑马   /  2012-12-10 14:56  /  1079 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄晶 于 2012-12-10 15:06 编辑

先看一下代码:
public class InvokeMain
{
         public static void main(String[] args) throws Exception
         {
                 String str = args[0];//args[0]的值是Main类的类名
                 
                 Method methodMain = Class.forName(str).getMethod("main", String[].class);
                 //methodMain.invoke(null, new String[]{"jeek", "wong"});错误!!!!!
                 methodMain.invoke(null, new Object[]{new String[]{"jeek", "wong"}});//正确
                 //methodMain.invoke(null, (Object)new String[]{"jeek", "wong"});正确
         }
}

class Main
{
         public static void main(String[] args)
         {
                 for(String arg : args)
                 {
                         System.out.println(arg);
                 }
         }
}
上面实现的是通过反射方式调用调用一个类的main方法..代码中做标记处有点疑惑...
invoke方法的第二个参数是可变参数,public Object invoke(Object obj,Object... args)
传入的可变参数可以看做是一个数组传入.为啥直接传入 new String[]{"jeek", "wong"} 会运行出错.???!!!!

下面也是一个可变参数的问题
定义了一个字符串数组         String[] a = new String[]{"ab", "bc", "cd"};
使用Arrays这个数组工具类中asList方法.
asList的定义是public static <T> List<T> asList(T... a) 也是接收可变参数...
执行语句System.out.println(Arrays.asList(a));结果正确.......

这把我弄晕了...
上面的两段代码中都使用了可变参数.(Object... obj).传入String[] 就不同了..
为什么第一个挂了..两者有什么区别吗???{:soso_e135:}{:soso_e135:}


评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马