Java - Nashorn JavaScript 引擎

你好,有抱負的程式設計師們!很高興能夠成為你在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文件

  1. 創建一個名為 greet.js 的文件,內容如下:
var name = "Alice";
print("Hello, " + name + "!");
  1. 使用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