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.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文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑龙江漠河零下42.5℃迎入冬最低温:寒
- 下一篇: java jli.dll_JVM、JRE