您好,登錄后才能下訂單哦!
public class helloworld {
public static void main(String[] args) throws IOException {
//通過字符串動態編譯:將字符串存儲成一個臨時文件(io流),然后調用動態編譯方法
String str="public class Hi {public static void main(String[] args){System.out.println(\"HaHa,sxt!\");}}";
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); //得到java的動態編譯器
//如果第一個參數為空則使用控制臺輸入,第二個為空則使用控制臺輸出,第三個為空則使用系統報錯
//第四個參數為String類型的可變參數,即相當于Sting類型的數組
int result=compiler.run(null, null, null,"C:\\Users\\10853\\eclipse-workspace\\lala\\src\\cn\\sxt\\in\\helloworld.java");
//返回值為0則表示編譯成功,否則為失敗
System.out.println(result==0?"編譯成功":"編譯失敗");
//通過Runtime.getRuntime()運行編譯好的類
Runtime run=Runtime.getRuntime();
Process process=run.exec("java -cp C:\\Users\\10853\\eclipse-workspace\\lala\\src\\cn\\sxt\\in helloworld");
InputStream in=process.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String info="";
while((info=reader.readLine())!=null)
{
System.out.println(info);
}
//通過反射運行編譯好的類
try {
URL[] urls = new URL[] {new URL("file:/"+"C:/myjava/")};
URLClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("HelloWorld");
//調用加載類的main方法
Method m = c.getMethod("main",String[].class);
m.invoke(null, (Object)new String[]{});
//由于可變參數是JDK5.0之后才有。
//m.invoke(null, (Object)new String[]{});會編譯成:m.invoke(null,"aa","bb"),就發生了參數個數不匹配的問題。
//因此,必須要加上(Object)轉型,避免這個問題。
//public static void main(String[] args)
} catch (Exception e) {
e.printStackTrace();
}
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。