java_基础——用代码编译.java文件+加载class文件

咱们继续学Java——高级篇 第一百一十九篇:之Java(编译器API深入解析与实践) 大家好!在上一篇博客中,我们初步了解了Java编译器API的基本使用方法,包括简单的编译调用和使用 `CompilationTask` 进行一些控制。今天,我们将深入解析编译器API的更多细节,这对于在复杂项目中更好地运用编译器API至关重要。我们将详细探讨如何获取 `CompilationTask` 对象以及与之相关的各种参数的含义和用法,包括如何定制文件管理器、处理诊断信息等内容。通过这些深入学习,我们能够更加灵活和精准地控制编译过程,满足不同场景下的需求。我希望大家在阅读过程中积极思考,将这些知识与实 阅读详情

【简单编译的流程】

  

package com.zjm.www.test;

import java.io.IOException;

import javax.tools.JavaCompiler;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class Test {

    public static void main(String[] args) {

          // 获取.java文件路径
          String fileName = System.getProperty("user.dir")+
            "\\src\\com\\zjm\\www\\test\\TankTimeProxy.java";

          /**
           * ToolProvider类:该类是为查找工具提供者提供方法,例如,编译器的提供者。)
           * getSystemJavaCompiler:获取此平台提供的 Java™ 编程语言编译器。
           */
          JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

          /**
            * getStandardFileManager: 为此工具获取一个标准文件管理器实现的新实例。
            * 参数:
            *    diagnosticListener - 用于非致命诊断信息的诊断侦听器;如果为 null,则使用编译器的默认方法来报告诊断信息
            *    locale - 格式化诊断信息时要应用的语言环境;如果为 null,则使用默认语言环境。
            *    charset - 用于解码字节的字符集;如果为 null,则使用平台默认的字符集
            * 返回:
            *    标准文件管理器
            *
           */
          StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null,null,null);

          /**
               * getJavaFileObjects:获取表示给定文件的文件对象。
               * 参数:
            *    files - 文件数组
            * 返回:
            *    文件对象列表
           */
          Iterable units = fileMgr.getJavaFileObjects(fileName);

          /**
               * getTask:使用给定组件和参数创建编译任务的 future
               * 参数:
            *    out - 用于来自编译器的其他输出的 Writer;如果为 null,则使用 System.err
            *    fileManager - 文件管理器;如果为 null,则使用编译器的标准文件管理器
            *    diagnosticListener - 诊断侦听器;如果为 null,则使用编译器的默认方法报告诊断信息
            *    options - 编译器选项;null 表示没有选项
            *    classes - 类名称(用于注释处理),null 表示没有类名称
            *    compilationUnits - 要编译的编译单元;null 表示没有编译单元
            * 返回:
            *    表示编译的对象
           */
          CompilationTask t = compiler.getTask(null,null,null,null,null,units);//编译任务

          //  开始编译
          t.call();

          //  关闭“java编译器”
          try {
            fileMgr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【其中的TankTimeProxy类】

package com.zjm.www.test;

public class TankTimeProxy {

    public TankTimeProxy(){
        System.out.println("hello TankTimeProxy");
    }
}

注:默认编译后的class文件与该java文件在同一个文件夹下。

 

  【加载class文件】

package com.zjm.www.test;

import java.net.URL;
import java.net.URLClassLoader;

public class Test2 {

    public static void main(String[] args) throws Exception {
          //1 去那个路劲下找这个类,默认是bin下面的classpath,因为自动编译后的class文件默认放在那里
          URL[] urls = new URL[] {new URL("file:/"+System.getProperty("user.dir")+"/src/")};

          //2 去urls里面去找class
          URLClassLoader ul = new URLClassLoader(urls);

          //3 load哪个类,写全类名。
          Class c = ul.loadClass("com.zjm.www.test.TankTimeProxy");

          // 打印:hello TankTimeProxy 即代表成功
          Object o = c.newInstance();
    }
}

 

亿佰特E77模块(STM32WLE5CCU6)LoRa通信实战指南:从配置到应用开发 本文详细介绍了亿佰特E77模块(STM32WLE5CCU6)的LoRa通信实战指南,从硬件配置到应用开发。基于ARM Cortex-M4内核的E77模块集成了LoRa射频前端,具备超低功耗和硬件级抗干扰特性,适用于智能农业、工业现场等场景。文章提供了开发环境搭建、LoRa参数配置、实战通信及性能优化等实用技巧,帮助开发者快速掌握LoRa通信技术。 阅读详情

相关推荐

Ubuntu22.04系统安装及配置

下载Ubuntu22.04系统镜像(下载地址:链接:https://caiyun.139.com/m/i?提取码:fLRJ),结合rufus和系统镜像制作USB启动盘,在物理机服务器上通过USB启动盘进行安装;或通过Esxi虚拟化平台创建虚拟机,然后在虚拟机中使用系统镜像进行安装。

cheagoun的博客 8万+

java compilationtask,如何通过CompilationTask设置编译源

I do not know how to set the source file for a compilationTask.I tried this:JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();List optionList = new ArrayList(Arrays.asList("-d","build/class...

weixin_32989877的博客 390

浊音/清音/爆破音的时域及频域特性

第一周作业 浊音/清音/爆破音的时域及频域特性 思路:使用Audacity进行录制,时域部分将音频放大观察波形规律,频域部分生成并进行频谱分析。 (1)浊音U 时域分析: 时域表现为短周期性,波形比较规律。 频域分析: 频域上表现为频率集中在低频区域,共振峰较为明显,短时能量较高。 (2)清音S 时域分析: 时域波形没有周期性,整体振幅小于浊音。 频域分析: 频域波形平缓,无共振峰,能量比较集中。 (3)爆破音t 时域分析: 脉冲波,更为尖锐,整体上振幅降低。 频域分析: 没有像浊音一样的共振

Leylaaaa的博客 1228

JavaAPI编译转换接口CompilationTask的Call()方法翻译

CompilationTask: /** * Performs this compilation task. The compilation may only * be performed once. Subsequent calls to this method throw * IllegalStateException.

Myth_Thick的博客 1694

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3636

探针卡技术演进:从金线微针到MEMS探针的Wafer Sort革命

本文探讨了探针卡技术从传统金线微针到MEMS探针的演进,及其对晶圆测试(Wafer Sort)的革命性影响。随着芯片焊垫间距进入45微米以下,MEMS技术凭借其超高精度、超长寿命和卓越的信号完整性,成为应对高密度、高速及3D IC测试挑战的关键,显著提升了测试效率与稳定性。

lstm7chronicler的博客 365

java动态编译及运行(转载)

通过JavaCompiler进行编译都是在当前目录下生成.class文件,而使用编译选项可以改变这个默认目录。编译选项是一个元素为String类型的Iterable集合。如我们可以使用如下代码在D盘根目录下生成.class文件。  Iterable options = Arrays.asList("-d", "d:\\"); JavaCompiler.CompilationTask t...

iteye_18106的博客 367

避坑指南:Quectel EC200A-CN在OpenWrt或嵌入式Linux下的RNDIS/ECM网络配置全解析

本文详细解析了Quectel EC200A-CN模块在OpenWrt或嵌入式Linux下的RNDIS/ECM网络配置,包括模式选择、内核配置、动态切换AT指令、网络接口生成与排错、路由与防火墙设置、性能调优及特殊场景应对策略,帮助开发者避免常见配置陷阱,提升网络稳定性和效率。

weixin_42531588的博客 287

java compilationtask,java自定义编译100个范例

private JavaCompiler.CompilationTask makeCompilationTask(String... files) throws IOException {JavaCompiler compiler = BazelJavaCompiler.newInstance();StandardJavaFileManager fileManager = compiler.get...

weixin_33256071的博客 646

Flutter框架GetX从入门到精通第二篇:路由管理-告别繁琐的Navigator

Flutter框架GetX从入门到精通第二篇:告别繁琐的Navigator。本系列将带你从零开始,一步步掌握 GetX 框架的核心功能与实战技巧。

鹏多多的博客 170

RT-DETR改进策略【RT-DETR和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。Depth Information Assisted Collaborative Mutual Promotion Network for Single Image DehazingLE

Limiiiing的博客 916

java class文件 代码_java_基础——用代码编译.java文件+加载class文件

java_基础——用代码编译.java文件+加载class文件java_基础——用代码编译.java文件+加载class文件【简单编译的流程】package com.zjm.www.test;import java.io.IOException;import javax.tools.JavaCompiler;import javax.tools.JavaCompiler.CompilationTa...

weixin_42447681的博客 305

【WRF-Urban】Registry.EM_COMMON文件概述及urban有关变量

Registry.EM_COMMON文件概述及urban有关变量

WW、forever的博客 1594

在cmd命令行窗口怎样把.java文件编译成.class文件?java文件和class文件内部代码长什么样?.class文件如果想要被JVM加载,要求是什么?

在cmd命令行窗口怎样把.java文件编译成.class文件?java文件和class文件内部代码长什么样?.class文件如果想要被JVM加载,要求是什么? 编译.java文件 首先创建一个hello.java文件,此文件的内部内容,如下图: hello.java文件的存放路径是在D:/新建文件夹 这个路径下,如下图: 接着在cmd命令行窗口,进入jdk的bin目录中,去编译此.java文件,编译命令如下图: 编译成功之后,会自动在.java文件的目录中生成一个.class文件,如下图: 编译好

xzy的博客 4412

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java动态生成java文件_【Java】动态生成Java代码并编译class文件加载

Created by KdMobiB on 2017/7/11.*/public class Utils {File file;//java文件的生成目录String rootName;/**开始解析Json数据@param jsonStr@return*/@SuppressWarnings("unchecked")public HashMap getRootFromJson(String roo...

weixin_35509069的博客 439

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

.class文件的生成及加载过程

.java文件和.class文件 .java文件: 用于保存源代码的文本文件(通俗的说:就是我们写的代码) .class文件: 生成:使用javac命令可以编译该文件-----生成.class文件 加载过程:当运行Java程序是,首先运行JVM(Java虚拟机),然后再把class文件加载到JVM的方法区里,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,并向程序员提供访问方法区内的数据结构的接口。 在加载class文件的时候,JVM会先加载类中的所有静态成

张家煦的博客 2297

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java的类加载机制

Java的类加载机制

weixin_43230825的博客 387

java 加载class_Java从指定目录下加载class文件

如果需要从 /Users/xxx/IdeaProjects/xxx-demo/xxx-business-core/target/classes 目录下加载编译好的类,需要先递归出所有的class文件,然后load到JVMpublic static Set> loadClasses(String rootClassPath) throws Exception {Set> classSet...

weixin_39542043的博客 1068

jdk生成java_JDK-自动生成JAVA类并编译加载执行

package com.byzh;import javax.tools.JavaCompiler;import javax.tools.JavaFileObject;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;import java.io.File;import java.io.FileOut...

weixin_36168996的博客 269

Java类加载之Class对象到Klass模型详解

类加载器是什么时候加载的,如下图,hotspot源码java.c中有一个javaMain方法,javaMain 里面调用了LoadMainClass 方法,你的一切疑惑都在LoadMainClass里面,它的执行逻辑是通过启动类加载器加载类sun.launcher.LauncherHelper,执行该类的方法checkAndLoadMain,加载main函数所在的类,启动扩展类加载器、应用类加载器也是在这个时候完成的。方法区:ArrayKlass。初始化就是 执行类的静态代码块,并且完成静态变量的赋值。

yygr的博客 166

使用javac编译java源文件_Java种动态加载(一)——java源文件动态编译为class文件...

Java类动态加载(一)——java源文件动态编译为class文件最近在做java动态加载这方面的工作,起初也遇到了很多困难。网上关于这方便的东西很零散,为了便于日后回过头来再看,于是我将这几天的心得体会总结如下。什么情况下会需要用java程序动态的编译java源文件,动态的加载java类文件呢?如果很少遇到这样的需求的兄弟们可能不会清楚动态的编译、动态的加载用在一个什么样的场景。下面我将我遇到的...

weixin_29576901的博客 660

arthas 修改 spring boot 的线上代码

arthas 修改 spring boot 的线上代码 这个时候有一个问题,就是现在这一步骤得到的java文件,在修改完成后得到class文件时,有可能会报错,这时候,可以把测试好的java代码替换掉这个文件内容,在编译为class文件时,就不会有错了,也可以将测试好的class文件复制线上服务器,下一步直接替换class文件就可以了

qq_31683775的博客 1032

delphi调用服务器函数_如何热更新线上的Java服务器代码

作者:未分配微服务一、前言1、热更新代码的场景(1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码(2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题二、Arthas的使用使用阿里巴巴开源的Java...

weixin_39974557的博客 173

java 执行机制_java执行机制

java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成class文件流程图如下所示:最后生成的class文件由以下部分组成:结构信息。...

weixin_32019909的博客 587

游戏服务器动态加载Java代码脚本运行

思路:1.把Java代码载入JVM内存,编译生成获取的Class文件;2.加载Class文件获取class&lt;?&gt;  类3.获取class&lt;? &gt; 有用反射生成实例获取获取方法步骤一操作:使用StandardJavaFileManager编译Java源程式 // 当前编译器JavaCompiler compiler = ToolProvider.getSystemJavaCo...

qq_35336312的博客 766

java动态代码,将文本运行为Java代码。

原理:将文本写到文件,用Java的类加载动态运行。 1.使用jdk自带rt.jar中的javax.tools包提供的编译器(也可以用runtime运行cmd)进行编译java源文件。 2.重写类加载器达到加载指定文件夹下的类。 import javax.tools.JavaCompiler; import javax.tools.ToolProvider; import java.io.File;...

全栈程序员什么都会一点 4445
上一篇: CentOS7开启SSH远程登陆
crazyArthas
博客等级 码龄10年 10粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值