Java300StudyNote(3)-Java动态编译(DynamicCompile)、动态运行、反射调用mian方法、JavaCompiler.run()空指针问题

本文介绍了Java动态编译的场景、相关API及其实现,着重解决了使用JavaCompiler.run()时出现的空指针异常问题,提供了解决方案。还探讨了动态运行编译类的方法,包括通过Runtime和反射调用main方法,并分享了字符串代码动态编译的思路。
摘要由CSDN通过智能技术生成

动态编译的应用场景

以W3School为例,动态编译常用的场景如下:即输入代码,发送到服务器进行动态编译并返回结果

这里写图片描述

动态编译相关API

//获取系统的编译器
JavaCompiler compile = ToolProvider.getSystemJavaCompiler();

/**
* 执行编译
* @param in “standard” input; use System.in if null 标准的输入流
* @param out “standard” output; use System.out if null 标准的输出流
* @param err “standard” error; use System.err if null 标准的错误输出流
* @param arguments arguments to pass to the tool 将要编译的文件名,支持可变参数
* @Return 0表示编译成功,非0表示编译失败
**/
compile.run(in, out, err, arguments);

动态编译程序测试

下面我们通过程序来直观的体验一下:
1、首先我在E盘创建了一个Test文件夹,里面放了一个Test.java文件,文件内容如下图所示:
这里写图片描述

Test.java
这里写图片描述

2、创建好了文件接下来我们来写测试程序

package com.maple.DynamicCompile;

import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class Demo02 {
   

    @org.junit.Test
    public void test() {
        //获取编译器
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        /**
         * 设置为null表示使用系统默认的输入输入与错误输出流
         */
        int result = compiler.run(null, null, null, "E:/Test/Test.java");
        System.out.println(result==0?"编译成功":
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值