Java脚本语言是一种轻量级的、可以在客户端和服务器端运行的脚本语言,它可以用来开发功能强大的Web应用程序。JavaScript是一种基于对象的、动态的、面向对象的、弱类型的、多范式的语言,它支持面向对象编程(OOP),函数式编程(FP)和命令式编程(CP)。
JavaScript主要由ECMAScript标准定义。ECMAScript是一个标准化文档,它定义了JavaScript语法和行为。ECMAScript标准由Ecma International制定并不断更新。目前最新版本是ECMAScript 2020。此外,JavaScript还包括一些非标准API(如DOM API和BOM API)来扩展其功能。
// 使用 JavaScript 实现 Hello World 示例 console.log("Hello World!");
ScriptEngine
可以在 String
和java.io.Reader中执行脚本。
通过使用Reader,我们可以在网络或文件中执行脚本。
ScriptEngine接口的eval()方法具有以下重载版本。
Object eval(String script) Object eval(Reader reader) Object eval(String script, Bindings bindings) Object eval(Reader reader, Bindings bindings) Object eval(String script, ScriptContext context) Object eval(Reader reader, ScriptContext context)
以下代码显示如何运行从.js文件存储的Javascript脚本代码。
名为helloscript.js的.js文件的内容如下所示。
// Print a message print("Hello from JavaScript!");
这里是运行脚本的代码。
import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) { String scriptFileName = "c:/test.js"; Path scriptPath = Paths.get(scriptFileName); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); try { Reader scriptReader = Files.newBufferedReader(scriptPath); engine.eval(scriptReader); } catch (IOException | ScriptException e) { e.printStackTrace(); } } }
上面的代码生成以下结果。
ScriptEngine
中的 eval()
方法以对象形式返回脚本中的最后一个值。
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); Object result = null; result = engine.eval("1 + 2;"); System.out.println(result); result = engine.eval("1 + 2; 3 + 4;"); System.out.println(result); result = engine.eval("1 + 2; 3 + 4; var v = 5; v = 6;"); System.out.println(result); result = engine.eval("1 + 2; 3 + 4; var v = 5;"); System.out.println(result); result = engine.eval("print(1 + 2)"); System.out.println(result); } }
上面的代码生成以下结果。
以下代码显示了如何将Result对象传递到使用值填充Result对象的脚本。
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { private int val = -1; public void setValue(int x) { val = x; } public int getValue() { return val; } public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); Main result = new Main(); engine.put("result", result); String script = "3 + 4; result.setValue(1);"; engine.eval(script); int returnedValue = result.getValue(); System.out.println("Returned value is " + returnedValue); } }
上面的代码生成以下结果。
Java脚本教程 -Java脚本标识符标识符是脚本中变量,函数和标签的名称。Nashorn中的标识符是一个Unicode字符序列,具有以下规则:...
Java Lambda-Java通用方法引用我们可以通过指定实际的类型参数来在方法引用中使用通用方法。语法如下:ClassName::TypeNamemetho...
Java Lambda-Java谓词接口谓词接口包含以下默认和静态方法。我们可以使用NOT,AND和OR方法来创建基于其他谓词的谓词。defaultPre...
Java Lambda表达式上下文lambda表达式可以只在以下四种环境中使用。赋值上下文方法调用上下文返回上下文转换上下文赋值上下文lam...
JavaFX教程 -JavaFX转换JavaFX转换相关类位于javafx.scene.transform包中,并且是Transform类的子类。一个变换是关于如何改变坐...