Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

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
廣告