公眾號(hào):mywangxiao
及時(shí)發(fā)布考試資訊
分享考試技巧、復(fù)習(xí)經(jīng)驗(yàn)
新浪微博 @wangxiaocn關(guān)注微博
聯(lián)系方式 400-18-8000
ScriptEngine 接口
如前所述,代碼將使用 ScriptEngine 實(shí)例執(zhí)行腳本。腳本引擎充當(dāng)腳本代碼和最后執(zhí)行代碼的底層語(yǔ)言解釋器或編譯器之間的中間程序。這樣,我們就不需要了解各個(gè)解釋器使用哪些類來(lái)執(zhí)行腳本。比如說(shuō),JRuby 腳本引擎可以將代碼傳遞給 JRuby 的 org.jruby.Ruby 類的一個(gè)實(shí)例,首先將腳本編譯成中間形式,然后再調(diào)用它計(jì)算腳本并處理返回值。腳本引擎實(shí)現(xiàn)隱藏了一些細(xì)節(jié),包括解釋器如何與 Java 代碼共享類定義、應(yīng)用程序?qū)ο蠛洼斎?輸出流。
圖 1 顯示了應(yīng)用程序、Java 腳本 API 和 ScriptEngine 實(shí)現(xiàn)、腳本語(yǔ)言解釋器之間的總體關(guān)系。我們可以看到,應(yīng)用程序只依賴于腳本 API,它提供了 ScriptEngineManager 類和 ScriptEngine 接口。ScriptEngine 實(shí)現(xiàn)組件處理使用特定腳本語(yǔ)言解釋器的細(xì)節(jié)。
您可能會(huì)問(wèn):如何才能獲取腳本引擎實(shí)現(xiàn)和語(yǔ)言解釋器所需的 JAR 文件呢?最好的方法是在 java.net 上托管的開(kāi)源 Scripting 項(xiàng)目中查找腳本引擎實(shí)現(xiàn)(請(qǐng)參閱 參考資料)。您可以在 java.net 上找到許多語(yǔ)言的腳本引擎實(shí)現(xiàn)和其他網(wǎng)站的鏈接。Scripting 項(xiàng)目還提供了各種鏈接,通過(guò)這些鏈接可以下載受支持的腳本語(yǔ)言的解釋器。
在 清單 1 中,main() 方法將 ScriptEngine 傳遞給各個(gè)方法用于計(jì)算該方法的 JavaScript 代碼。第一個(gè)方法如清單 2 所示。invokeHelloScript() 方法調(diào)用腳本引擎的 eval 方法計(jì)算和執(zhí)行 JavaScript 代碼中的特定字符串。ScriptEngine 接口定義了 6 個(gè)重載的 eval() 方法,用于將接收的腳本當(dāng)作字符串或 java.io.Reader 對(duì)象計(jì)算,java.io.Reader 對(duì)象一般用于從外部源(例如文件)讀取腳本。
編輯推薦
JAVA認(rèn)證考試報(bào)考指南 / 更多JAVA考試資料
(責(zé)任編輯:zyc)