Java和JavaScript的相互调用

在JAVA中调用JavaScript

用Java8,Nashorn大大提高了JavaScript 引擎引入,以取代现有的Nashorn Java脚本引擎。Nashorn提供2至10倍更好的性能,因为它直接编译代码在存储器,并传递到字节码JVM.Nashorn使用invokedynamics函数,在Java7引入以提高性能。

使用ScriptEngineManager,JavaScript代码用Java编写可以被调用。

示例

Java8Tester.java

  1. import javax.script.ScriptEngineManager;
  2. import javax.script.ScriptEngine;
  3. import javax.script.ScriptException;
  4. public class Java8Tester {
  5. public static void main(String args[]){
  6. ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
  7. ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
  8. String name = "Mahesh";
  9. Integer result = null;
  10. try {
  11. nashorn.eval("print('" + name + "')");
  12. result = (Integer) nashorn.eval("10 + 2");
  13. }catch(ScriptException e){
  14. System.out.println("Error executing script: "+ e.getMessage());
  15. }
  16. System.out.println(result.toString());
  17. }
  18. }
结果如下:
Mahesh
12


在JavaScript中调用Java

下面的例子将展示如何导入和使用Java类的Java脚本。

创建并保存 sample.js 在 c: > JAVA 文件夹.

sample.js

  1. var BigDecimal = Java.type('java.math.BigDecimal'); //js中引入Java类
  2. function calculate(amount, percentage) { //可以直接在js代码块中通过Java类实例,调用Java方法代码
  3. var result = new BigDecimal(amount).multiply(
  4. new BigDecimal(percentage)).divide(
  5. new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
  6. return result.toPlainString();
  7. }
  8. var result = calculate(568000000000000000023,13.9);
  9. print(result);

打开控制台并使用下面的命令。

C:\JAVA>jjs sample.js

结果如下:

78952000000000000003.20

你可能感兴趣的:(Java,Java,8新特性,Javascript)