天天看點

動态編譯

動态編譯
動态編譯
動态編譯

 下面的demo就涵蓋了動态編譯和運作類的過程

package 動态編譯;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;public class Demo {
  public static void main(String[] args) throws Exception {
    JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();

    int result=( compiler.run(null,null, null,"G:/test.java"));
      System.out.println(result==0?"編譯成功":"編譯失敗");
//      //1:通過runtime.getRuntime運作啟動好的程序運作
//      Runtime run=Runtime.getRuntime();
//      Process process =run.exec("java -cp c:/myjava    HelloWorld");
//      InputStream  io=process.getInputStream();
//      BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(io));
//      String info="";
//      while((info= bufferedReader.readLine())!=null) {
//        System.out.println(info);
//      }
      //2通過反射運作編譯的類‘
      URL [] urls=new URL[] {new URL("file:/"+"C:/myjava/")};
        URLClassLoader classLoader=new URLClassLoader(urls);
        Class c=classLoader.loadClass("test");
         Method c1= c.getMethod("main", String[].class);
      c1.invoke(null, (Object)new String[] {"aa","bb"});
      //注意要加Object,否則會了解為傳入aa,bb兩個參數了,而不是一個數組
  }
}