public class helloworld {
public static void main(String[] args) throws IOException {
//通過字符串動態(tài)編譯:將字符串存儲成一個臨時文件(io流),然后調(diào)用動態(tài)編譯方法
String str="public class Hi {public static void main(String[] args){System.out.println(\"HaHa,sxt!\");}}";
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); //得到j(luò)ava的動態(tài)編譯器
//如果第一個參數(shù)為空則使用控制臺輸入,第二個為空則使用控制臺輸出,第三個為空則使用系統(tǒng)報錯
//第四個參數(shù)為String類型的可變參數(shù),即相當(dāng)于Sting類型的數(shù)組
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()運(yùn)行編譯好的類
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);
}
//通過反射運(yùn)行編譯好的類
try {
URL[] urls = new URL[] {new URL("file:/"+"C:/myjava/")};
URLClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("HelloWorld");
//調(diào)用加載類的main方法
Method m = c.getMethod("main",String[].class);
m.invoke(null, (Object)new String[]{});
//由于可變參數(shù)是JDK5.0之后才有。
//m.invoke(null, (Object)new String[]{});會編譯成:m.invoke(null,"aa","bb"),就發(fā)生了參數(shù)個數(shù)不匹配的問題。
//因此,必須要加上(Object)轉(zhuǎn)型,避免這個問題。
//public static void main(String[] args)
} catch (Exception e) {
e.printStackTrace();
}
}
}
文章標(biāo)題:java動態(tài)編譯
標(biāo)題鏈接:http://www.chinadenli.net/article28/jdjsjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、定制開發(fā)、網(wǎng)站設(shè)計、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)