java 动态编译
发布时间:2020-12-15 07:45:46 所属栏目:Java 来源:网络整理
导读:public class helloworld { public static void main(String[] args) throws IOException { //通过字符串动态编译:将字符串存储成一个临时文件(io流),然后调用动态编译方法 String str="public class Hi {public static void main(String[] args){System.ou
public class helloworld { public static void main(String[] args) throws IOException { //通过字符串动态编译:将字符串存储成一个临时文件(io流),然后调用动态编译方法 String str="public class Hi {public static void main(String[] args){System.out.println("HaHa,sxt!");}}"; JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); //得到java的动态编译器 //如果第一个参数为空则使用控制台输入,第二个为空则使用控制台输出,第三个为空则使用系统报错 //第四个参数为String类型的可变参数,即相当于Sting类型的数组 int result=compiler.run(null,null,"C:Users10853eclipse-workspacelalasrccnsxtinhelloworld.java"); //返回值为0则表示编译成功,否则为失败 System.out.println(result==0?"编译成功":"编译失败"); //通过Runtime.getRuntime()运行编译好的类 Runtime run=Runtime.getRuntime(); Process process=run.exec("java -cp C:Users10853eclipse-workspacelalasrccnsxtin helloworld"); 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:/myjava/")}; URLClassLoader loader = new URLClassLoader(urls); Class c = loader.loadClass("HelloWorld"); //调用加载类的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 – 在CompletableFuture中多次运行Runnable
- java – 理解xmpp中的术语“扩展”,“组件”和“插件”?
- 异常:getHibernateFlushMode is not valid without active
- 如何在java URI的密码中处理“@”?
- 如何保护java中的方法(溢出等)
- springboot+RabbitMQ+InfluxDB+Grafara监控实践
- java – Selenium WebDriver:无法使用TinyMCE编辑器在ifra
- algorithm – 从二进制堆中删除叶子的时间复杂度
- java – 使用GhostDriver时如何设置屏幕/窗口大小
- java – Jersey没有看到我的MessageBodyReader