本章小宋讲一下JavaScript的引擎Nashorn

目录

  • Nashorn
    • jjs
    • jjs 交互式编程
    • jjs传递参数
    • Java 中调用 JavaScript
    • JavaScript 中调用 Java

Nashorn

Nashorn 一个 javascript 引擎。

从JDK1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR292的新语言特性,其中包含在JDK 7中引入的 invokedynamic,将JavaScript编译成Java字节码。

与先前的Rhino实现相比,这带来了2到10倍的性能提升。

jjs

jjs是个基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。

例如,我们创建一个具有如下内容的sample.js文件:

print('Hello World!');

打开控制台,输入以下命令:

$ jjs sample.js

以上程序输出结果为:

HelloWorld!

jjs 交互式编程

打开控制台,输入以下命令:

$ jjs
jjs>print("Hello, World!")
Hello,World!
jjs> quit()
>>

jjs传递参数

打开控制台,输入以下命令:

$ jjs -- a b c
jjs>print('字母: '+arguments.join(", "))
字母: a, b, c
jjs>

Java 中调用 JavaScript

使用ScriptEngineManager, JavaScript 代码可以在 Java 中执行,实例如下:

public class Java8Tester {public static void main(String args[]) {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");String name = "Runoob";Integer result = null;try {nashorn.eval("print('" + name + "')");result = (Integer) nashorn.eval("10 + 2");} catch (ScriptException e) {System.out.println("执行脚本错误: " + e.getMessage());}System.out.println(result.toString());}
}

输出:
Runoob
12

JavaScript 中调用 Java

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 命令执行以上脚本,输出结果如下:

$ jjs sample.js
78952000000000002017.94

讲到这里本章对Java8系列之Nashorn使用的讲解也就结束了,如果想了解更多知识可以在对应的专栏中看系列文章,谢谢大家的观看,希望能给各位同学带来帮助。如果觉得博主写的还可以的,可以点赞收藏。

幽情阁--Java8系列之Nashorn JavaScript(六)相关推荐

  1. Java8新特性总结 -8.Nashorn , JavaScript引擎

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  2. #Apache Spark系列技术直播# 第六讲【 What's New in Apache Spark 2.4? 】

    Apache Spark系列技术直播第六讲 [ What's New in Apache Spark 2.4? ] Abstract(简介): This talk will provide an ov ...

  3. Java8系列之重新认识HashMap

    转载自 Java8系列之重新认识HashMap 简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap.Hashtable.Lin ...

  4. java8 lambda maplist排序_「java8系列」流式编程Stream

    前言 「Java8系列」神秘的Lambda 「Java8系列」神奇的函数式接口 继上两篇之后,本文已经java8系列的第三篇了.本篇文章比较长,但我希望大家都能认真读完.读不完可以先收藏,在找时间读. ...

  5. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  6. Mybatis系列全解(六):Mybatis最硬核的API你知道几个?

    2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时,不放弃播种和耕耘的信心, ...

  7. 敏捷开发一千零一问系列之二十六 如何进行优先级排序

    这是敏捷开发一千零一问系列的第二十六篇.(在这里提问,之一,之二,之三,问题总目录) 问题 如何进行优先级排序?具体故事的优先级,和版本规划的优先级之间有何关系? 分析 敏捷开发里边有很多地方需要多次 ...

  8. JavaScript(六)

    JavaScript(六) 一.正则表达式: 1.每个字符集只能匹配一个字符 2.备选字符集中至少有一个匹配上 ex:[a-zA-Z0-9]所有的应为字母和数字 [\u4e00-\u9fa5]一个汉字 ...

  9. Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript

    Java 8 Nashorn JavaScript Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java ...

最新文章

  1. 10.15 iptables filter表案例
  2. linux c getrlimit sysconf 系统限定 实例
  3. 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?
  4. Kafka解惑之Old Producer(3)——Async Analysis
  5. 电脑基础c语言,C语言经验: 如何从零基础学习C语言?
  6. Spring Boot 乐观锁加锁失败 - 集成AOP
  7. centos6.5卸载和安装mysql_Linux CentOS 6.5 卸载、tar安装MySQL的教程
  8. python xpath定位元素方法_python--通过xpath相对节点位置查找元素(续)
  9. Linux shell中2>1的含义
  10. $.getJSON无法对外部变量进行赋值的问题
  11. 对于初步搭建好的SSH框架进行简化(注解的使用)
  12. 【VRP】基于matlab蚁群算法求解多中心的车辆路径规划问题【含Matlab源码 111期】
  13. 翻译: swift5 iOS中的自动布局教程:Auto Layout入门
  14. 分库分表知识详解与分库分表中间件介绍
  15. 形容人的内核是什么意思_cpu核数是什么意思
  16. java将数据库数据转换成word文档并且生成pdf文件最后转换成对应的图片
  17. 未来十年,流程管理发展的趋势和挑战
  18. 批量取消bilibili关注
  19. 从人工智能角度考虑生命的本质和意义
  20. linux命令scp和sftp

热门文章

  1. wireshark实战之捣乱的ISAKMP协议
  2. MP3怎么转换成苹果音频格式?如何将mp3转成m4r格式
  3. php利用数组循环输出,php数组遍历,php循环输出数组
  4. sql server高级查询及更新操作一
  5. 在IDEA中安装webpack
  6. 李宏毅机器学习(23)
  7. python waitkey(0)_opencv学习之等待按键事件-waitKey函数
  8. Java如何获得IP和真实地址
  9. EDM邮件模板制作规范小结
  10. Tomcat面试题+http面试题+Nginx面试题+常见面试题