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 计算数学表达式及执行脚本语言的更多相关文章

  1. 一个Java编写的小玩意儿--脚本语言解释器(一)

    今天开始想写一个脚本语言编译器.在这个领域,我还是知道的太少了,写的这个过程肯定是艰辛的,因为之前从来没有接触过这类的东西.写在自己的博客里,算是记录自己的学习历程吧.相信将来自己有幸再回过头来看到自 ...

  2. Java 计算数学表达式(字符串解析求值工具)

    Java字符串转换成算术表达式计算并输出结果,通过这个工具可以直接对字符串形式的算术表达式进行运算,并且使用非常简单. 这个工具中包含两个类 Calculator 和 ArithHelper Calc ...

  3. Java动态调用脚本语言Groovy

    Java动态调用脚本语言Groovy 2019-05-15 目录 0. pom.xml添加依赖1. 使用GroovyShell计算表达式2. 使用GroovyScriptEngine脚本引擎加载Gro ...

  4. Java SE 6 新特性: 对脚本语言的支持

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

  5. [改善Java代码]易变业务使用脚本语言编写

    建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...

  6. 提高java编程质量 - (一)易变业务使用脚本语言编写

    脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...

  7. Java学习笔记--脚本语言支持API

    Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...

  8. Java之戳中痛点 - (1)易变业务使用脚本语言编写

    脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...

  9. TC和脚本语言

    TC:Turbo C 集成开发环境是由Borland 公司开发的一套C 语言开发工具,它集成了程序编辑.调试.链接等多种功能.在DOS 系统时代,Turbo C 是被最广泛使用的一种PC 机应用程序开 ...

随机推荐

  1. jq获取页面距离

    $(window).height() //获取的是当前可视窗口的高度,也就是用户能看到的窗口的高度,是不变的(在窗口大小不变的前提下) $(document).height() //获取的是窗口内文档 ...

  2. js弹出页面

    建立一个HTML文件,输入以下代码就能弹出页面 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  3. 内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc

    很多地方都会使用内存,内存使用过程中操作不当就容易崩溃,无法运行程序,上网Google学习一下,了解整理下他们之间的区别以及使用 ,获益匪浅 0x01 各自的定义和理解 (1)先看GlobalAllo ...

  4. JavaScript精简代码 非一般的写法(转载)

    摘要:最近在编写一个前端模块功能,编写了大量的代码,其中一般图片特效展示是参考别人的代码来写的,发现有些代码似乎看得明白又好像不确定是不是哪个意思,所以在网上问了一下程序员们,原来是JS代码简写. 转 ...

  5. 通过adb获取应用的Activity堆栈信息

    获取所用应用 adb shell dumpsys activity 获取自己的应用 adb shell dumpsys activity | grep 应用的package 获取处于栈顶的activi ...

  6. WebRTC协议

    webrtc协议介绍 MDN webrtc协议 ICE 交互式连接建立Interactive Connectivity Establishment (ICE) 是一个允许你的浏览器和对端浏览器建立连接 ...

  7. MySQL的prompt不生效的问题

    安装完MySQL之后,使用了自定义的配置文件来启动MySQL,发现配置在[mysql]中的prompt并没有生效 [root@MySQL56_L1 ~]# /usr/local/mysql/bin/m ...

  8. SQL:数据库批量插入数据

    测试中有些功能要求有足够的数据进行测试,当输入字段较多时通过页面添加很慢.业务只关联单个数据库表可以通过数据库批量插入数据 批量插入数据示例: declare @i int--声明变量 --变量初始化 ...

  9. 问答 请问使用OK("raw:jpg")能返回多张图片吗

     请问使用OK("raw:jpg")能返回多张图片吗  发布于 28天前  作者 qq_3aeeb0ad  78 次浏览  复制  上一个帖子  下一个帖子  标签: 无 @At( ...

  10. Poj (3239),m皇后问题

    题目链接:http://poj.org/problem?id=3239 构造法很牛逼啊,把这个搜索的题直接变成了打表. 我用dfs写了一下. 构造法公式(序列):一.当n mod 6 != 2 或 n ...