import java.lang.reflect.*;
/**
反射主函数
*/
public class ReflectMain {
public static void main(String[] argss) throws Exception//为了有良好的阅读性参数名携程argss和下面那个类的转函数参数名以示区分
{
//第二部 在Run configurations中的arguments选项中的program argument中传入刚才获取的类名全程 此过程相当于dos命令行的运行时加入的参数
//传入的参数是存放到了数组名为argss这个数组中了而不是在args中
for(String string : argss)
{
System.out.println("程序运行时传入的参数"+string);
}
//TextArguments.main(new String[]{"111","222","333"});
String startingClassName=argss[0];//获取这个数组的第一个元素,也就是运行前传入的数组中的第一个元素,第一个元素师下面那个类的类名全称
//通过类名全称用反射获取方法,获取的是main方法
Method mainMethod=Class.forName(startingClassName).getMethod("main", String[].class);
//main是静态方法,不用对象调用,所以为null;为了防止拆包造成的参数变化先在这里打包操作
mainMethod.invoke(null,new Object[]{new String[]{"111","222","333"}});
}
}
class TextArguments{//第一步 先选中这个类名按下F2获取它的类名全程
public static void main(String[] args){
for(String arg :args)
{
System.out.println(arg);
}
}
}
|