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

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

【简单编译的流程】

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();

}

}

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

Python基础教程之Python 字典(Dictionary)

Python基础教程之Python 字典(Dictionary) 目录 Python Dictionary(字典) 与列表区别(list) 注意事项 创建字典 简单操作 内置函数 注意 Python Dictionary(字典) 字典(dictionary)是Python中另一个非常有用的内置数据类型。 与列表区别(list) 列表

java第十六天

java第十六天 复习 面向对象的三大特性: 封装:private get/set 继承:extends 抽取共性 实现代码复用 多态:1.存在继承关系 2.重写 3.父类引用指向子类 实现形式: 普通父类 抽象类 接口 java常用接口: Comparable public interface ComparableT { public

Java中的不可变集合与使用场景

Java中的不可变集合与使用场景 Jdk中的Collections.unmodifiable与使用 场景:你去购物时被人偷偷往你购物车里丢了东西 解决方法:不可变集合:Collections.unmodifiableXXX 需求: 我们的需求是只有在创建对象(学生)时,才能设定ta的课程,所以我们在设计类

Flink代码及ui界面应用

Flink代码及ui界面应用 文章目录 Flink和Spark各自优劣 底层机制 Spark Flink 运用 支持语言 Flink运行代码 maven配置 source部分transform模块 sink模块 执行 1、命令行执行 2、Flink web ui配置 job执行日志 task manager日志 Flink和Spark各自优劣 底层机

Udesk WebIM插件客户身份认证(一、Java签名篇)

Udesk WebIM插件客户身份认证(一、Java签名篇) 作者:张振琦 网站登录用户通过web im进行聊天对话时,可以将客户信息通过链接转给Udesk,这样客服在与客户对话时,就可以直接查看客户信息。通过客户信息辅助组件也可以进一步了解此客户的订单等其他信息。

Java多线程高并发之ThreadPool

Java多线程高并发之ThreadPool 前边我们讲述了:Java多线程高并发之基础概念篇、Java多线程高并发之详解JUC同步工具 分别从以下几个方面了解线程的概念及如何使用: 1、线程是什么?为什么需要多线程?Java如何实现多线程? 2、Java对多线程的基础操作:线程

Java时区时间转换

Java时区时间转换 开发中,我们可能需要将时区类的时间转换成我们能够理解的且表示正常的date类型(这些场景在数据库时间字段比较常见,如mongo和es,他们储存的时候时间是0时区表示,而我们处在东八区,时间差为8小时),实例如下: String time = 2020-09-27T03:57:3

[Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治

[Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归] 【问题描述】[中等] 【解答思路】 copyOfRange class Solution { public TreeNode constructFromPrePost(int[] pre, int[] post) { if(pre==null || pre.length==0) { return null; } r

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

  1. html 加载pdf文件内容不显示不出来,pdf.js首次加载pdf文件时找不到pdf文件,刷新后才能出现pdf文件...

    前台点击文件学码的定一近,更工广款近,更工广款近,更名后,后台通过openoffice将doc文件转为pdf格式文件,然后存放在服务器tomcat'中,pdf.js首次加载服务器中tomcat中的转化 ...

  2. java加载js_[Java教程]javascript如何动态加载js文件

    [Java教程]javascript如何动态加载js文件 0 2016-01-01 00:00:52 javascript如何动态加载js文件: 有时候我们需要根据需要动态加载js文件,本章节就简单介 ...

  3. 在Vs2017上集成osgearth3.2和qt5.9,并加载shp文件。

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.QT5.9在vs上部署 1.1 在Vs中下载插件 1.2 配置QT 二.OsgEarth3.2环境配置. 三.在Q ...

  4. RocketMQ源码(4)—Broker启动加载消息文件以及恢复数据源码【一万字】

    详细介绍了Broker启动加载消息文件以及恢复数据源码. 此前我们学习了Broker的启动源码:RocketMQ源码(3)-Broker启动流程源码解析[一万字],Broker的启动过程中,在Defa ...

  5. JavaScript动态加载js文件

    /********************************************************************** JavaScript动态加载js文件* 说明:* 之前没 ...

  6. 【Unity3D日常开发】Unity中的资源加载与文件路径

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  7. ThreeJS FBXLoader 加载3D文件,材质消失,已解决

    ThreeJS FBXLoader 加载3D文件,材质消失,已解决 ThreeJS FBXLoader 加载3D文件,材质消失 直接贴代码 ThreeJS FBXLoader 加载3D文件,材质消失 ...

  8. vue项目批量加载url文件并打包到zip下载

    vue项目批量加载url文件并打包到zip下载 项目里之前是遇到这样一个需求哈,需要根据选择的不同动态批量生成并下载图片, 而且这个图片不是一张一张生成下载,而是要等他选好条件之后, 把对应的图片动态 ...

  9. php源码自动识别文本中的链接,自动加载识别文件Auto.php

    用于本应用的控制器自动加载类设置,用法如同\CodeIgniter\Config\AutoloadConfig 自动加载识别文件:dayrui/App/应用目录/Config/Auto.php 语法格 ...

最新文章

  1. 工业机器人几个自由度_取件冲压上下料机械手和六自由度工业机器人805A
  2. libcudart.so.7.5: cannot open shared object file: No such file or directory
  3. 【Vegas原创】GridView设定DataFormatString属性失效的解决方法
  4. Android MTK平台最完备的开机动画修改教程
  5. boost::hana::on用法的测试程序
  6. SQL:将查询结果插入到另一个表的三种情况
  7. Android用户界面程序设计示例
  8. python 协程 php,python3.x,协程_python协程练习部分代码的理解?,python3.x,协程,asyncio - phpStudy...
  9. 计算机辅助建筑制图规范,房屋建筑制图统一标准 [附条文说明] GB/T50001-2017
  10. CentOS7 服务器连接超时自动断开问题解决
  11. layUI固定列重复
  12. PHP货币转中文大写函数
  13. leetcode-739:每日温度
  14. Windows XP SP3版本美化成Vista界面详解
  15. gitup上传的坑 ! [rejected] master -> dev-gaochao (fetch first)......
  16. 如何利用Visio来绘制斜线!
  17. 计算机机房管理具体工作和职责,机房职责_机房岗位职责_机房工作职责
  18. 差劲的 thinkpad t480 2019-2-15 入手
  19. 硬核拆解自动驾驶工具链丨如何应对无人车部署落地的挑战?
  20. 电磁场与仿真软件(34)

热门文章

  1. Docker最全教程之Ubuntu下安装Docker(十五)
  2. surging 微服务引擎 1.0 正式发布
  3. C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
  4. 编程语言的发展趋势及未来方向(1):历史回顾及趋势概述
  5. 项目中引入composer包
  6. 用正则实现多行文本合并,从而保存为csv文件
  7. React-引领未来的用户界面开发框架-读书笔记(八)
  8. C#遍历指定文件夹中的所有文件
  9. LeetCode之Nim Game
  10. js (javascript) 中获取年月日信息