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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF关于NOIP竞赛程序提交的管理规则

在NOIP复赛中,NOI各省组织单位必须严格遵循CCF《关于NOIP数据提交格式的说明》的规范在竞赛结束后规定时间内向CCF提交本赛区所有参赛选手的程序。 为竞赛的公平以及赛后按时完成竞赛程序的评测,制定本规则。 提高组:每次赛后3小时内提交&…

计算机三级信息安全技术考什么2019,2019计算机三级信息安全技术精品练习8

2019计算机三级信息安全技术精品练习82019-06-19 16:37:49来源:计算机等级考试网分享导读:还不知道全国计算机等级考试时间吗?2019年考试共举行4次,下一次考试时间为9月份,距离考试的时间越来越短了,已经报…

微软Visual Studio2005开发工具路线图详解

微软Visual Studio2005开发工具路线图详解 随着企业需要的不断演变,Microsoft 依旧致力于提供创新的开发人员工具来满足这些不断变化的需求,从而确保客户的成功。为帮助组织规划未来的软件开发工作,Microsoft 提供了一个开发人员工具计划版本…

解决微信小程序的wx-charts插件tab切换时的显示会出现位置移动问题-tab切换时,图表显示错乱-实现滑动tab

解决Echarts在微信小程序tab切换时的显示会出现位置移动问题 tab切换时&#xff0c;图表显示错乱 <canvas class"kcanvas" canvas-id"ringCanvas" hidden"{{currentTab 1}}"></canvas> <view hidden"{{currentTab ! 1}}…

mysql字段唯一确定_验证表里某不确定的字段的值是否唯一的方法?

你这个问题是否可以理解为“验证表里的某一不确定的字段的值&#xff0c;没有重复”&#xff1f;如果是的话&#xff0c;那么你就可以先查出表的总记录数&#xff0c;然后在查出该字段去重之后的总记录数&#xff0c;对比两次结果&#xff0c;如果数量相同则没有重复&#xff1…

说下Java堆空间结构,及常用的jvm内存分析命令和工具

Java堆空间结构图&#xff1a;http://www.cnblogs.com/SaraMoring/p/5713732.html JVM内存状况查看方法和分析工具&#xff1a; http://blog.csdn.net/neosmith/article/details/47753733 转载于:https://www.cnblogs.com/zhuyeshen/p/11005208.html

Java EE:基础知识

想要了解一些基本原则&#xff0c;即与Java EE相关的技术术语。 对于许多人来说&#xff0c;Java EE / J2EE仍然最多意味着Servlet&#xff0c;JSP或Struts。 没有冒犯或双关语&#xff01; 无论如何&#xff0c;这不是Java EE的“圣经”。 我没有能力写这样的东西&#xff01…

自定义鼠标样式

效果图展示&#xff1a; 代码 &#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…

空军军医大学计算机复试线,空军军医大学2019年考研复试分数线

2019考研国家线公布之后&#xff0c;各招生院校会于3月中下旬陆续公布分数线&#xff0c;大家需要密切关注。空军军医大学2019年考研复试分数线已经公布&#xff0c;大家赶紧看一下及时准备复试和调剂吧!广大考生&#xff1a;我校2019年硕士研究生第一志愿复试工作拟于近期启动…

微信小程序开发POST请求

微信小程序开发POST请求 wx.request( { url: "http://op.juhe.cn/onebox/weather/query", header: { "Content-Type": "application/x-www-form-urlencoded" }, method: "POST", //data: { cityname: "上海", key: &…

C#入门代码

一、从控制台读取东西代码片断&#xff1a;using System;class TestReadConsole{public static void Main(){Console.Write(Enter your name:);string strName Console.ReadLine();Console.WriteLine( Hi strName);}}二、读文件代码片断&#xff1a;using System; using Syst…

amoeba mysql proxy_mysql proxy amoeba安装配置

MySQL想要做读写分离&#xff0c;目前可以有三种解决方式&#xff1a;1 程序修改mysql操作类优点&#xff1a;直接和数据库通信&#xff0c;简单快捷的读写分离和随机的方式实现的负载均衡&#xff0c;权限独立分配缺点&#xff1a;自己维护更新&#xff0c;增减服务器在代码处…

Java数组,Wat!

数组可以做一些令人惊讶的事情。 是否是数组&#xff1f; Serializable array new Serializable[9];数组是数组还是标量&#xff1f; 好吧&#xff0c;它是指向数组的标量。 就像 Object o new Object[9];您可以将数组分配给对象&#xff0c;因为它也是对象。 但是&#xf…

6.11python 作业

1.课堂例子: 01初识python #!/usr/bin/env python # -*- coding: utf-8 -*-# print(hello world!)print(hello world!) name lyj print(name)# id,type,value x 10 y 10 python小计数池(python优化机制):在变量值产生后指定的范围内&#xff0c;在内存中事先开辟一块内存空间…

linux下常用命令

创建软连接&#xff1a;ln -s b a //为b创建一个快捷方式a&#xff0c;只是一个镜像&#xff0c;不占用空间。 ln -sf b a //差不多 &#xff0c;-f强制执行 ln b a //创建硬链接&#xff0c;会占用相同的大小空间&#xff08;不允许给目录创建硬链接&#xff09; svn…

vue.extend与vue.component的区别和联系

一味的闷头开发&#xff0c;却对基础概念缺乏理解&#xff0c;是个大坑... 查阅官网后现对自己的理解记录一下&#xff0c;用于日后复习巩固 Vue.extend({}) 简述&#xff1a;使用vue.extend返回一个子类构造函数&#xff0c;也就是预设部分选项的vue实例构造器。 后可使用vu…

2012服务器系统关闭网络共享,提供网络服务的前提,Windows Server 2012如何更改高级共享设置...

今天介绍系统提供网络服务的前提&#xff0c;Windows Server 2012 R2操作系统如何更改高级共享设置。小伙伴们可能都听说&#xff0c;网络配置是提供各种网络服务的前提。Windows Server 2012 R2操作系统安装完成以后&#xff0c;默认为自动获取IP地址&#xff0c;自动从网络中…

[学习笔记]几个英语短句(1)

Mind (you)!<口语>听着&#xff01;Mind , I dont say that it is certain.mind your back<口语>让开&#xff0c;让我通过。Mind your own business.你别管闲事。This is not your business.within an inch of 差点儿&#xff0c;险些&#xff01;The athlete was…

qt往mysql中添加数据_qt往数据库添加数据

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别

很长一段时间以来&#xff0c;WeakReference和SoftReference都已添加到Java API中&#xff0c;但是并不是每个Java程序员都熟悉它。 这意味着在Java中使用WeakReference和SoftReference的位置和方法之间存在差距。 参考类对于垃圾收集的工作方式尤其重要。 众所周知&#xff0c…