案例练习:用反射的方法执行某个类中的main方法。程序需求:写一个程序,这个程序能够根据用户提供的类名,去执行该类中的main方法
package com.reflection.method;
import java.lang.reflect.Method;
public class ReflectionInvokMain {
public static void main(String[] args) {
//TestMain.main(new String[]{"1","2","3"});
//
try {
Class cls = Class.forName(args[0]); //获取程序入口某个类的Class对象
Method methodMain = cls.getMethod("main", String[].class); //获取main方法
//invoke的args参数,如果是一个数组,程序会看做一个包,并解包(为了兼容旧版本的jdk),所以参数个数会变多,将数数组转型成Object就不会解包了
//或者写成methodMain.invoke(null, new String[]{new String[]{"A","B","C"}}); 也行,解包只做一次,接了也是一个数组
methodMain.invoke(null, (Object)new String[]{"A","B","C"});
/**
* 运行前打开eclipse run configuration,配置program arguments 参数 com.reflection.method.TestMain
* 这样做是对主线程的main方法传入一个参数 com.reflection.method.TestMain,而这个参数是一个具体的类名,
* 也就是对args[0] 赋值,指明获取的类对象,否则访问数组异常
*/
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class TestMain{
public static void main(String[] args) {
for(String str : args){
System.out.print(str);
}
}
} |
|