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. phpstorm 10 注册码

    phpstorm 10 注册码 注册时选择License server,填http://idea.lanyus.com,然后点击OK 网上看评论的结果,亲测,有用!!!

  2. Xtrareport 报表的一些属性及控件

    基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控件. ...

  3. RequestMapping的使用

    1.RequestMapping的作用就是 配置url 2.实现功能: 可以在不同的url访问同一个方法.

  4. Redis数据类型之散列类型hash

    在redis中用的最多的就是hash和string类型. 问题 假设有User对象以JSON序列化的形式存储到redis中, User对象有id.username.password.age.name等 ...

  5. css 伪元素选择器

    /*设置第一个首字母的样式*/ p:first-letter{ color: red; font-size: 30px; } /* 在....之前 添加内容 这个属性使用不是很频繁 了解 使用此伪元素 ...

  6. spring-cloud构架微服务(1)-全局配置

    使用spring-cloud是基于熟悉springboot基础上进行的.本篇介绍全局配置,spring-boot版本就以1.4.0来做吧.项目地址: https://git.oschina.net/b ...

  7. VtigerCRM-6.4.0-zh_CN (OpenLogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: vtigercrm6.4.0 commercial crm mysql open source php vtiger 简体中文版 服务优惠价: 按服 ...

  8. http缓存基本介绍

    https://www.helloweba.com/view-blog-414.html

  9. POJ-3669 Meteor Shower---BFS+预处理

    题目链接: https://vjudge.net/problem/POJ-3669 题目大意: 巨大流星雨即将袭来.每个流星会对击中的地方以及周围(上下左右四格)造成破坏.Bessie开始时位于(0, ...

  10. Java nio socket与as3 socket(粘包解码)连接的应用实例

    对Java nio socket与as3 socket连接的简单应用 <ignore_js_op>Java nio socket与as3 socket连接的应用实例.rar (9.61 K ...