动态编译
下面的demo就涵盖了动态编译和运行类的过程
package 动态编译;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Demo {
public static void main(String[] args) throws Exception {
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
int result=( compiler.run(null,null, null,"G:/test.java"));
System.out.println(result==0?"编译成功":"编译失败");
// //1:通过runtime.getRuntime运行启动好的进程运行
// Runtime run=Runtime.getRuntime();
// Process process =run.exec("java -cp c:/myjava HelloWorld");
// InputStream io=process.getInputStream();
// BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(io));
// String info="";
// while((info= bufferedReader.readLine())!=null) {
// System.out.println(info);
// }
//2通过反射运行编译的类‘
URL [] urls=new URL[] {new URL("file:/"+"C:/myjava/")};
URLClassLoader classLoader=new URLClassLoader(urls);
Class c=classLoader.loadClass("test");
Method c1= c.getMethod("main", String[].class);
c1.invoke(null, (Object)new String[] {"aa","bb"});
//注意要加Object,否则会理解为传入aa,bb两个参数了,而不是一个数组
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!