动态编译_DynamicCompile、反射调用main方法问题JAVA214
来源:互联网 发布:简繁体转换软件 编辑:程序博客网 时间:2024/05/18 01:22
来源:http://www.bjsxt.com/
一、S02E214_01动态编译_DynamicCompile、反射调用main方法问题
代码测试:
public class HelloWorld { public static void main(String[] args){ System.out.println("Hi!!!!"); }}
package com.test.dynamicCompile;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;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 IOException { //1、通过JavaCompiler动态编译 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int result = compiler.run(null,null,null,"G:/JAVA/test/HelloWorld.java"); System.out.println(result==0?"编译成功":"编译失败"); //通过IO流操作,将字符串存储成一个临时文件,然后调用动态编译方法! String str = "public class Hi { public static void main(String[] args){System.out.println(\"HAHA\");}}"; //此处省略一大段代码。。。 //2、通过Runtime.getRuntime()运行启动新的进程动态运行编译好的类 Runtime run = Runtime.getRuntime(); Process process = run.exec("java -cp g:/java/test HelloWorld"); InputStream in = process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String info = ""; while ((info=reader.readLine())!=null) { System.out.println(info); } //3、通过反射运行编译好的类 try { URL[] urls = new URL[] {new URL("file:/" + "g:/java/test/")}; URLClassLoader loader = new URLClassLoader(urls); Class c = loader.loadClass("HelloWorld"); //调用加载类的main方法 Method m = c.getMethod("main", String[].class); m.invoke(null, (Object)new String[]{}); //m.invoke(null, new String[]{"a","b"}); //上面代码会被编译成:m.invoke(null,"a","b"),这样就发生参数个数不匹配的问题 //因此,必须加上(Object)进行转型,避免这个问题 } catch (Exception e) { e.printStackTrace(); } }}
控制台输出
编译成功Hi!!!!Hi!!!!
0 0
- 动态编译_DynamicCompile、反射调用main方法问题JAVA214
- 反射调用main方法
- 反射调用main方法
- 动态编译-反射调用
- 反射调用main方法注意事项
- 反射动态调用方法
- Java300StudyNote(3)-Java动态编译(DynamicCompile)、动态运行、反射调用mian方法、JavaCompiler.run()空指针问题
- java反射动态方法调用
- java动态反射调用方法
- java 反射动态方法调用
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)
- Java中通过反射调用其他类中的main方法时要注意的问题
- java中用反射调用其他类的main方法时应注意的问题
- java反射调用main方法,private方法实现
- 成员方法的反射:调用类中的main方法
- 利用Java反射机制调用其他类的main方法
- 关于反射带有数组参数的方法的调用(main)
- 利用Java反射机制调用其他类的main方法 .
- CSS核心内容定位和浮动
- filemon网页链接
- 设计模式:享元模式(Flyweight)
- 递归函数
- <响应式布局>3---设计案例样式文件的另一种引入方式
- 动态编译_DynamicCompile、反射调用main方法问题JAVA214
- 2016腾讯校园招聘模拟考试(2016.03.25)
- 少线索的陌生人信息挖掘
- 深入理解 Java 虚拟机-Java 垃圾收集机制
- leetcode——168——Excel Sheet Column Title
- 网络流24题之二十四 骑士共存 最大独立集
- 使用eclipse+python编写爬虫获取python百科的1000条词条
- JavaScript语言精粹——继承
- 遗传算法在游戏中的应用——y=x^2