Java Heredocs用法实例

本文概述

  • Heredocs
  • 在JavaScript文件中导入Java包
  • 在Java代码中调用JavaScript函数
Nashorn是JavaScript引擎。它用于在JVM(Java虚拟机)上动态执行JavaScript代码。 Java提供了用于执行JavaScript代码的命令行工具jjs。
你可以通过使用jjs命令行工具并嵌入到Java源代码中来执行JavaScript代码。
示例:使用终端执行
【Java Heredocs用法实例】以下是在JVM中执行JavaScript代码的分步过程。
1)创建一个文件hello.js。
2)编写以下代码并将其保存到文件中。
var hello = function(){ print("Hello Nashorn"); }; hello();

3)打开终端
4)编写命令jjs hello.js, 然后按Enter。
执行命令后, 你将看到以下输出。
输出:
Hello Nashorn

示例:在Java代码中执行JavaScript文件
你可以直接从Java文件执行JavaScript文件。在以下代码中, 我们将在FileReader类的帮助下读取文件hello.js。
import javax.script.*; import java.io.*; public class NashornExample { public static void main(String[] args) throws Exception{ // Creating script engine ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn"); // Reading Nashorn file ee.eval(new FileReader("js/hello.js")); } }

输出:
Hello Nashorn

示例:在Java源文件中嵌入JavaScript代码
你可以将JavaScript代码嵌入Java源文件中。 Java编译器不会抱怨, 但是当你拥有大量源代码时, 这不是一个好习惯。在以下示例中, 我们正在评估JavaScript代码。
import javax.script.*; public class NashornExample { public static void main(String[] args) throws Exception{ // Creating script engine ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn"); // Evaluating Nashorn code ee.eval("print('Hello Nashorn'); "); } }

输出:
Hello Nashorn

示例:嵌入JavaScript表达式
你可以在JavaScript代码中嵌入JavaScript表达式和变量。在以下代码中, 我们将变量嵌入到字符串中。要执行此程序, 你需要在命令行中传递标记-scripting。
档案:hello.js
var hello = function(msg){ print("Hello ${msg}"); }; hello("Nashron");

命令:jjs-脚本hello.js
输出:
Hello Nashorn

Heredocs在Nashorn中, heredocs只是多行字符串。你可以在< < 后面加上特殊的终止标记EOF来创建它。你也可以在$ {… }表达式中嵌入JavaScript表达式。
示例:JavaScript文件中的heredocs
文件:hello.js
var message = < < EOF This is a java script file it contains multiple lines of code. let's execute. EOF print(message)

命令:jjs-脚本hello.js
输出:
This is a java script file it contains multiple lines of code. let's execute.

示例:在Java文件中设置JavaScript变量
你可以将值传递给Java文件中的JavaScript变量。在下面的示例中, 我们将变量绑定并传递到JavaScript文件。
档案:hello.js
print("Hello "+name);

文件:NashornExample.java
import javax.script.*; import java.io.*; public class NashornExample { public static void main(String[] args) throws Exception{ // Creating script engine ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn"); //Binding script and Define scope of script Bindings bind = ee.getBindings(ScriptContext.ENGINE_SCOPE); bind.put("name", "Nashorn"); // Reading Nashorn file ee.eval(new FileReader("js/hello.js")); } }

输出:
Hello Nashorn

在JavaScript文件中导入Java包Java提供了一种在JavaScript代码内部导入Java包的功能。在这里, 我们使用两种方法来导入Java包。
示例1:在JavaScript文件中导入Java包
档案:hello.js
print(java.lang.Math.sqrt(4));

输出:
2

示例2:在JavaScript文件中导入Java包
档案:hello.js
var importFile = new JavaImporter(java.util); var a = new importFile.ArrayList(); a.add(12); a.add(20); print(a); print(a.getClass());

输出:
[12, 20] class java.util.ArrayList

示例3:在JavaScript文件中导入Java包
你可以同时导入多个软件包。
档案:hello.js
var importIt = new JavaImporter(java.lang.String, java.util, java.io); with (importIt) { var linkedHS = new LinkedHashSet(); linkedHS.add(new File("abc")); linkedHS.add(new File("hello.js")); linkedHS.add("india".toUpperCase()); } print(linkedHS);

输出:
[abc, hello.js, INDIA]

在Java代码中调用JavaScript函数你可以在Java文件中调用JavaScript函数。在下面的示例中, 我们正在调用JavaScript函数。
示例:在Java代码中调用函数
档案:hello.js
var functionDemo1 = function(){ print("This is JavaScript function"); } var functionDemo2 = function(message){ print("Hello "+message); }

文件:NashornExample.java
import javax.script.*; import java.io.*; public class NashornExample { public static void main(String[] args) throws Exception{ // Creating script engine ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn"); // Reading Nashorn file ee.eval(new FileReader("js/hello.js")); Invocable invocable = (Invocable)ee; // calling a function invocable.invokeFunction("functionDemo1"); // calling a function and passing variable as well. invocable.invokeFunction("functionDemo2", "Nashorn"); } }

输出:
This is JavaScript function Hello Nashorn

    推荐阅读