java 计算数学表达式及执行脚本语言
java SE6中对常用的脚本语言做了支持。
可供使用者在java代码中执行脚本语言,还可以利用get("key"),put("key","value")与其交互,并可以动态调用脚本。
package com.test; import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; public class Demo { public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
// 得到所有的引擎工厂
List<ScriptEngineFactory> list = manager.getEngineFactories();
for (ScriptEngineFactory factory : list) {
System.out.println("支持的脚本语言"+factory.getNames());
// 支持的脚本语言[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]
} // 得到常用的javascript脚本
ScriptEngine engine = manager.getEngineByName("javascript"); try {
// 执行脚本
System.out.println(engine.eval("2+3*2")); //
System.out.println(engine.eval("(true||false)&&true")); //true // 和脚本交互
engine.put("name", "123456");
engine.eval("var out = '';" +
"for(i=0;i<name.length;i++){" +
" out = name.charAt(i)+ out}");
String name = (String)engine.get("out");
System.out.println("name:"+name); // 动态调用脚本语言(脚本引擎得实现Invocable接口)
String str = "abcdef";
if(engine instanceof Invocable){
engine.eval("function str1(name){" +
"var out = '';" +
"for(i=0;i<name.length;i++){" +
" out = name.charAt(i)+ out}" +
" return out;}" +
"function str2(name){" +
" return 123}"); Invocable invocable = (Invocable) engine;
try {
Object obj = invocable.invokeFunction("str1", "123456");
System.out.println("obj:"+obj);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
} // 动态实现接口
engine.eval("function run(){" +
"print('异步调用')}");
Invocable invocable = (Invocable) engine;
// 让其实现Runnable接口
Runnable runnable = invocable.getInterface(Runnable.class);
// 启动线程
Thread t = new Thread(runnable);
t.start(); } catch (ScriptException e) {
e.printStackTrace();
} }
}
java 计算数学表达式及执行脚本语言的更多相关文章
- 一个Java编写的小玩意儿--脚本语言解释器(一)
今天开始想写一个脚本语言编译器.在这个领域,我还是知道的太少了,写的这个过程肯定是艰辛的,因为之前从来没有接触过这类的东西.写在自己的博客里,算是记录自己的学习历程吧.相信将来自己有幸再回过头来看到自 ...
- Java 计算数学表达式(字符串解析求值工具)
Java字符串转换成算术表达式计算并输出结果,通过这个工具可以直接对字符串形式的算术表达式进行运算,并且使用非常简单. 这个工具中包含两个类 Calculator 和 ArithHelper Calc ...
- Java动态调用脚本语言Groovy
Java动态调用脚本语言Groovy 2019-05-15 目录 0. pom.xml添加依赖1. 使用GroovyShell计算表达式2. 使用GroovyScriptEngine脚本引擎加载Gro ...
- Java SE 6 新特性: 对脚本语言的支持
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...
- [改善Java代码]易变业务使用脚本语言编写
建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...
- 提高java编程质量 - (一)易变业务使用脚本语言编写
脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...
- Java学习笔记--脚本语言支持API
Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...
- Java之戳中痛点 - (1)易变业务使用脚本语言编写
脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...
- TC和脚本语言
TC:Turbo C 集成开发环境是由Borland 公司开发的一套C 语言开发工具,它集成了程序编辑.调试.链接等多种功能.在DOS 系统时代,Turbo C 是被最广泛使用的一种PC 机应用程序开 ...
随机推荐
- POJ 3177——Redundant Paths——————【加边形成边双连通图】
Redundant Paths Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- compile with -fPIC
在新公司工作第四天,依然要编译FFmpeg,不同的是难度大了,以前遇到什么参数编译不过的,就去掉,因为不是专业做视频的,但是新公司绕不过了. 编译FFmpeg动态库的时候发现链接某些静态库的时候会报错 ...
- OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(下)
上期我们完成了一个简单的主从页面,但是页面是静态的,不能交互,功能也很简单,只有一个销售订单的列表. 我们今天就一鼓作气把代码全都写完,由于本次的代码量较大,所以只对重点代码部分进行讲解. 具体每个文 ...
- 《Head First 设计模式》之代理模式
代理模式(Proxy):控制对象访问 ——为另一个对象提供一个替身或占位符来访问这个对象. 要点: 代理模式有许多变体,如:缓存代理.同步代理.防火墙代理和写入时复制代理 代理在结构上类似装饰者,但目 ...
- js的垃圾收集机制以及写代码如何处理
程序都自己的内存,一旦内存过多就会清楚以前的缓存.所以,在写代码的时候,不要仅仅只会推变量到栈中,还要会将变量从栈中释放. 那么问题来了,我们应该如何将内存从栈中释放呢? 要释放变量,那就要从java ...
- Osclass-3.6.1 (Openlogic CentOS 7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: osclass3.6.1 cms commercial content management ecommerce open-source 服务优惠价 ...
- MSD_radix_sort
一.这次是在上一次尝试基础上进行的,预期是达到上次性能的9倍. MSD的基本手法就是不断切片.每一步都是把整体数据切割成256片,如上图所示,实际情况切片未必均匀,有的slice内可能一个元素也没有. ...
- des的根据key进行加密和解密方法
DES加密: public static string DESEncode(string content, string key) { DESCryptoServiceProvider des = n ...
- jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001]
jquery插入第一个元素? [问题点数:20分,结帖人zsw19909001] JavaScript code ? 1 2 3 4 5 <div id="contain" ...
- 有权并查集,Poj(1988)
题目链接:http://poj.org/problem?id=1988 题目大意: 有n个从1到n编号的箱子,将每个箱子当做一个栈,对这些箱子进行p次操作,每次操作分别为以下两种之一: 输入 M x ...