📜  带有示例的Java中的 Nashorn JavaScript 引擎(1)

📅  最后修改于: 2023-12-03 15:09:45.935000             🧑  作者: Mango

带有示例的Java中的 Nashorn JavaScript 引擎

Nashorn 是 Java SE 8 中加入的一款 JavaScript 引擎,在 Java 中可以直接执行 JavaScript 脚本。它的特点是基于 JVM(Java 虚拟机)运行,运行速度和性能很优秀。

Nashorn 构建于 OpenJDK 上,是一个可嵌入的 JavaScript 引擎。它使用标准的 ECMAScript 5.1 语法,并支持一些 ECMAScript 6 的新特性。Nashorn 允许将代码从 Java 代码中分离出来,在运行时动态加载和执行 JavaScript 代码。

下面是一些使用 Nashorn 的示例:

运行 JavaScript

我们可以使用 Nashorn 引擎运行 JavaScript:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornExample {
    public static void main(String[] args) throws ScriptException {
        // 创建脚本引擎管理器
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        // 获取 Nashorn 引擎
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
        // 执行脚本
        nashorn.eval("print('Hello, Nashorn!')");
    }
}

输出:

Hello, Nashorn!
访问 Java 类

在 JavaScript 代码中,我们可以访问现有的 Java 类和方法:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornExample {
    public static void main(String[] args) throws ScriptException {
        // 创建脚本引擎管理器
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        // 获取 Nashorn 引擎
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
        
        // 定义 Java 对象
        nashorn.eval("var BigDecimal = Java.type('java.math.BigDecimal');");
        nashorn.eval("var result = new BigDecimal('3.14').add(new BigDecimal('2.73'));");
        // 打印结果
        System.out.println(nashorn.eval("print(result);"));
    }
}

输出:

5.87
使用表达式

Nashorn 还支持使用表达式来计算结果,例如:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornExample {
    public static void main(String[] args) throws ScriptException {
        // 创建脚本引擎管理器
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        // 获取 Nashorn 引擎
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
        
        // 定义表达式
        String expression = "3 + 2 * 4 - 1";
        // 计算表达式
        Object result = nashorn.eval(expression);
        // 打印结果
        System.out.println("Expression: " + expression);
        System.out.println("Result: " + result);
    }
}

输出:

Expression: 3 + 2 * 4 - 1
Result: 10
使用函数和参数

Nashorn 可以使用函数和参数来执行 JavaScript 脚本:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class NashornExample {
    public static void main(String[] args) throws ScriptException {
        // 创建脚本引擎管理器
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        // 获取 Nashorn 引擎
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
        
        // 定义函数
        nashorn.eval(
            "function greet(name) {" +
            "    print('Hello, ' + name + '!');" +
            "}"
        );
        // 执行函数
        nashorn.eval("greet('Nashorn');");
    }
}

输出:

Hello, Nashorn!

以上是 Nashorn 在 Java 中的基本使用方式,使用 Nashorn 可以使我们在 Java 代码中简单地执行 JavaScript 脚本。