我刚整理了一套2018最新的0基础入门和进阶教程,无私分享,加Java学习裙 :678-241-563 即可获取,内附:开发工具和安装包,以及系统学习路线图
在Java8之前,如果要调用js语言是用Rhino调用,Java8只会自动升级到Nashorn,下面有一个例子
//获取脚本引擎的对象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");System.out.println(engine.getClass().getName());//定义变量,存储到引擎的上下文中engine.put("msg","hello world!");String str ="var user = {name:'zs',age:18,schools:['北京大学','清华大学']};";//执行脚本engine.eval(str);engine.eval("msg = 'hi !';");System.out.println(engine.get("msg"));//获取变量engine.eval("var sum = eval('1+222+33*4');");//调用js的eval的方法完成运算System.out.println(engine.get("sum"));//获取变量//定义函数engine.eval("function add(a,b){ return a+b;}");//执行js函数Invocable jsInvoke = (Invocable)engine;Object obj = jsInvoke.invokeFunction("add",1,2);//方法的名字,参数System.out.println(obj);//执行一个js的文件URL resource = Demo1.class.getClassLoader().getResource("a.js");//当前项目的bin目录的a.jsFileReader fr = new FileReader(resource.getPath());engine.eval(fr);//执行js函数Invocable jsInvoke2 = (Invocable)engine;Object obj2 = jsInvoke2.invokeFunction("a",1,2);//方法的名字,参数System.out.println(obj2);
bin目录a.js内容
functiona(a,b){varsum= a + b;returnsum;}
打印输出:
jdk.nashorn.api.scripting.NashornScriptEngine
hi !
网友评论