当前位置:网站首页 > 技术博客 > 正文

jdk js引擎



本文我们来介绍一下Java 8的Nashorn JavaScript引擎。Nashorn是于Java 8中用于取代Rhino(Java 6,Java 7)的JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。与先前的Rhino引擎相比,它有二到十倍的性能提升。本文中将使用各种各样的例子来说明Nashorn的强大功能。

jjs是个基于Nashorn引擎的命令行工具。你可以通过该工具快速地在Java上运行JavaScript代码,就像是一个REPL。

运行该程序将输出。

Nashorn支持从Java代码中直接调用定义在脚本中的JavaScript函数。你可以将Java对象作为函数参数传递,并且使用函数返回值调用Java方法。

为了调用函数,你首先需要将脚本引擎转换为接口。已经实现了接口,并且定义了方法来调用指定名称的JavaScript函数。

Java对象在传入时不会在JavaScript上损失任何类型信息。由于脚本在JVM上运行,我们可以在Nashron上使用Java API或外部库的全部类或方法。

为了理解在使用JavaScript原生类型调用Java方法时,Nashorn是如何处理类型转换的。我们将通过简单的例子来展示:

Nashorn虽然是面向ECMAScript 5.1实现的但它提供了一些扩展,使JavaScript能更好的运用。

数组就像真实的Java整数数组那样。但在试图向数组添加非整数时,Nashron执行了一些隐式的转换。字符串会自动转换为整数,这十分便利。

一般认为该函数是对的一个更好选择,因为它应该是在所有代码中设置对象原型的首选方法。

当使用重载参数调用方法时,传递可选参数类型会指定所调用的具体方法。

在JavaScript中访问被覆盖的成员通常比较困难,因为Java的super关键字在ECMAScript中并不存在。幸运的是,Nashron有一套补救措施。

首先我们需要在Java代码中定义超类:

我们通过Java.super()扩展调用了被覆盖的SuperRunner.run()方法。

这里我们定义了一个名为的对象,其中有一个名为的函数。使用这个范例我们可以达成基本的模块化。

在向Java传递原生JavaScript对象时,你可以使用类,它实际上是底层JavaScript对象的Java表示。实现了接口,其位于中。这个包中的类可以用于Java代码。

接口限制通过Nashorn运行的脚本对特定Java类的访问,为JavaScript代码对Java类的访问提供了细粒度的控制。示例代码如下:

最终这会抛出异常。

如果你对编写命令行(shell)脚本感兴趣,来试一试Nake吧。Nake是一个Java 8 Nashron的简化构建工具。你只需要在项目特定的中定义任务,之后通过在命令行键入来执行这些任务。任务编写为JavaScript,并且在Nashron的脚本模式下运行,所以你可以使用你的终端、JDK8 API和任意Java库的全部功能。

对Java开发者来说,编写命令行脚本是前所未有的简单…

本文部分内容来自:

https://wizardforcel.gitbooks.io/modern-java/content/ch3.html

https://docs.oracle.com/javase/10/nashorn/nashorn-java-api.htm

https://www.baeldung.com/java-nashorn

版权声明


相关文章:

  • 深入理解计算机系统怎么2024-11-13 21:30:08
  • ip命令详解2024-11-13 21:30:08
  • stat 命令2024-11-13 21:30:08
  • 有没有图片对比相似的软件2024-11-13 21:30:08
  • 无锁设计2024-11-13 21:30:08
  • 移位指令的用途2024-11-13 21:30:08
  • python 离线安装第三方包2024-11-13 21:30:08
  • c++ opencv rect2024-11-13 21:30:08
  • bind服务使用什么协议2024-11-13 21:30:08
  • okhttp3(OKHttp3使用详解)2024-11-13 21:30:08