Java 8 新特性

Java 8 Nashorn JavaScript

Nashorn 一个 javascript 引擎。

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

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


jjs

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

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

print('Hello World!');

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

$ jjs sample.js

以上程序输出结果为:

Hello World!

jjs 交互式编程

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

1$ jjs 2jjs> print("Hello, World!") 3Hello, World! 4jjs> quit() 5>>

传递参数

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

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

Java 中调用 JavaScript

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

1import javax.script.ScriptEngineManager; 2import javax.script.ScriptEngine; 3import javax.script.ScriptException; 4 5public class Java8Tester { 6 public static void main(String args[]){ 7 8 ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); 9 ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn"); 10 11 String name = "Runoob"; 12 Integer result = null; 13 14 try { 15 nashorn.eval("print('" + name + "')"); 16 result = (Integer) nashorn.eval("10 + 2"); 17 18 }catch(ScriptException e){ 19 System.out.println("执行脚本错误: "+ e.getMessage()); 20 } 21 22 System.out.println(result.toString()); 23 } 24}

执行以上脚本,输出结果为:

1$ javac Java8Tester.java 2$ java Java8Tester 3Runoob 412

JavaScript 中调用 Java

以下实例演示了如何在 JavaScript 中引用 Java 类:

1var BigDecimal = Java.type('java.math.BigDecimal'); 2 3function calculate(amount, percentage) { 4 5 var result = new BigDecimal(amount).multiply( 6 new BigDecimal(percentage)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN); 7 8 return result.toPlainString(); 9} 10 11var result = calculate(568000000000000000023,13.9); 12print(result);

我们使用 jjs 命令执行以上脚本,输出结果如下:

1$ jjs sample.js 278952000000000002017.94
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前