Java - Nashorn JavaScript 引擎
你好,有抱負的程式設計師們!很高興能夠成為你在Java和Nashorn JavaScript引擎這個令人興奮的世界旅途中 的嚮導。作為一個教了超過十年計算機科學的人,我可以向你保證,這將是一段充滿樂趣和啟迪的體驗。那麼,讓我們開始吧!
Nashorn JavaScript 引擎是什麼?
Nashorn(發音為 "nass-horn")是一個輕量級、高性能的JavaScript引擎,隨Java 8引入。它就像是Java和JavaScript之間的一座橋樑,讓你能在Java應用程序中運行JavaScript代碼。很酷對吧?
一點歷史
在早期教學的日子裡,我們必須使用分開的環境來運行Java和JavaScript。這就像試圖用兩個不同的盤子做花生醬和果醬三明治一樣!Nashorn改變了這一切,將這兩種強大的語言結合在一個美味的組合中。
通過命令行工具執行JavaScript
讓我們從一些簡單的東西開始。Nashorn附帶了一個名為 jjs
的命令行工具,允許你直接從終端執行JavaScript。
示例1:你好,Nashorn!
打開你的命令提示符並輸入:
jjs
print("Hello, Nashorn!");
你應該會在屏幕上看到 "Hello, Nashorn!"。恭喜你!你剛剛運行了你的第一段使用Nashorn的JavaScript代碼。
在命令提示符中直接運行JavaScript
你也可以直接從命令行運行JavaScript文件。
示例2:運行JavaScript文件
- 創建一個名為
greet.js
的文件,內容如下:
var name = "Alice";
print("Hello, " + name + "!");
- 使用jjs運行它:
jjs greet.js
你應該會在屏幕上看到 "Hello, Alice!"。
向jjs傳遞參數
Nashorn允許你向JavaScript代碼傳遞參數,就像你對Java做的那樣。
示例3:傳遞參數
創建一個名為 greet_with_args.js
的文件:
var name = $ARG[0];
print("Hello, " + name + "!");
帶參數運行它:
jjs greet_with_args.js -- Bob
你應該會看到 "Hello, Bob!" 被打印出來。
從Java調用JavaScript
現在,讓我們來到真正令人興奮的部分 - 從你的Java代碼中調用JavaScript!
示例4:在Java中評估JavaScript
import javax.script.*;
public class JavaScriptInJava {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval("print('Hello from JavaScript!');");
}
}
當你運行這個Java程序時,它將使用Nashorn引擎打印出 "Hello from JavaScript!"。
從JavaScript調用Java
Nashorn的真正威力在於它能在JavaScript代碼中使用Java類和方法。
示例5:在JavaScript中使用Java類
import javax.script.*;
public class JavaInJavaScript {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval("var ArrayList = Java.type('java.util.ArrayList');" +
"var list = new ArrayList();" +
"list.add('Hello');" +
"list.add('World');" +
"print(list);");
}
}
這段代碼創建了一個Java ArrayList,向其中添加了元素,並打印了它 - 這一切都是從JavaScript中完成的!
高級功能
Nashorn提供了許多高級功能,使其成為Java開發人員的強大工具。
示例6:使用Java 8 Lambda表達式
import javax.script.*;
public class LambdaInNashorn {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval("var list = [1, 2, 3, 4, 5];" +
"list.forEach(function(num) { print(num * 2); });");
}
}
這個例子演示了如何在運行在Nashorn上的JavaScript代碼中使用Java 8 lambda表達式。
方法表
以下是你可以與Nashorn一起使用的 一些重要方法的表格:
方法 | 描述 |
---|---|
ScriptEngineManager.getEngineByName("nashorn") |
獲取Nashorn腳本引擎 |
ScriptEngine.eval(String script) |
評估JavaScript腳本 |
ScriptEngine.put(String key, Object value) |
在腳本引擎中設置變量 |
ScriptEngine.get(String key) |
從腳本引擎中獲取變量 |
Invocable.invokeFunction(String name, Object... args) |
呼叫JavaScript函數 |
結論
就是這樣,各位!我們只是觸及了Nashorn能做什麼的皮毛,但我希望這個介紹能夠激發你的好奇心。請記住,掌握編程的關鍵是實踐,所以不要害怕實驗這些例子並創建自己的。
正如我常對我的學生們說的那樣,編程就像學習騎自行車 - 一開始可能會讓人望而卻步,但隨著實踐,你將能夠迅速前進。誰知道呢?也許有一天你會教導別人關於Nashorn的奇蹟!
繼續編程,不斷學習,最重要的是,玩得開心!下次見,這是你友好鄰居的計算機科學老師簽名。開心編程!
Credits: Image by storyset