Java 动态编译DynamicCompiler
2021/7/26 17:08:00
本文主要是介绍Java 动态编译DynamicCompiler,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
动态编译的应用场景: 可以做一个浏览器端编写java代码,上传服务器编译和运行的在线评测 系统。 服务器动态加载某些类文件进行编译。 动态编译的两种做法: 1、通过Runtime调用javac,启动新的进程去操作 。2、通过JavaCompiler动态编译。
示例:import java.io.*; import java.lang.reflect.Method; import java.net.*; import javax.tools.*; /* 测试Java动态编译 */ public class 动态编译DynamicCompiler { public static void main(String[] args) throws Exception { //通过IO流操作,将字符串存储成一个临时文件(Hi.java),然后调用动态编译方法! String str = "public class Hi {public static void main(String[] args){System.out.println(\"Hello\");}}"; BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream("Hi.java")))); bw.write(str); bw.flush(); bw.close(); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int result = compiler.run(null, null, null, "Hi.java"); System.out.println(result==0?"编译成功":"编译失败"); //通过Runtime调用执行类 Runtime run = Runtime.getRuntime(); Process process = run.exec("java -cp C:/Users/kvnoe/Desktop/Jcase Hi"); 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:/Users/kvnoe/Desktop/Jcase/")}; URLClassLoader loader = new URLClassLoader(urls); Class c = loader.loadClass("Hi"); //调用加载类的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(); } } }
这篇关于Java 动态编译DynamicCompiler的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19JAVA分布式id教程:轻松入门与实践
- 2024-11-19Java高并发教程:入门与实践指南
- 2024-11-19JAVA高并发直播教程:新手入门指南
- 2024-11-19Java高并发直播教程:入门与实践指南
- 2024-11-19Java微服务教程:初学者快速入门指南
- 2024-11-19JAVA微服务教程:新手入门的详细指南
- 2024-11-19Java微服务教程:从零开始搭建你的第一个微服务应用
- 2024-11-19Java项目开发教程:初学者必备指南
- 2024-11-19Java项目开发教程:新手快速入门指南
- 2024-11-19Java项目开发教程:零基础入门到实战