Java 8 Nashorn JavaScript

Java 8 新特性Neue Funktionen in Java 8


Nashorn ist eine JavaScript-Engine.

Die Nashorn-JavaScript-Engine ist in Java 15 nicht mehr verfügbar.

Dies wurde in Java 11 als veraltet markiert:

@deprecated (forRemoval = true)

Ab JDK 1.8 ersetzte Nashorn Rhino (JDK 1.6, JDK 1.7) als eingebettete JavaScript-Engine von Java. Nashorn unterstützt die ECMAScript 5.1-Spezifikation vollständig sowie einige Erweiterungen. Es verwendet neue Sprachfunktionen basierend auf JSR 292, einschließlich des in JDK 7 eingeführten invokedynamic, um JavaScript in Java-Bytecode zu kompilieren.

Im Vergleich zur vorherigen Rhino-Implementierung bringt dies eine 2- bis 10-fache Leistungsverbesserung.


jjs

jjs ist ein auf der Nashorn-Engine basierendes Kommandozeilenwerkzeug. Es akzeptiert JavaScript-Quellcode als Parameter und führt diesen Quellcode aus.

Zum Beispiel erstellen wir eine Datei sample.js mit dem folgenden Inhalt:

print('Hello World!');

Öffnen Sie die Konsole und geben Sie den folgenden Befehl ein:

$ jjs sample.js

Die Ausgabe des obigen Programms ist:

Hello World!

Interaktive Programmierung mit jjs

Öffnen Sie die Konsole und geben Sie den folgenden Befehl ein:

$ jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

Parameter übergeben

Öffnen Sie die Konsole und geben Sie den folgenden Befehl ein:

$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs> 

JavaScript aus Java aufrufen

Mit ScriptEngineManager kann JavaScript-Code in Java ausgeführt werden, wie im folgenden Beispiel gezeigt:

Java8Tester.java-Datei

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 = "Example"; Integer result = null; try { nashorn.eval("print('" + name + "')"); result = (Integer) nashorn.eval("10 + 2"); }catch(ScriptException e){ System.out.println("Fehler beim Ausführen des Skripts:"+ e.getMessage()); } System.out.println(result.toString()); } }

Führen Sie das obige Skript aus, das Ausgabeergebnis ist:

$ javac Java8Tester.java 
$ java Java8Tester
Example
12


Java aus JavaScript aufrufen

Das folgende Beispiel zeigt, wie man Java-Klassen in JavaScript referenziert:

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);

Wir verwenden den Befehl jjs, um das obige Skript auszuführen, und die Ausgabe lautet wie folgt:

$ jjs sample.js
78952000000000002017.94

Java 8 新特性Neue Funktionen in Java 8

Andere Erweiterungen