用反射方式执行某个类中的main方法:编写一个程序,这个程序可以根据用户提供的类名,去执行类中的main方法。用普通方式调完后,大家要明白为什么要用反射方式去调用?
实现代码:
package cn.yzx.day1;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
//TestArguments.main(new String[]{"111","222","333"});这种普通调用方法,但是之前就要知道类名
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
//因为main函数值传入的一个数组参数,如果直接用new String[]{"111","222","333"},编译器就会拆包,会出现三个
//参数,用下面两种方法就能解决此问题
//mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
mainMethod.invoke(null, (Object)new String[]{"111","222","333"}); //main为静态方法,用null
}
}
class TestArguments{
public static void main(String[] args){
for(String arg : args){
System.out.println(arg);
}
}
}
运行前先设置Run Configurations,如下图:
运行结果: