Java 8 Nashorn JavaScript
Nashorn mesin javascript.
JDK 1,8 dari awal, Nashorn digantikan Rhino (JDK 1.6, JDK1.7) menjadi Java engine JavaScript tertanam. Nashorn mendukung penuh ECMAScript 5.1 spesifikasi dan beberapa ekstensi. Hal ini didasarkan pada penggunaan bahasa baru fitur JSR 292, yang berisi diperkenalkan pada JDK 7 di invokedynamic, JavaScript dikompilasi ke dalam kode byte Java.
Dibandingkan dengan realisasi Rhino sebelumnya, yang membawa 2-10 kali kinerja.
jjs
jjs Nashorn mesin adalah berdasarkan alat baris perintah. Ia menerima beberapa JavaScript kode sumber untuk parameter, dan mengeksekusi kode sumber.
Sebagai contoh, kita membuat file sample.js dengan isi sebagai berikut:
print('Hello World!');
Buka konsol, masukkan perintah berikut:
$ jjs sample.js
Output program di atas adalah:
Hello World!
pemrograman interaktif jjs
Buka konsol, masukkan perintah berikut:
$ jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >>
melewati parameter
Buka konsol, masukkan perintah berikut:
$ jjs -- a b c jjs> print('字母: ' +arguments.join(", ")) 字母: a, b, c jjs>
Java memanggil JavaScript
Gunakan ScriptEngineManager, kode JavaScript dapat dieksekusi di Jawa, contoh adalah sebagai berikut:
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()); } }
Pelaksanaan script di atas, output:
$ javac Java8Tester.java $ java Java8Tester w3big 12
JavaScript Memanggil Java
Contoh berikut menunjukkan bagaimana referensi kelas Java dalam 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);
Kami menggunakan script perintah jjs di atas, hasil output adalah sebagai berikut:
$ jjs sample.js 78952000000000002017.94