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. SQL内外连接的区别

    项目当中,需要将SQL server中的部分数据导入mongo中,由于SQL是关系型数据库的原因,需要联合多表进行查询,因此,了解了下SQL中内外连接的相关概念,以作备注: 1.内联接(典型的联接运算 ...

  2. jquery截取、判断字符串的长度,中英文都可

    计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,& ...

  3. Annotation(注解)的概念、作用及常用注解

    Annotation的概念: 能够添加到 Java 源代码的语法元数据.类.方法.变量.参数.包都可以被注解,可用来将信息元数据与程序元素进行关联.Annotation 中文常译为“注解”. 从JDK ...

  4. Sublime Text Emmet插件 : 生成html,css 快捷键

    (输入下面简写,按Tab键可触发效果,或者 ctrl + e) html缩写 输入 !后 按下 ctrl + e : 结果 <!DOCTYPE html><html lang=&qu ...

  5. Yesterday is history, tomorrow is a mystery, but today is a gift.

    Yesterday is history, tomorrow is a mystery, but today is a gift.昨天已成历史,明天太过神秘,而今天是一份礼物.

  6. Android 应用监听自身卸载,弹出用户反馈调查

    监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...

  7. [topcoder]TheGridDivTwo

    http://community.topcoder.com/stat?c=problem_statement&pm=13628&rd=16278 标程是BFS,我用DFS,都可解. 这 ...

  8. MySQL的基础(优化)1

    1,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小 2,在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值 3,对于某 ...

  9. 在VirtualBox ubuntu/linux虚拟机中挂载mount共享文件夹

    referemce: https://www.smarthomebeginner.com/mount-virtualbox-shared-folder-on-ubuntu-linux/ 1) Virt ...

  10. 两台windows内网之间快速复制大量(上百万个)小文件(可用于两台服务器之间)

    用各种FTP工具(各种主动被动)都不好使.经测试,用以下的(协议.工具等),在双千兆网卡下,传输大量1M的文件可以达到每秒60多M: windows文件共享(SMB协议)(若是08 r2 数据中心版, ...