Учебники

Java 8 — Нашорн JavaScript

В Java 8, Nashorn, представлен значительно улучшенный движок javascript для замены существующего Rhino. Nashorn обеспечивает в 2-10 раз лучшую производительность, так как он напрямую компилирует код в памяти и передает байт-код в JVM. Nashorn использует функцию динамического вызова, представленную в Java 7, для повышения производительности.

JJS

Для движка Nashorn JAVA 8 представляет новый инструмент командной строки, jjs, для выполнения JavaScript-кодов на консоли.

Интерпретация файла JS

Создайте и сохраните файл sample.js в папке c: \> JAVA.

sample.js

print('Hello World!');

Откройте консоль и используйте следующую команду.

C:\JAVA>jjs sample.js

Он выдаст следующий вывод:

Hello World!

JJS в интерактивном режиме

Откройте консоль и используйте следующую команду.

C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>

Передать аргументы

Откройте консоль и используйте следующую команду.

C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>

Вызов JavaScript из Java

Используя ScriptEngineManager, код JavaScript можно вызывать и интерпретировать в Java.

пример

Создайте следующую Java-программу, используя любой редактор по вашему выбору, например, в C: \> JAVA.

Java8Tester.java

Live Demo

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 = "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());
   }
}

Проверьте результат

Скомпилируйте класс с помощью компилятора javac следующим образом:

C:\JAVA>javac Java8Tester.java

Теперь запустите Java8Tester следующим образом —

C:\JAVA>java Java8Tester

Это должно привести к следующему результату —

Mahesh
12

Вызов Java из JavaScript

В следующем примере объясняется, как импортировать и использовать классы Java в сценарии Java.

Создайте и сохраните sample.js в папке C: \> JAVA.

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

Откройте консоль и используйте следующую команду.

C:\JAVA>jjs sample.js

Он должен произвести следующий вывод —