Java 8 - Nashorn JavaScript
1
Java 8-概述
2
Java 8 - Lambda表達(dá)式
3
Java 8 - 方法引用
4
Java8-Functional Interfaces函數(shù)式接口
5
Java 8 - 默認(rèn)方法
6
Java 8 - Streams
7
Java 8 - Optional Class可選類
8
Java 8 - Nashorn JavaScript
9
Java 8 - New Date/Time API
使用Java 8,Nashorn,引入了一個(gè)大大改進(jìn)的JavaScript引擎來(lái)替代現(xiàn)有的Rhino。Nashorn提供2到10倍的性能,因?yàn)樗苯泳幾g內(nèi)存中的代碼,并將字節(jié)碼傳遞給JVM。Nashorn使用在Java 7中引入的invokedynamics功能來(lái)提高性能。
原文鏈接:http://blogxinxiucan.sh1.newtouch.com/2017/07/19/Java-8-Nashorn-JavaScript/
JJS
對(duì)于Nashorn引擎,JAVA 8引入了一個(gè)新的命令行工具jjs來(lái)在控制臺(tái)執(zhí)行JavaScript代碼。
解釋js文件
在c:> JAVA文件夾中創(chuàng)建并保存文件sample.js。
sample.js
print('Hello World!');
打開(kāi)控制臺(tái)并使用以下命令。
$jjs sample.js
它將產(chǎn)生以下輸出:
Hello World!
jjs在交互模式
打開(kāi)控制臺(tái)并使用以下命令。
$jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>
通過(guò)參數(shù)
打開(kāi)控制臺(tái)并使用以下命令。
$jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>
從Java調(diào)用JavaScript
使用ScriptEngineManager,可以在Java中調(diào)用和解釋JavaScript代碼。
例
使用您所選擇的任何編輯器(例如C:> JAVA)創(chuàng)建以下Java程序。
Java8Tester.java
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Java8Tester {
public static void main(String args[]){
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String name = "Mahesh";
Integer result = null;
try {
nashorn.eval("print('" + name + "')");
result = (Integer) nashorn.eval("10 + 2");
}catch(ScriptException e){
System.out.println("Error executing script: "+ e.getMessage());
}
System.out.println(result.toString());
}
}
驗(yàn)證結(jié)果
使用javac編譯器編譯類,如下所示:
$javac Java8Tester.java
現(xiàn)在運(yùn)行Java8Tester如下 -
$java Java8Tester
應(yīng)該產(chǎn)生以下結(jié)果 -
Mahesh
12
從JavaScript調(diào)用Java
以下示例說(shuō)明如何在java腳本中導(dǎo)入和使用Java類 -
sample.js
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
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);
打開(kāi)控制臺(tái)并使用以下命令。
$jjs sample.js
它應(yīng)該產(chǎn)生以下輸出 -
78952000000000000003.20