动态编译
动态编译的应用场景
可以做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统
服务器动态加载某些类文件进行编译
动态编译的两种做法
通过Runtime调用javac,启动新的进程去操作
1
2Runtime run = Runtime.getRuntime();
Process process = run.exe("javac -cp d:/myjava/a.java");通过JavaComplier动态编译
1 | JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); |
动态运行编译好的类
通过Runtime.getRuntime()启动新的进程运行
1
2Runtime run = Runtime.getRuntime();
Process pro = run.exec("java -cp ./temp temp/com/Hello")通过反射运行编译好的类
1
2
3
4
5
6
7URL[] urls = new URL[]{new URL("file:")};
System.out.println(urls[0]);
URLClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("Hello");
//调用加载类的main方法
Method m = c.getMethod("main",String[].class);
m.invoke(null,(Object)new String[]{"aa","bb"});
动态编译代码字符串
1 | // 1.创建需要动态编译的代码字符串 |
脚本引擎执行javascrpit代码
1 | //获得脚本引擎对象 |