利用反射,动态加载类,并调用main方法的实现
package cn.foxsand.day04;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* 利用反射,动态加载类,并调用main方法的实现
*/
public class Demo02 {
public static void main(String[] args) {
try {
URL[] urls = new URL[] {new URL("file:/" + "d/test/")};
URLClassLoader loader = new URLClassLoader(urls);
Class clazz = loader.loadClass("HelloWorld");
Method m = clazz.getMethod("main" , String[].class);
/**
* 由于可变参数是JDK5.0之后才有,如果invoke中 new String[]{} 不做Object强转,那么如果String数组中有参数,会出错。
* 例如:m.invoke(null , new String[]{"a" , "b"});
* 该段代码会被编译为:m.invoke(null ,"a" , "b");
*/
m.invoke(null , (Object)new String[]{});
}catch (Exception e1){
e1.printStackTrace();
}
}
}
控制台打印结果:Hello World!