Java中动态编译
在程序中编译其它 .java文件,可以使用JavaCompiler,从程序中调用Java编程语言编译器的接口。
在程序中启动 .class文件,可以使用反射实现。
例子:在程序中编译并且运行,一个简单的helloworld程序。
package lrj.annotation; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; import java.net.URL; import java.net.URLClassLoader; /** * 在Java程序中动态编译 */ public class TestClass { public static void main(String[] args) throws Exception { //准备好要编译的文件的地址 String srcDistory = "D:/my_file/";//文件夹目录 String destFile="Hello.java";//文件名字 String dest = "Hello";//目标文件:省略后缀.class //1.调用Java编程语言编译器的接口JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); //2.使用run方法开始编译 int result = compiler.run(null, null, null, srcDistory+destFile); System.out.println(result==0?"编译成功":"编译失败"); //通过反射运行此文件 try{ URL[] urls = new URL[]{new URL("file:/"+srcDistory)}; URLClassLoader loader = new URLClassLoader(urls); Class c = loader.loadClass(dest); //加载main方法并调用。静态方法可以不指定对象,invcke第一个参数为null。 c.getMethod("main",String[].class).invoke(null,(Object)new String[]{}); }catch (Exception e){ e.printStackTrace(); } } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步