Java 8 - Nashorn JavaScript
Met Java 8, Nashorn, wordt een sterk verbeterde javascript-engine geïntroduceerd, ter vervanging van de bestaande Rhino. Nashorn levert 2 tot 10 keer betere prestaties, omdat het de code direct in het geheugen compileert en de bytecode doorgeeft aan JVM. Nashorn gebruikt de functie Invoke dynamics, geïntroduceerd in Java 7 om de prestaties te verbeteren.
jjs
Voor de Nashorn-engine introduceert JAVA 8 een nieuwe opdrachtregeltool, jjs, om javascript-codes uit te voeren op de console.
Js-bestand interpreteren
Maak en bewaar het bestand sample.js in c:\> JAVA-map.
voorbeeld.js
print('Hello World!');
Open de console en gebruik de volgende opdracht.
C:\JAVA>jjs sample.js
Het zal de volgende output produceren:
Hello World!
jjs in interactieve modus
Open de console en gebruik de volgende opdracht.
C:\JAVA>jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >>
Argumenten doorgeven
Open de console en gebruik de volgende opdracht.
C:\JAVA> jjs -- a b c jjs> print('letters: ' +arguments.join(", ")) letters: a, b, c jjs>
JavaScript aanroepen vanuit Java
Met ScriptEngineManager kan JavaScript-code worden aangeroepen en geïnterpreteerd in Java.
Voorbeeld
Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld C:\> JAVA.
Java8Tester.java
Live demoimport 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()); } }
Verifieer het resultaat
Stel de klas samen met javac compiler als volgt −
C:\JAVA>javac Java8Tester.java
Voer nu de Java8Tester als volgt uit −
C:\JAVA>java Java8Tester
Het zou het volgende resultaat moeten opleveren −
Mahesh 12
Java aanroepen vanuit JavaScript
In het volgende voorbeeld wordt uitgelegd hoe u Java-klassen in javascript importeert en gebruikt.
Maak en bewaar sample.js in c:\> JAVA-map.
voorbeeld.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);
Open de console en gebruik de volgende opdracht.
C:\JAVA>jjs sample.js
Het zou de volgende output moeten produceren −
78952000000000000003.20
Java