java class文件 代码_java_基础——用代码编译.java文件+加载class文件
java_基礎(chǔ)——用代碼編譯.java文件+加載class文件
java_基礎(chǔ)——用代碼編譯.java文件+加載class文件
【簡(jiǎn)單編譯的流程】
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類(lèi):該類(lèi)是為查找工具提供者提供方法,例如,編譯器的提供者。)
* getSystemJavaCompiler:獲取此平臺(tái)提供的 Java? 編程語(yǔ)言編譯器。
*/
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
/**
* getStandardFileManager: 為此工具獲取一個(gè)標(biāo)準(zhǔn)文件管理器實(shí)現(xiàn)的新實(shí)例。
* 參數(shù):
* diagnosticListener - 用于非致命診斷信息的診斷偵聽(tīng)器;如果為 null,則使用編譯器的默認(rèn)方法來(lái)報(bào)告診斷信息
* locale - 格式化診斷信息時(shí)要應(yīng)用的語(yǔ)言環(huán)境;如果為 null,則使用默認(rèn)語(yǔ)言環(huán)境。
* charset - 用于解碼字節(jié)的字符集;如果為 null,則使用平臺(tái)默認(rèn)的字符集
* 返回:
* 標(biāo)準(zhǔn)文件管理器
*
*/
StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null,null,null);
/**
* getJavaFileObjects:獲取表示給定文件的文件對(duì)象。
* 參數(shù):
* files - 文件數(shù)組
* 返回:
* 文件對(duì)象列表
*/
Iterable units = fileMgr.getJavaFileObjects(fileName);
/**
* getTask:使用給定組件和參數(shù)創(chuàng)建編譯任務(wù)的 future
* 參數(shù):
* out - 用于來(lái)自編譯器的其他輸出的 Writer;如果為 null,則使用 System.err
* fileManager - 文件管理器;如果為 null,則使用編譯器的標(biāo)準(zhǔn)文件管理器
* diagnosticListener - 診斷偵聽(tīng)器;如果為 null,則使用編譯器的默認(rèn)方法報(bào)告診斷信息
* options - 編譯器選項(xiàng);null 表示沒(méi)有選項(xiàng)
* classes - 類(lèi)名稱(chēng)(用于注釋處理),null 表示沒(méi)有類(lèi)名稱(chēng)
* compilationUnits - 要編譯的編譯單元;null 表示沒(méi)有編譯單元
* 返回:
* 表示編譯的對(duì)象
*/
CompilationTask t = compiler.getTask(null,null,null,null,null,units);//編譯任務(wù)
// 開(kāi)始編譯
t.call();
// 關(guān)閉“java編譯器”
try {
fileMgr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【其中的TankTimeProxy類(lèi)】
package com.zjm.www.test;
public class TankTimeProxy {
public TankTimeProxy(){
System.out.println("hello TankTimeProxy");
}
}
注:默認(rèn)編譯后的class文件與該java文件在同一個(gè)文件夾下。
【加載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 去那個(gè)路勁下找這個(gè)類(lèi),默認(rèn)是bin下面的classpath,因?yàn)樽詣?dòng)編譯后的class文件默認(rèn)放在那里
URL[] urls = new URL[] {new URL("file:/"+System.getProperty("user.dir")+"/src/")};
//2 去urls里面去找class
URLClassLoader ul = new URLClassLoader(urls);
//3 load哪個(gè)類(lèi),寫(xiě)全類(lèi)名。
Class c = ul.loadClass("com.zjm.www.test.TankTimeProxy");
// 打印:hello TankTimeProxy 即代表成功
Object o = c.newInstance();
}
}
java_基礎(chǔ)——用代碼編譯.java文件+加載class文件相關(guān)教程
Python基礎(chǔ)教程之Python 字典(Dictionary)
Python基礎(chǔ)教程之Python 字典(Dictionary) 目錄 Python Dictionary(字典) 與列表區(qū)別(list) 注意事項(xiàng) 創(chuàng)建字典 簡(jiǎn)單操作 內(nèi)置函數(shù) 注意 Python Dictionary(字典) 字典(dictionary)是Python中另一個(gè)非常有用的內(nèi)置數(shù)據(jù)類(lèi)型。 與列表區(qū)別(list) 列表
java第十六天
java第十六天 復(fù)習(xí) 面向?qū)ο蟮娜筇匦?#xff1a; 封裝:private get/set 繼承:extends 抽取共性 實(shí)現(xiàn)代碼復(fù)用 多態(tài):1.存在繼承關(guān)系 2.重寫(xiě) 3.父類(lèi)引用指向子類(lèi) 實(shí)現(xiàn)形式: 普通父類(lèi) 抽象類(lèi) 接口 java常用接口: Comparable public interface ComparableT { public
Java中的不可變集合與使用場(chǎng)景
Java中的不可變集合與使用場(chǎng)景 Jdk中的Collections.unmodifiable與使用 場(chǎng)景:你去購(gòu)物時(shí)被人偷偷往你購(gòu)物車(chē)?yán)飦G了東西 解決方法:不可變集合:Collections.unmodifiableXXX 需求: 我們的需求是只有在創(chuàng)建對(duì)象(學(xué)生)時(shí),才能設(shè)定ta的課程,所以我們?cè)谠O(shè)計(jì)類(lèi)
Flink代碼及ui界面應(yīng)用
Flink代碼及ui界面應(yīng)用 文章目錄 Flink和Spark各自?xún)?yōu)劣 底層機(jī)制 Spark Flink 運(yùn)用 支持語(yǔ)言 Flink運(yùn)行代碼 maven配置 source部分transform模塊 sink模塊 執(zhí)行 1、命令行執(zhí)行 2、Flink web ui配置 job執(zhí)行日志 task manager日志 Flink和Spark各自?xún)?yōu)劣 底層機(jī)
Udesk WebIM插件客戶(hù)身份認(rèn)證(一、Java簽名篇)
Udesk WebIM插件客戶(hù)身份認(rèn)證(一、Java簽名篇) 作者:張振琦 網(wǎng)站登錄用戶(hù)通過(guò)web im進(jìn)行聊天對(duì)話(huà)時(shí),可以將客戶(hù)信息通過(guò)鏈接轉(zhuǎn)給Udesk,這樣客服在與客戶(hù)對(duì)話(huà)時(shí),就可以直接查看客戶(hù)信息。通過(guò)客戶(hù)信息輔助組件也可以進(jìn)一步了解此客戶(hù)的訂單等其他信息。
Java多線程高并發(fā)之ThreadPool
Java多線程高并發(fā)之ThreadPool 前邊我們講述了:Java多線程高并發(fā)之基礎(chǔ)概念篇、Java多線程高并發(fā)之詳解JUC同步工具 分別從以下幾個(gè)方面了解線程的概念及如何使用: 1、線程是什么?為什么需要多線程?Java如何實(shí)現(xiàn)多線程? 2、Java對(duì)多線程的基礎(chǔ)操作:線程
Java時(shí)區(qū)時(shí)間轉(zhuǎn)換
Java時(shí)區(qū)時(shí)間轉(zhuǎn)換 開(kāi)發(fā)中,我們可能需要將時(shí)區(qū)類(lèi)的時(shí)間轉(zhuǎn)換成我們能夠理解的且表示正常的date類(lèi)型(這些場(chǎng)景在數(shù)據(jù)庫(kù)時(shí)間字段比較常見(jiàn),如mongo和es,他們儲(chǔ)存的時(shí)候時(shí)間是0時(shí)區(qū)表示,而我們處在東八區(qū),時(shí)間差為8小時(shí)),實(shí)例如下: String time = 2020-09-27T03:57:3
[Leetcode][第889題][JAVA][根據(jù)前序和后序遍歷構(gòu)造二叉樹(shù)][分治
[Leetcode][第889題][JAVA][根據(jù)前序和后序遍歷構(gòu)造二叉樹(shù)][分治][遞歸] 【問(wèn)題描述】[中等] 【解答思路】 copyOfRange class Solution { public TreeNode constructFromPrePost(int[] pre, int[] post) { if(pre==null || pre.length==0) { return null; } r
總結(jié)
以上是生活随笔為你收集整理的java class文件 代码_java_基础——用代码编译.java文件+加载class文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 黑龙江漠河零下42.5℃迎入冬最低温:寒
- 下一篇: DXO之王!华为P50 Pro骁龙888