黑马程序员技术交流社区
标题:
反射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