本帖最后由 xuemeng 于 2013-5-20 15:24 编辑
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
// 程序运行时,会给本类的main方法传递一个参数, 这个参数是A, 其实就是args[0], 是A类的完整路径
String startingClassName = args[0];
//通过传递值获取 方法对象
Method m = Class.forName(startingClassName).getMethod("main",
String[].class);
//问题就在这里, 调用main方法, 因为main方法是静态的, 所以使用null, 然后第二个参数就是调用main方法时指定的具体参数, main方法是String[] ,那么我这样传递一个String数组为什么会抛 java.lang.IllegalArgumentException: argument type mismatch 异常呢? 我搞不懂, 这里的非法参数异常提示为什么是参数类型不匹配, 这个在张老师的视频里面也没有说明, 张老师说的情况是如果数组中有多个元素, 那么会把数组打开, 每一个元素作为一个参数, 所以会出错,抛的异常信息是:java.lang.IllegalArgumentException: wrong number of arguments(参数的个数错误),这个我倒还算明白,因为把参数拆成了多个, 所以报错, 那么为什么我就给String[ ] 里面一个参数也会出错呢,按照我的想法,既然有多个元素你要拆分, 那么我就给你一个元素你就不会拆分了吧, 可事实并非如此? 而且还是提示的类型不匹配??搞不懂这个类型不匹配是怎么判断的, jvm到底是如何来判断我传递的参数类型不匹配?
m.invoke(null, new String[] { "111" });
}
}
class A {
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
}
|