您的位置:网站首页 > Java软件 > 正文

Java 8的Nashorn脚本引擎教程

类别:Java软件 日期:2018-3-10 17:07:22 人气: 来源:

  在接下来的大约15分钟里,您将学习如何在 JVM 上动态运行 JavaScript。 通过一些简短的代码示例演示最近 Nashorn 的语言特性。学习 Java 与 JavaScript 的相互调用。最后包括如何在日常的 Java 业务中整合动态脚本。

  Nashorn javascript 引擎要么在java程序中以编程的方式使用要么在命令行工具jjs使用,jjs在目录$JAVA_HOME/bin中。如果你准备建立一个jjs的符号链接,如下:

  本教程关注的是在java代码中使用 nashorn ,所以我们现在跳过jjs。用java代码来一个简单的 HelloWorld示例,如下:

  既可以向那样把JavaScript代码作为一个字符串来直接执行,也可放入一个js脚本文件中,如:

  Nashorn 支持java代码直接调用定义在脚本文件中JavaScript函数。你可以把java对象作为函数的参数且在调用函数的java方法中接收返回的数据。

  上述代码的执行将在控制台打印三行信息。调用 print 函数将输出内容通过管道送到 System.out 控制台,因此我们首先看到的是 JavaScript打印的信息。

  你可以传递任意 Java 对象而不会在 JavaScript 这边丢失类型信息。因为脚本本身是在 JVM 虚拟机中执行的,我们可以完全利用 nashorn 引擎的 Java API 和外部库的强大功能。

  JavaScript 可通过 Java.type API 来引用 Java 类。这跟在 Java 类中引入其他类是类似的。当定义了 Java 类型后我们可直接调用其静态方法 fun1() 并打印结果到 sout。因为方法是静态的,所以我们无需创建类实例。

  当调用java 方法时,Nashorn怎样处理原生JavaScript类型与java类型转换?让我们用一个简单的例子来发现。

  原始的javascript 类型被转换为适当的java 包装器类。而不是本地javascript对象内部适配器类。请记住,这些类来自于jdk.nashorn.internal,所以你不应该在客户端使用这些类:

  Nashorn 定义一系列的语言和扩展了 ECMAScript 标准的API。让我们直接进入最新的功能:

  int[]数组的行为像一个真正的java int 数组。但当我们试图添加非整数的值的数组时,Nashorn 会执行隐式类型转换。字符串会自动转换为int,这相当方便。

  我们可以使用java的集合来代替数组。首先定义使用Java.type定义一个java类型,而后根据需要创建一个实例。

  为了遍历集合和数组中的元素,Nashorn 引入了 for each 语句。这就像是 Java 的 for 循环一样。

  Java 的类型可以简单的通过Java.extend进行扩展,在下个例子你将在脚本中创建一个多线程示例:

  在使用重载的参数来调用方法时可以传递可选参数来确定具体调用了哪个方法,如 println(double)。

  我们不需要常规的用 getter 或者 setter 来访问类属性,可直接用属性名简单访问 Java Bean 中的属性。例如:

  有时,这在一次性导入多个java 包时非常有用。我们可以使用JavaImporter并结合with,在with块范围内引用:

  在JavaScript中执行其它脚本是十分容易的。我们可以load函数载入本地或远程的脚本。

  扩展脚本的执行是在同一个 JavaScript 上下文中,因此我们可以直接访问 underscore 变量。记住脚本的加载可能会因为变量名的重叠导致代码出问题。

  我希望这篇文章对你有用,可以让你轻松理解 Nashorn JavaScript 引擎。更多关于 Nashorn 的信息请阅读这里,这里和这里. 如果你是要用 Nashorn 编写 Shell 脚本的话可以参考这里.

  本文中的示例代码可以通过GitHub获取,你可以 fork 这个仓库并通过Twitter来给我反馈。

  元宵节过后下一个节日就是三八国际妇女节了,但是近些年妇女节已经逐渐变为女王节了,可能妇...[详细]

  每日头条、业界资讯、热点资讯、爆料,全天微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb微博期待您的关注。

  

关键词:javaweb教程
0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved