摘要:知識點總結(jié)動態(tài)執(zhí)行代碼知識點總結(jié)動態(tài)字節(jié)碼操作之后提供了腳本引擎功能,讓我們可以執(zhí)行某些腳本語言,特別是是一門解釋性語言,動態(tài)性非常好。腳本為開發(fā)者提供了如下功能獲取腳本程序輸入,通過腳本引擎運行腳本并返回運行結(jié)果,這是最核心的接口。
Java知識點總結(jié)(動態(tài)執(zhí)行JS代碼 )
@(Java知識點總結(jié))[Java, 動態(tài)字節(jié)碼操作]
JDK6.0之后提供了腳本引擎功能,讓我們可以執(zhí)行某些腳本語言,特別是javascript(javascript是一門解釋性語言,動態(tài)性非常好)。
讓JAVA的動態(tài)性得到更充分的體現(xiàn),某些時候可以更加靈活的應(yīng)對需求的變化。
使得 Java 應(yīng)用程序可以通過一套固定的 接口與各種腳本引擎 交互,從而達到在 Java 平臺上調(diào)用各種腳本語言的目的 。
Java 腳本 API 是連通 Java 平臺和腳本語言 的 橋梁 。
可以把一些復雜異變的業(yè)務(wù)邏輯交給腳本語言處理,這又大大提高了開發(fā)效率。
獲取腳本程序輸入,通過腳本引擎運行腳本并返回運行結(jié)果,這是最核心的接口。
注意是:接口。 Java可以使用各種不同的實現(xiàn),從而通用的調(diào)用 js 、 groovy 、 python 等腳本。
通過 腳本引擎 的運行上下文在腳本和 Java 平臺間交換數(shù)據(jù)。
通過 Java 應(yīng)用程序調(diào)用腳本函數(shù)。
Rhino 是一種使用 Java 語言編寫的 JavaScript 的開源實現(xiàn),原先由Mozilla開發(fā),現(xiàn)在被集成進入JDK 6.0。
官方首頁
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.net.URL; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Test09 { // 定義變量,存儲到引擎上下文中 private static void test1(ScriptEngine engine) { engine.put("msg", "張三是個好學生"); System.out.println(engine.get("msg")); // 獲取變量的值 try { engine.eval("msg="java是門好用的語言";"); // 修改變量的值 } catch (ScriptException e1) { e1.printStackTrace(); } System.out.println(engine.get("msg")); } // 定義一個對象 private static void test2(ScriptEngine engine) { String str = "var user = {name:"張三",age:18,subjects:["計算機","英語"]};"; str += "println(user.name);"; try { engine.eval(str); } catch (ScriptException e) { e.printStackTrace(); } } // 定義一個函數(shù) private static void test3(ScriptEngine engine) { try { engine.eval("function add(a,b){var sum = a+b;return sum;}"); } catch (ScriptException e) { e.printStackTrace(); } try { // 取得調(diào)用接口 Invocable jsInvoke = (Invocable) engine; // 執(zhí)行腳本中定義的方法 Object result = jsInvoke.invokeFunction("add", new Object[] { 13, 20 }); System.out.println(result); } catch (NoSuchMethodException | ScriptException e) { e.printStackTrace(); } } // 導入其他java包,使用其他包中的java類 private static void test4(ScriptEngine engine) { String jsCode = "importPackage(java.util); var list = Arrays.asList(["浙江大學","清華大學","北京大學"]); "; try { engine.eval(jsCode); } catch (ScriptException e) { e.printStackTrace(); } Listlist2 = (List ) engine.get("list"); for (String temp : list2) { System.out.println(temp); } } //執(zhí)行一個js文件(我們將a.js至于項目的src下即可) private static void test5(ScriptEngine engine) { URL is = Test09.class.getClassLoader().getResource("a.js"); Reader r= null; try { r = new FileReader(is.getPath()); engine.eval(r); } catch (FileNotFoundException | ScriptException e) { e.printStackTrace(); }finally { try { r.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // 獲得腳本引擎 ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("javascript"); test1(engine); test2(engine); // java 8 出現(xiàn)異常:Caused by: :1 ReferenceError: "println" is not defined test3(engine); test4(engine); // java 8出現(xiàn)異常:Caused by: :1 ReferenceError: "importPackage" is not defined test5(engine); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96190.html
摘要:知識點總結(jié)動態(tài)執(zhí)行代碼知識點總結(jié)動態(tài)字節(jié)碼操作之后提供了腳本引擎功能,讓我們可以執(zhí)行某些腳本語言,特別是是一門解釋性語言,動態(tài)性非常好。腳本為開發(fā)者提供了如下功能獲取腳本程序輸入,通過腳本引擎運行腳本并返回運行結(jié)果,這是最核心的接口。 Java知識點總結(jié)(動態(tài)執(zhí)行JS代碼 ) @(Java知識點總結(jié))[Java, 動態(tài)字節(jié)碼操作] JDK6.0之后提供了腳本引擎功能,讓我們可以執(zhí)行某些...
摘要:知識點總結(jié)動態(tài)字節(jié)碼操作介紹知識點總結(jié)動態(tài)字節(jié)碼操作運行時操作字節(jié)碼可以讓我們實現(xiàn)如下功能動態(tài)生成新的類動態(tài)改變某個類的結(jié)構(gòu)添加刪除修改新的屬性方法常見的字節(jié)碼操作類庫,這是的項目的一部分。 Java知識點總結(jié)(動態(tài)字節(jié)碼操作-Javassist介紹) @(Java知識點總結(jié))[Java, 動態(tài)字節(jié)碼操作] 運行時操作字節(jié)碼可以讓我們實現(xiàn)如下功能: 動態(tài)生成新的類 動態(tài)改變某個類的結(jié)...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領(lǐng)導們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
閱讀 3576·2021-09-24 09:48
閱讀 1100·2021-09-10 10:51
閱讀 3278·2019-08-30 13:03
閱讀 3326·2019-08-30 12:51
閱讀 1395·2019-08-30 11:22
閱讀 1071·2019-08-29 18:38
閱讀 2042·2019-08-29 16:41
閱讀 3207·2019-08-29 15:32