利用反射,動態加載類,並調用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!