import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Demo2{
public static void main(String []args) throws Exception{
/*
Test t =new Test();
Method mainMethod =Test.class.getMethod("main",String[].class);
mainMethod.invoke(t,(Object)new String[]{"123","234","345","456"});
*/
String startingClassName =args[0];
Method mainMethod =Class.forName(startingClassName).getMethod("main",String[].class);
mainMethod.invoke(null,(Object)new String []{"123","234","345"});
}
}
class Test{
public static void main(String []args){
for(String arg:args){
System.out.println(arg);
}
}
}
张孝祥老师讲的这段运行主函数的代码,我有好几个地方都看不明白,还请大家帮我解答。
1 String startingClassName =args[0]; 这里的args[0]指的应该是Demo2主函数里的字符串数组的第一个字符串元素吧?主函数里的args[]字符串没有被初始化,默认的值应该是null才对。Class.forName(startingClassName)也就等于Class.forName(null),应该会报空指针异常才对啊!
2 mainMethod.invoke(null,(Object)new String []{"123","234","345"})main方法虽然是静态的,可以传入null。但是如果传入了null,怎样来确定到底是调用了哪个主函数呢?
3 在运行方式里面设置运行配置,将自变量x设置成Test,这个是什么意思?有什么用处?张孝祥老师说这个相当于java Demo2 Test,那么java Demo2 Test又代表什么?这个知识点是被我忽略了还是毕老师的视频里没有讲?
|