Java 简明教程
Java - Nashorn JavaScript Engine
Nashorn JavaScript Engine
Nashorn 是 Java 中一个非常强大且高效的 Javascript Engine。引入 Java 8 以替换现有的 javascript 引擎 Rhino。Nashorn 引擎的性能比其早期版本快 2 到 10 倍。它可以直接将 javascript 代码编译为内存中的字节码。它利用 Java 7 中引入的动态特性来提升性能。
使用 Nashorn engine ,我们可以在命令行工具中执行 JavaScript 代码。我们可以将 JavaScript 代码嵌入到 Java 文件中,并在 Java 代码库中调用 JavaScript 方法。我们还可以在 JavaScript 中使用 jjs. 调用 java methods
Execute JavaScript via Command Line Tools
对于 Nashorn 引擎,JAVA 8 引入了一个新的命令行工具 jjs,,用于在控制台中执行 javascript 代码。jjs 是一个多功能工具,它可以解释 javascript 文件和 javascript 代码片段。我们甚至可以使用 jjs 在 javascript 代码中调用 java 方法。
Example
Interpreting js File
我们首先尝试在 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 代码片段。
Execute JavaScript Directly in Command Prompt
打开控制台,输入 jjs 并按 Enter 键。jjs 工具将打开一个交互式会话。在 jjs 会话打开后,我们就可以执行 javascript 代码。完成后,输入 quit() 并按 Enter 键退出 jjs 交互式会话,返回命令提示符。
Calling JavaScript from Java
自 Java 6 起,Java 有一个 ScriptEngineManager 类,可以用来将 javascript 引擎加载为 ScriptEngine 实例。在 Java 代码中加载引擎之后,我们可以调用 eval() 方法以在 Java 中评估 JavaScript 代码。我们甚至可以在 javascript 代码片段中使用 Java variable(s) 。
Example
在任意编辑器中创建以下 Java 程序,例如,在 C:\> 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());
}
}
Calling Java from JavaScript
使用 jjs 工具,我们甚至可以在 Javascript 代码片段中调用 Java 代码。在以下示例中,我们首先使用 Java.type (' java.math.BigDecimal ') 创建了一个 BigDecimal 类型。一旦加载了 BigDecimal 类,我们就可以在 JavaScript 代码中使用其方法,如下所示:
Example
在 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