幽情阁--Java8系列之Nashorn JavaScript(六)
本章小宋讲一下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(六)相关推荐
- Java8新特性总结 -8.Nashorn , JavaScript引擎
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...
- #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 ...
- Java8系列之重新认识HashMap
转载自 Java8系列之重新认识HashMap 简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap.Hashtable.Lin ...
- java8 lambda maplist排序_「java8系列」流式编程Stream
前言 「Java8系列」神秘的Lambda 「Java8系列」神奇的函数式接口 继上两篇之后,本文已经java8系列的第三篇了.本篇文章比较长,但我希望大家都能认真读完.读不完可以先收藏,在找时间读. ...
- Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向
本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...
- Mybatis系列全解(六):Mybatis最硬核的API你知道几个?
2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时,不放弃播种和耕耘的信心, ...
- 敏捷开发一千零一问系列之二十六 如何进行优先级排序
这是敏捷开发一千零一问系列的第二十六篇.(在这里提问,之一,之二,之三,问题总目录) 问题 如何进行优先级排序?具体故事的优先级,和版本规划的优先级之间有何关系? 分析 敏捷开发里边有很多地方需要多次 ...
- JavaScript(六)
JavaScript(六) 一.正则表达式: 1.每个字符集只能匹配一个字符 2.备选字符集中至少有一个匹配上 ex:[a-zA-Z0-9]所有的应为字母和数字 [\u4e00-\u9fa5]一个汉字 ...
- Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript
Java 8 Nashorn JavaScript Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java ...
最新文章
- 10.15 iptables filter表案例
- linux c getrlimit sysconf 系统限定 实例
- 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?
- Kafka解惑之Old Producer(3)——Async Analysis
- 电脑基础c语言,C语言经验: 如何从零基础学习C语言?
- Spring Boot 乐观锁加锁失败 - 集成AOP
- centos6.5卸载和安装mysql_Linux CentOS 6.5 卸载、tar安装MySQL的教程
- python xpath定位元素方法_python--通过xpath相对节点位置查找元素(续)
- Linux shell中2>1的含义
- $.getJSON无法对外部变量进行赋值的问题
- 对于初步搭建好的SSH框架进行简化(注解的使用)
- 【VRP】基于matlab蚁群算法求解多中心的车辆路径规划问题【含Matlab源码 111期】
- 翻译: swift5 iOS中的自动布局教程:Auto Layout入门
- 分库分表知识详解与分库分表中间件介绍
- 形容人的内核是什么意思_cpu核数是什么意思
- java将数据库数据转换成word文档并且生成pdf文件最后转换成对应的图片
- 未来十年,流程管理发展的趋势和挑战
- 批量取消bilibili关注
- 从人工智能角度考虑生命的本质和意义
- linux命令scp和sftp