第一个小问题:如何使用myeclipse给一个类的main方法传递参数?
在要传递参数的类里,右键-->run as-->run configurations-->可以看到如下图所示:
选中arguments选项卡,在下面的Program arguments里填写要传递的参数即可。
第二个小问题:如何用反射方式执行某个类中的main方法?
//本实例实现如下功能:ReflectDemo类利用反射执行TestArguments中的main方法,逐个输出传给TestArguments的参数
public classReflectDemo{
public static void main(String[] args) throws Exception {
public static void main(String[] args) throws Exception {
//为什么要用反射的方式调用?因为不知道要调用的类名,所以以参数的方式传入
//下面这句代码是使用静态代码的方式直接调用main方法,在此只是做个对比
//下面这句代码是使用静态代码的方式直接调用main方法,在此只是做个对比
TestArguments.main(new String[]{"111","222"});//①
//args[0]就是传给ReflectDemo类的第一个参数,具体实现参照第一个小问题
String startClassName = args[0];//args[0]就是要启动的那个类
String startClassName = args[0];//args[0]就是要启动的那个类
//利用反射获得TestArguments类的main方法
Method mainMethod = Class.forName(startClassName).getMethod("main", String[].class);
//main方法是静态的,所以invoke的第一个参数可以不用传值,设置为null
Method mainMethod = Class.forName(startClassName).getMethod("main", String[].class);
//main方法是静态的,所以invoke的第一个参数可以不用传值,设置为null
//查了下jdk手册,invoke这个方法就是对带有指定参数的指定对象调用由此
Metho
d
对象表示的底层方法,具体到下面这句代码:就是把
// new Object[]{new String[]{"111","222"}}这个参数传给TestArguments类的main方法,去执行这个main方法
//还要注意,invoke方法的参数是Object类型,所以要使用new Object封装一下才可以
mainMethod.invoke(null, new Object[]{new String[]{"111","222"}});//②
mainMethod.invoke(null, new Object[]{new String[]{"111","222"}});//②
//这句与上面一句实现同样的效果
mainMethod.invoke(null, (Object)new String[]{"111","222"});//③
}
mainMethod.invoke(null, (Object)new String[]{"111","222"});//③
}
}
另一个类:
//用反射方式执行下面这个类中的main方法
class TestArguments{
public static void main(String[] args){
for(String arg:args){
System.out.println(arg);
}
}
}
class TestArguments{
public static void main(String[] args){
for(String arg:args){
System.out.println(arg);
}
}
}
执行结果为:
111
222
111
222
111
222
222
111
222
111
222
这三组结果分别是①②③的运行结果