English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массивы

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Списки (List)

Java Очереди (Queue)

Java Карти (Map)

Java Множества (Set)

Java Вход/Выход (I/O)

Java Reader/Writer

Другие темы Java

Java 8 Nashorn JavaScript

Java 8 новые возможности

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

jjs - это командная строковая утилита на основе двигателя Nashorn.

Например, мы создаем файл sample.js с следующим содержимым:

print('Привет мир!');

Откройте консоль и введите следующую команду:

$ jjs sample.js

Результат выполнения программы приведен выше:

Hello World!

jjs интерактивная программирование

Откройте консоль и введите следующую команду:

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

Передача параметров

Откройте консоль и введите следующую команду:

$ jjs -- a b c
jjs> print('Буквы: ' +arguments.join(", "))
Буквы: a, b, c
jjs>

Вызов JavaScript в Java

Использование 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

Следующий пример демонстрирует, как можно ссылаться на класс 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

Java 8 новые возможности