java动态编程-动态编译机制

来源:互联网 发布:mac怎么卸载软件 编辑:程序博客网 时间:2024/06/15 00:11

java可以在运行时,进行动态编译,也就是说,可以在代码中,由程序控制进行编译

俩种动态编译方法:
1.执行cmd命令,调用javac进行编译
2.利用java提供的JavaComplier
3.可以利用类加载器还有java反射来执行编译好的字节文件

/** * java 动态编译 * @author liuxg * @date 2016年5月24日 上午9:15:00 */public class DynamicDemo {    public static void main(String[] args) {        DynamicDemo dy = new DynamicDemo();        dy.javaCompilerDemo();        //dy.runTimeDemo();        dy.excuteDemo();    }    /**     * run的参数     * 1.标准输入流,为空时候,默认使用system.in     * 2.标准输出流,为空时候,默认使用system.out     * 1.标准异常,为空时候,默认使用system.error     * @return 0 表示成功 1表示失败     */    private void  javaCompilerDemo(){        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();          int result =  compiler.run(null,null,null,"D:\\myclass\\com\\jvm\\demo\\HelloLiuxg.java");        System.out.println(result == 0 ? "javaCompiler编译成功" : "javaCompiler编译失败");    }    /**     * 通过执行cmd命令,runtime编译     */    private void runTimeDemo(){        try {            Runtime run = Runtime.getRuntime();            run.exec("javac -cp javac D:\\myclass\\com\\jvm\\demo\\HelloLiuxg.java");            System.out.println( "Runtime编译成功");        } catch (IOException e) {            System.out.println( "Runtime编译失败");            e.printStackTrace();        }    }    /**     * 执行字节码     */    private void excuteDemo(){        try {            URL[] urls  = new URL[]{new URL("file://D:/myclass/com/jvm/demo/HelloLiuxg.class")};            URLClassLoader loader = new URLClassLoader(urls);            Class<HelloLiuxg> clazz = (Class<HelloLiuxg>) loader.loadClass("com.jvm.demo.HelloLiuxg");            HelloLiuxg HelloLiuxg = clazz.newInstance();            System.out.println(HelloLiuxg.hello());        } catch (Exception e) {            e.printStackTrace();        }    }}
1 0
原创粉丝点击