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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁野 黑马帝   /  2012-4-3 20:06  /  1891 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package 习题;

import java.lang.reflect.Method;

public class MainFanShe {
        public static void main(String[] args) throws Exception {
                String startingClassName = args[0];
                Method methodMain = startingClassName.getClass().getDeclaredMethod(
                                "main", String[].class);
        methodMain.invoke(null, new Object[] { new String[] {"aa", "ss", "vv" }});
                               
               
        }
}

class MainDemo {

        public static void main(String[] args) {
                for (String s : args)
                        System.out.println(s);
        }
       

};


打印结果是习题.MainDemo

而为什么不是 aa ss ww

2 个回复

倒序浏览
                String startingClassName = args[0];
                 Method methodMain = startingClassName.getClass().getDeclaredMethod(
                                 "main", String[].class);  你这段代码是到String类中找一个叫main的方法,这段代码这么写会报java.lang.NoSuchMethodException。
              得用 Class.forName(startingClassName ).getMethod( "main", String[].class);
        然后在类里面右击Run as里面的Open Run Dialog点击Arguments把MainDemo 的完整路径复制进去再点击APPly。 如果不把MainDemo完整路径传进去,点击运行会报数组角标越界。
回复 使用道具 举报
                String startingClassName = args[0];//接受的是运行时的参数
                Method methodMain = startingClassName.getClass().getDeclaredMethod(
                                "main", String[].class);//   startingClassName.getClass()得到的是String.class,而不是你想调用的目标类的class
               等同于你去调用String 类中的main方法.
               所以需要改成Class.forName(startingClassName ).getMethod( "main", String[].class);
              这样才能根据所输入的参数去加载目标类,获取对应的.class文件
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马