Java 8 Nashorn JavaScript
Nashorn silnik JavaScriptu.
JDK 1.8 od początku, Nashorn podstawiony Rhino (JDK 1.6, JDK1.7) stał Java wbudowany silnik JavaScript. Nashorn pełni obsługuje ECMAScript 5.1 specyfikacji oraz kilka rozszerzeń. Opiera się na zastosowaniu nowego języka wyposażony JSR 292, która zawiera wprowadzony w JDK 7 w invokedynamic Z JavaScript kompilowany do kodu bajtowego Javy.
W porównaniu z poprzednim Rhino realizacji, który przyniósł 2-10 razy większą wydajność.
JJs
Silnik JJs Nashorn jest oparty narzędzie wiersza polecenia. Przyjmuje część kodu źródłowego JavaScript dla parametrów i wykonuje kod źródłowy.
Na przykład, możemy utworzyć plik sample.js o następującej treści:
print('Hello World!');
Otwórz konsolę, wpisz następujące polecenie:
$ jjs sample.js
Powyższy program jest wyjście:
Hello World!
JJs interaktywnego programowania
Otwórz konsolę, wpisz następujące polecenie:
$ jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >>
Przekazywanie parametrów
Otwórz konsolę, wpisz następujące polecenie:
$ jjs -- a b c jjs> print('字母: ' +arguments.join(", ")) 字母: a, b, c jjs>
Java wywołanie JavaScript
Użyj ScriptEngineManager, kod JavaScript może być wykonana w języku Java, przykłady przedstawiają się następująco:
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 = "w3big"; Integer result = null; try { nashorn.eval("print('" + name + "')"); result = (Integer) nashorn.eval("10 + 2"); }catch(ScriptException e){ System.out.println("执行脚本错误: "+ e.getMessage()); } System.out.println(result.toString()); } }
Realizacja powyższego scenariusza, wyjście jest:
$ javac Java8Tester.java $ java Java8Tester w3big 12
JavaScript Wywoływanie Java
Poniższy przykład pokazuje, jak odwołać klas Javy w JavaScript:
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);
Używamy JJS skryptu poleceń powyżej wyniki wyjściowe są następujące:
$ jjs sample.js 78952000000000002017.94