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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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呢?}

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

3 个回复

倒序浏览
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把你的数组当成可变参数给拆开;
回复 使用道具 举报
郑飞 发表于 2014-10-25 09:26
Method me=Class.forName(str).getMethod("main",String[].class);//这里第二个参数是String数组;
         ...

你好,你说的这个我能懂,我只是不懂,为什么必须强制类型转换为Object 或者打包到Object[]数组里面去呢?为啥我不能把他强制类型转换为String 或者String[],这样我想应该是可以的,但是操作确不行,为什么呢?
回复 使用道具 举报
new String[]{"wo","ai","zhonghua"}这是个数组啊 怎么能转成String或放到String[]里去啊
只能转Object或者用 放到Object[]里去吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马