黑马程序员技术交流社区

标题: 反射Main问题 [打印本页]

作者: 袁野    时间: 2012-4-3 20:06
标题: 反射Main问题
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
作者: 李震 李震 李震    时间: 2012-4-4 08:50
                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完整路径传进去,点击运行会报数组角标越界。
作者: 田啸    时间: 2012-4-4 09:22
                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文件




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