日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么?java中居然可以执行js代码了?真是不知者不怪

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么?java中居然可以执行js代码了?真是不知者不怪 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在書上看的,java中可以直接調用js的函數了,言外之意就是java已經支持外部的腳本語言了(在運行期解釋執行的),查了查,jdk從1.6之后開始支持的,1.6之前不可以。

為什么Java這種編譯語言還需要這些腳本語言呢?大概是因為腳本語言有的一些特性java沒有吧,比如:

靈活,一般像js這種腳本語言,你可以不用聲明變量類型而直接使用,也可以在運行期改變類型。
方便,我們都知道java語言運行之前需要編譯成字節碼文件,然后才能運行。但是腳本語言是一種解釋型語言,它的執行是靠解釋器解釋的,因此在運行期變更代碼也非常方便,不用停止應用。

簡單,只要有其他編程語言開發的經驗,在入門腳本語言很容易上手。

你看,這么些特點java是沒有的,那如果引到java里面,是不是能使得java更加強大,答案是肯定的。

下面我們來寫一個簡單的案例:
先創建一個js文件,名為index.js,放在D:\下面,這個js里面我們就只寫一個js函數,代碼如下:

function reckon(num1,num2){return num1+num2*n; }

你可能會納悶,這個n怎么來的?在這里不報錯嗎?是的,不報錯,這個n是從上下文來的,相當于一個運行時變量,接下來我們看看java中怎么調用該js文件中的函數,下面是代碼:

//java調用腳本語言public static void testJavaScript(){//獲得一個JavaScript引擎ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");//建立上下文變量Bindings bind = engine.createBindings();bind.put("n", 2);//綁定上下文,作用域是當前引擎范圍engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);Scanner sc = new Scanner(System.in);while(sc.hasNextInt()){int num1 = sc.nextInt();int num2 = sc.nextInt();//執行js代碼try {engine.eval(new FileReader("D://index.js"));//是否可調用方法if(engine instanceof Invocable){Invocable in = (Invocable)engine;//執行js函數Double result = (Double)in.invokeFunction("reckon", num1,num2);System.out.println("運算結果為:"+result);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (ScriptException e) {e.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

其運行結果為:

現在我們來簡單的改一改js函數(注意別讓jvm停),將后面的乘號改成減號,修改之后的代碼為:

function reckon(num1,num2){return num1+num2-n; }

然后我們在控制臺中繼續輸入數字,其運行結果為:

通過分析,我們可以看到,jvm并沒有停止,代碼while循環可以證明,只要不輸入非int類型的數字,那么程序就一直執行。參數我們兩次也都輸入的一樣,num1 = 10和num2 = 20,n=2,只是我們將js的函數稍微改變了一下,結果就不同了,這就是腳本語言對編譯最有利的地方,可以隨時發布而不用重新部署。

你,學會了嗎?有疑問可以留言評論哦~

總結

以上是生活随笔為你收集整理的什么?java中居然可以执行js代码了?真是不知者不怪的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。