English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Nashorn - это двигатель JavaScript.
Двигатель Nashorn JavaScript в Java 15 уже недоступен.
Это уже было отмечено в Java 11:
@deprecated (forRemoval = true)
С JDK 1.8 Nashorn заменил Rhino (JDK 1.6, JDK 1.7) в качестве встроенного двигателя JavaScript для Java. Nashorn полностью поддерживает спецификацию ECMAScript 5.1 и некоторые расширения. Он использует новые языковые возможности на основе JSR 292, включая invokedynamic, введенный в JDK 7, и компилирует JavaScript в Java bytecode.
По сравнению с предыдущим реализацией Rhino, это принесло улучшение производительности в 2 до 10 раз.
jjs - это командная строковая утилита на основе двигателя Nashorn.
Например, мы создаем файл sample.js с следующим содержимым:
print('Привет мир!');
Откройте консоль и введите следующую команду:
$ jjs sample.js
Результат выполнения программы приведен выше:
Hello World!
Откройте консоль и введите следующую команду:
$ jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >>
Откройте консоль и введите следующую команду:
$ jjs -- a b c jjs> print('Буквы: ' +arguments.join(", ")) Буквы: a, b, c jjs>
Использование ScriptEngineManager, код JavaScript может быть выполнен в 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 = "w3codebox"; Integer result = null; try { nashorn.eval("print('" + name + "')"); result = (Integer) nashorn.eval("10 + 2"); } System.out.println("Ошибка выполнения скрипта: "+ e.getMessage()); } System.out.println(result.toString()); } }
Исполнение вышеуказанного скрипта, результат вывода будет:
$ javac Java8Tester.java $ java Java8Tester w3codebox 12
Следующий пример демонстрирует, как можно ссылаться на класс Java в 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);
Мы используем команду jjs для выполнения вышеуказанного скрипта, и результат выводится следующим образом:
$ jjs sample.js 78952000000000002017.94