
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java 虛擬機器
- Java - JDK 與 JRE 與 JVM
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - If-else
- Java - Switch
- Java - For 迴圈
- Java - For-Each 迴圈
- Java - While 迴圈
- Java - do-while 迴圈
- Java - Break
- Java - Continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤和異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重 catch 塊
- Java - 巢狀 try 塊
- Java - Finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路程式設計
- Java - 網路程式設計
- Java - Socket 程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - Switch 表示式
- Java - Teeing 收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 檔案
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 緊湊數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - 程序 API 改進
- Java - 流 API 改進
- Java - 增強型 @Deprecated 註解
- Java - CompletableFuture API 改進
- Java - 流
- Java - 日期時間 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 類參考
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - Nashorn JavaScript 引擎
Nashorn JavaScript 引擎
Nashorn 是 Java 中一個非常強大且效能優異的 JavaScript 引擎。它在 Java 8 中引入,用於替換現有的 JavaScript 引擎 Rhino。Nashorn 引擎的效能比其之前的對應版本快 2 到 10 倍。它可以將 JavaScript 程式碼直接編譯成記憶體中的位元組碼。它利用 Java 7 中引入的動態特性來提高效能。
使用 Nashorn 引擎,我們可以在命令列工具中執行 JavaScript 程式碼。我們可以在 Java 檔案中嵌入 JavaScript 程式碼,並在 Java 程式碼庫中呼叫 JavaScript 方法。我們還可以使用 jjs 在 JavaScript 中呼叫 Java 方法。
透過命令列工具執行 JavaScript
對於 Nashorn 引擎,JAVA 8 引入了一個新的命令列工具 jjs,用於在控制檯中執行 JavaScript 程式碼。jjs 是一個多功能的工具,它可以解釋 JavaScript 檔案以及 JavaScript 程式碼片段。我們甚至可以使用 jjs 在 JavaScript 程式碼中呼叫 Java 方法。
示例
解釋 js 檔案
首先嚐試在 c:\> JAVA 資料夾中建立並儲存檔案 sample.js。此 sample.js 檔案包含一條 JavaScript 語句,使用 print() 方法在控制檯上列印“Hello World”。
sample.js
print('Hello World!');
開啟控制檯並使用以下命令。此處 jjs 將讀取 sample.js 檔案,解釋 JavaScript 程式碼片段並執行程式碼。
C:\JAVA>jjs sample.js
它將產生以下輸出
Hello World!
讓我們更新 sample.js 以包含一個要呼叫的 JavaScript 函式。
sample.js
function sayMessage(){ print('Hello World!'); } sayMessage();
開啟控制檯並使用以下命令。
C:\JAVA>jjs sample.js
它將產生以下輸出
Hello World!
我們也可以直接使用 jjs 評估或執行 JavaScript 程式碼片段。
在命令提示符下直接執行 JavaScript
開啟控制檯並鍵入 jjs,然後按 Enter 鍵。jjs 工具將開啟一個互動式會話。開啟 jjs 會話後,我們可以執行 JavaScript 程式碼。完成後,鍵入 quit() 並按 Enter 鍵退出 jjs 互動式會話並返回到命令提示符。
示例
C:\JAVA>jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >> C:\JAVA>
將引數傳遞給 jjs
jjs 使用一個特殊的構造 arguments 來儲存傳遞的 命令列引數。請參見下面的示例
開啟控制檯並使用以下命令。
示例
C:\JAVA> jjs -- a b c jjs> print('letters: ' +arguments) letters: a,b,c jjs> quit() >> C:\JAVA>
從 Java 呼叫 JavaScript
從 Java 6 開始,Java 就有 ScriptEngineManager 類,可用於將 JavaScript 引擎載入為 ScriptEngine 例項。在 Java 程式碼中載入引擎後,我們可以呼叫 eval() 方法在 Java 中評估 JavaScript 程式碼。我們甚至可以在 JavaScript 程式碼片段中使用 Java 變數。
示例
使用您選擇的任何編輯器(例如,在 C:\> JAVA 中)建立以下 Java 程式。
Java8Tester.java
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class Java8Tester { public static void main(String args[]) { // create the script engine manager ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); // load the Nashorn javascript engine ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn"); String name = "Mahesh"; Integer result = null; try { // call the javascript function, pass a java variable nashorn.eval("print('" + name + "')"); // call the javascript function and get the result back in java result = (Integer) nashorn.eval("10 + 2"); } catch(ScriptException e) { System.out.println("Error executing script: "+ e.getMessage()); } System.out.println(result.toString()); } }
驗證結果
使用javac編譯器編譯該類,如下所示:
C:\JAVA>javac Java8Tester.java
現在執行 Java8Tester,如下所示:
C:\JAVA>java Java8Tester
它應該產生以下結果:
Mahesh 12
從 JavaScript 呼叫 Java
使用 jjs 工具,我們甚至可以在 JavaScript 程式碼片段中呼叫 Java 程式碼。在下面的示例中,我們首先使用 Java.type(' java.math.BigDecimal ') 建立了一個 BigDecimal 型別。載入 BigDecimal 類後,我們可以在 JavaScript 程式碼中使用其方法,如下所示
示例
在 c:\> JAVA 資料夾中建立並儲存sample.js。
sample.js
// import BigDecimal java class var BigDecimal = Java.type('java.math.BigDecimal'); function calculate(amount, percentage) { // use the BigDecimal class instances to showcase BigDecimal calculations var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide( new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN); return result.toPlainString(); } var result = calculate(568000000000000000023,13.9); print(result);
開啟控制檯並使用以下命令。
C:\JAVA>jjs sample.js
它應該產生以下輸出:
78952000000000000003.20