nashorn

引入了Java 8和名为“ Nashorn”的新JavaScript引擎。 Nashorn基于Da Vinci Machine,该项目旨在为JVM添加动态语言支持。 Nashorn是使混合软件比以前更轻松的一个很好的里程碑。 该引擎的出色功能使您能够在Java(任何其他编译语言)代码和javascript之间进行全双工通信。

使用Nashorn的最简单方法是JDK 8或OpenJDK 8中捆绑的命令行工具,您可以在“ / bin”中找到它。 通过执行jjs,您将面对jjs提示,您可以交互使用Nashorn,也可以将js文件作为参数传递给jjs。 您可以在下面找到使用jjs的基本示例:考虑下面的simple.js文件:

var name="Nashorn";
print(name);

现在,通过调用:jjs simple.js,将在屏幕上显示“ Nashorn”文本。

我认为jjs足以用于介绍,如果您需要更多信息,可以键入jjs -help。

您也可以在Java代码中使用Nashorn脚本引擎。 考虑下面的Program.java文件:

public class Program {public static void main(String... args) throws ScriptException {ScriptEngineManager factory = new ScriptEngineManager();ScriptEngine nashornEngine = factory.getEngineByName("nashorn");nashornEngine.eval("print('hello world');");}
}

使用此简单的代码,您的屏幕上将会显示一个非常漂亮的问候世界。 您也可以将js文件评估为脚本引擎,ScriptEngine接口的eval方法具有Reader抽象类类型的重载。 因此,您可以简单地传递任何作为Reader类实例的对象。 考虑以下代码:

script1.js内容:

var version = 1;function hello(name) {return "hello " + name;
}

Program.java内容:

public class Program {public static void main(String... args) throws ScriptException, NoSuchMethodException {ScriptEngineManager factory = new ScriptEngineManager();ScriptEngine nashornEngine = factory.getEngineByName("nashorn");nashornEngine.eval(new InputStreamReader(Program.class.getResourceAsStream("script1.js")));System.out.println(nashornEngine.get("version"));Invocable invocable = (Invocable) nashornEngine;Object result = invocable.invokeFunction("hello", "soroosh");System.out.println(result);
}
}

ScriptEngine接口有一个get方法,如您在示例中所注意到的,您可以调用它来检索ScriptEngine中定义的任何变量或任何状态。 在上面的示例中,“ version”是在simple.js文件中声明的变量。

每个脚本引擎都有自己的ScriptEngine类实现,并且脚本引擎可以实现一些可选接口以扩展其功能。 如果您检查NashornSriptEngine的源代码,则类签名为:

public final class NashornScriptEngine extends javax.script.AbstractScriptEngine implements javax.script.Compilable, javax.script.Invocable

因此,Nashorn脚本引擎也使您能够使用这两个界面。 在上面的示例中,用于调用在脚本引擎中声明的函数的示例使用了Invocable接口。

注意: ScriptEngine是有状态的,因此,如果您在脚本引擎上调用某些函数或评估某些代码,则对象和变量的状态可能会影响其结果。

结论:

在这篇文章中,我试图以一种非常基本和实用的方式介绍Nashorn。在以后的文章中,我将进一步展示Java + Nashorn的互操作性及其在现实世界中的用法。

翻译自: https://www.javacodegeeks.com/2014/04/introduction-to-nashorn.html

nashorn

nashorn_Nashorn简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. Cookie的生命周期
  2. Truffle合约交互 - WEB端对以太坊数据的读写
  3. 【算法图解|2】JavaScript 如何实现数组扁平化
  4. 天池在线编程 2020国庆八天乐 - 7 进制
  5. (转)淘淘商城系列——使用maven tomcat插件启动web工程
  6. java吧 博客系统_【Java】SpringMVC + Mybatis 实现的个人博客系统
  7. django 1.8 官方文档翻译: 2-1-3 模型元选项
  8. wpf的控件style
  9. ios开发--清理缓存
  10. Perl文件内容对比
  11. 程序之间耦合以及解耦问题探究
  12. 海康VisionMaster定位任务
  13. FxFactory 7.1.1 完整破解版:258个视觉特效插件 FCPX\AE\PR MAC苹果系统
  14. 几楼电路精灵——手机端 原理图 PCB
  15. 太戈编程DEVC++教师答案库
  16. 2.1_7 Oracle 执行计划之1_优化器(Optimizer - CBORBO)
  17. VMWare + qnx系统开启ssh服务,并使用SecureCRT通过ssh远程连接qnx系统
  18. android系统无法识别u盘,OTG无法识别U盘怎么办 OTG无法识别解决方法
  19. 解决Requirement already satisfied:问题
  20. java.lang.ArrayStoreException

热门文章

  1. 厂商如何网红带货?哪里能找到抖音KOL数据?
  2. CentOS 8 安装笔记
  3. PA2.1 运行dumy
  4. c语言找字符串的位置,C语言开发中查找字符串位置的方法
  5. easyExcel导出表格
  6. winform(C#)程序实现在线更新软件
  7. 那些程序员改编的古诗
  8. 米莱狄的机器人是_王者荣耀:米莱狄超级暴力出装教学,这机械真的打不死
  9. SDOI2016R1(不是解题报告)
  10. 微信公众号菜单如何直接跳到微信小程序