Java8新的工具:Nashorn引擎和类依赖分析器[亲测有效]

Java (59) 2023-04-21 13:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Java8新的工具:Nashorn引擎和类依赖分析器[亲测有效],希望能够帮助你!!!。

Java 8提供了一些新的命令行工具,这部分会讲解一些对开发者最有用的工具。

Java8新的工具:Nashorn引擎和类依赖分析器[亲测有效]_https://bianchenghao6.com/blog_Java_第1张

Nashorn引擎:jjs

从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是一个基于标准Nashorn引擎的命令行工具,可以接受js源码并执行。例如,我们写一个func.js文件,内容如下:

1. function f() { 
2. return 1; 
3. }; 
4. 
5. print( f() + 1 );

可以在命令行中执行这个命令:jjs func.js,控制台输出结果是:2

Java 中调用 JavaScript

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

Java8Tester.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());

}

}

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

$ javac Java8Tester.java

$ java Java8Tester

Runoob

12

---------------------------

JavaScript 中调用 Java

以下实例演示了如何在 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);

类依赖分析器:jdeps

jdeps是一个相当棒的命令行工具,它可以展示包层级和类层级的Java类依赖关系,它以.class文件、目录或者Jar文件为输入,然后会把依赖关系输出到控制台。

我们可以利用jedps分析下Spring Framework库,为了让结果少一点,仅仅分析一个JAR文件:org.springframework.core-3.0.5.RELEASE.jar

jdeps org.springframework.core-3.0.5.RELEASE.jar

这个命令会输出很多结果,我们仅看下其中的一部分:依赖关系按照包分组,如果在classpath上找不到依赖,则显示"not found".

1. org.springframework.core-3.0.5.RELEASE.jar -> C:\Program Files\Java\jdk1.8.0\jre\lib\rt.jar
2. org.springframework.core (org.springframework.core-3.0.5.RELEASE.jar)
3. -> java.io 
4. -> java.lang 
5. -> java.lang.annotation 
6. -> java.lang.ref 
7. -> java.lang.reflect 
8. -> java.util 
9. -> java.util.concurrent 
10. -> org.apache.commons.logging not found
11. -> org.springframework.asm not found
12. -> org.springframework.asm.commons not found
13. org.springframework.core.annotation (org.springframework.core-3.0.5.RELEASE.jar)
14. -> java.lang 
15. -> java.lang.annotation 
16. -> java.lang.reflect 

发表回复