java 8 js_Java 8 Nashorn JavaScript

对于 Java 中的 JavaScript 引擎, Java 8 引入了 Nashorn 来代替原先的 Rhino。

Nashorn 使用 Java 7 中引入的调用动态特性,且直接编译内存中的代码并将字节码传递给 JVM。这两项改进,直接给 Nashorn 带了至少 2 到 10 倍的性能提升。

jjs

在 Nashorn JavaScript 引擎中。JAVA 8 引入了一个新的命令行工具 jjs,用于在控制台执行 javascript 代码。

例如我们可以在当前目录下 ( 任意位置 ) 创建一个 JavaScript 文件 hello.js ,然后输入以下内容

print('你好,简单教程,简单编程!');

保存文件后,使用下面的 jjs 命令运行它

jjs hello.js

运行结果如下

[yufei@www.twle.cn helloworld]$ jjs hello.js

你好,简单教程,简单编程!

jjs 交互式解释器

我们也可以直接在命令行中输出 jjs 进入 Java 8 提供的 jjs 交互式解释器。

[yufei@www.twle.cn helloworld]$ jjs

jjs>

然后输入一些 JavaScript 语句,就会立即显示结果

jjs> print('你好,简单教程,简单编程!');

你好,简单教程,简单编程!

jjs> 5 + 8

13

jjs> 8 / 5

1.6

jjs>

给 jjs 交互式解释器传递参数

在启动 jjs 交互式解释器时,我们还可以使用两个中划线 ( -- ) 来传递一些参数。

参数之间使用空格分隔 ( 注意,多个空额会视为单个空格 )。

例如

[yufei@www.twle.cn helloworld]$ jjs -- 你好 简单教程 简单编程

jjs> print('你输入的是: ' +arguments.join(", "))

你输入的是: 你好, 简单教程, 简单编程

jjs>

在 Java 中调用 JavaScript

通过 ScriptEngineManager 类,Java 可以解析和调用 JavaScript 代码。

ScriptEngineManager 类在 javax.script 包中。

Java 中调用 javascript 代码的步骤一般如下

创建 JavaScript 引擎的管理器,也就是创建一个 ScriptEngineManager 类的实例。

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();

通过 JavaScript 引擎的管理器获取一个 JavaScript 引擎,比如 Java 8 中引入的 Nashorn。

ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");

调用获取到的引擎的 eval() 方法执行一些代码。

result = (Integer) nashorn.eval("10 + 2");

需要注意的是,执行 JavaScript 代码可能会抛出 ScriptException 异常。因此要放在一个 try catch 语句中。

上面这三个流程,会涉及到三个类 ScriptEngineManager、ScriptEngine 和 ScriptException。它们都在 javax.script 包中。

import javax.script.ScriptEngineManager;

import javax.script.ScriptEngine;

import javax.script.ScriptException;

我们写一个范例演示下这个流程

Java8Tester.java

import javax.script.ScriptEngineManager;

import javax.script.ScriptEngine;

import javax.script.ScriptException;

public class Java8Tester {

public static void main(String args[]) {

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();

ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");

String name = "简单教程";

Integer result = null;

try {

nashorn.eval("print('" + name + "')");

result = (Integer) nashorn.eval("8 + 5 * 3");

} catch(ScriptException e) {

System.out.println("脚本执行失败: "+ e.getMessage());

}

System.out.println(result.toString());

}

}

运行结果如下

[yufei@www.twle.cn helloworld]$ javac Java8Tester.java && java Java8Tester

简单教程

23

在 JavaScript 中调用 Java 代码

如果在 JavaScript 中调用 Java 代码,我们就不做过多介绍了,因为介绍起来是一个庞大的工程,简直就是另外一门语言的赶脚。

直接看一个示例。

把创建一个 hello.js 文件,然后输入以下内容

hello.js

var BigDecimal = Java.type('java.math.BigDecimal');

function calculate(amount, percentage) {

var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide(

new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);

return result.toPlainString();

}

var result = calculate(568000000000000000023,13.9);

print(result);

然后我们使用 jjs 命令来运行它

[yufei@www.twle.cn helloworld]$ jjs hello.js

78952000000000002017.94

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值