Java语言动态性

Java语言是静态语言,编译的时候会进行类型的检查,变量的类型必须进行声明,同时方法的参数与返回值必须在程序运行之前就是已知的,这种特性使编译器可以进行错误的检查,这种做法的弊端是存在大量的不必要的类型声明,代码不够简洁.与静态语言对应的是动态语言例如JavaScript,动态语言类型检查是在运行的时候进行的,这样代码相对比较简洁,现在介绍一下在Java虚拟机上运行脚本语言例如JavaScript的方式:

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
if(scriptEngine ==null){
    throw new RuntimeException("没有名称为JavaScript的脚本引擎");
}
scriptEngine.eval("println('hello  javascript ')");
系统输出:hello javascript

其中

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
if(scriptEngine ==null){
    throw new RuntimeException("没有名称为JavaScript的脚本引擎");
}
scriptEngine.eval("println('hello  javascript ')");
scriptEngine.put("name","javascript");
scriptEngine.eval("var message = 'hello:'+name");
scriptEngine.eval("println(message)");
System.out.println(scriptEngine.get("message"));
注意put方法相当于想JavaScript默认的绑定对象中添加name属性,get方法相当于从JavaScript默认的绑定对象中输出name属性的值

系统输出:hello  javascript 
hello:javascript
hello:javascript

利用绑定

Bindings :

  ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
    ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
    if(scriptEngine ==null){
        throw new RuntimeException("没有名称为JavaScript的脚本引擎");
    }
    Bindings bindings = new SimpleBindings();
    bindings.put("hobby","i like javascript");
    scriptEngine.eval("println('My hobby:'+hobby)",bindings);
}
ScriptContext:

输入输出

将JavaScript内容输出到文件中

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
if(scriptEngine ==null){
    throw new RuntimeException("没有名称为JavaScript的脚本引擎");
}
ScriptContext scriptContext = scriptEngine.getContext();
scriptContext.setWriter( new FileWriter("d://123.txt"));
scriptEngine.eval("println('javascript')");


设置与获取属性:有优先级优先级高的覆盖优先级低的
 ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
 ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
 if(scriptEngine ==null){
     throw new RuntimeException("没有名称为JavaScript的脚本引擎");
 }
 ScriptContext scriptContext = scriptEngine.getContext();
scriptContext.setAttribute("name","bob",ScriptContext.GLOBAL_SCOPE);
 scriptContext.setAttribute("name","alen",ScriptContext.ENGINE_SCOPE);
 System.out.println(scriptContext.getAttribute("name"));
系统输出:alen















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值