友情提示
本文主要参考了51CTO上的一篇文章,代码经过自己的模仿和整理,还算凑合。
本文中的代码注释比较多,不再过多解释。
更多用法,还是得看JDK的API或者看原文http://developer.51cto.com/art/201007/208812.htm。
1.可用的脚本引擎
/**
* Java内置只支持JavaScript一种脚本
* 打印Script引擎的一些信息
*/
public static void printBuildInScriptEngine() {
ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factories = manager.getEngineFactories();
for (ScriptEngineFactory factory : factories) {
println("engine name:" + factory.getEngineName());
println("engine version:" + factory.getEngineVersion());
println("language name:" + factory.getLanguageName());
println("language version:" + factory.getLanguageVersion());
println("names:" + factory.getNames());
println("mime:" + factory.getMimeTypes());
println("extension:" + factory.getExtensions());
}
}
2.一个“HelloWorld”程序
/**
* 在Java中使用JavaScript的Hello world示例
*/
public static void printHelloWorld() {
ScriptEngine engine = getJavaScriptEngine();
String helloWorldScript = "print('hello script')";
try {
engine.eval(helloWorldScript);
} catch (ScriptException e) {
e.printStackTrace();
}
println();
}
3.方法调用-第1种方式
/**
* 可以向脚本中传递变量,使得Java代码可以和脚本代码交互
*/
public static void invokeFunction() {
ScriptEngine engine = getJavaScriptEngine();
engine.put("a", 13);
engine.put("b", 24);
try {
String maxFunction = JS_MAX_FUNCTION_AND_INVOKE;
Object maxNum = engine.eval(maxFunction);
println("max:" + maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
4.方法调用-第2种方式
/**
* 方法调用,第2种方式
*/
public static void invokeFunction2() {
ScriptEngine engine = getJavaScriptEngine();
try {
engine.eval(JS_MAX_FUNCTION);
Invocable invoke = (Invocable) engine;
Object maxNum = invoke.invokeFunction(MAX_FUNCTION_NAME, 88, 99);
println(maxNum);
maxNum = invoke.invokeFunction(MAX_FUNCTION_NAME, 99, 111);
println(maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
5.方法调用-第3种方式
/**
* 方法调用第3种方式
*/
public static void invokeFunction3() {
ScriptEngine engine = getJavaScriptEngine();
try {
engine.eval(JS_MAX_FUNCTION);
Invocable invoke = (Invocable) engine;
JSLib jslib = invoke.getInterface(JSLib.class);
int maxNum = jslib.max(2013, 1989);
println(maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
6.在JavaScript中使用Java对象和方法
/**
* 在JavaScript中使用Java对象和方法
*/
public static void useJavaObject() {
ScriptEngine engine = getJavaScriptEngine();
try {
String script = "var list = java.util.ArrayList();list.add('CSDN FanUnion');print(list.get(0));";
engine.eval(script);
} catch (Exception e) {
e.printStackTrace();
}
}
7.编译JS代码,然后执行
/**
* 编译JS代码,然后执行
*/
public static void compileExecute() {
ScriptEngine engine = getJavaScriptEngine();
try {
Compilable compEngine = (Compilable) engine;
CompiledScript script = compEngine.compile(JS_MAX_FUNCTION);
script.eval();
//强制转换,Invocable和Compilable都是脚本引擎可选实现的
//如果这个地方的脚本引擎没有实现这个接口,应该会报错
Invocable invoke = (Invocable) engine;
Object maxNum = invoke
.invokeFunction(MAX_FUNCTION_NAME, 2020, 2050);
println(maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
8.工具方法和接口
/**
* 工具方法:创建JS-引擎
*/
private static ScriptEngine getJavaScriptEngine() {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(JS_ENGINE_NAME);
return engine;
}
public static void println() {
System.out.println();
}
public static void println(Object str) {
System.out.println(str);
}
/**
* 定义了求最大值的一个接口
*/
interface JSLib {
public int max(int a, int b);
}
下载地址:本文已经给出了所有的源代码了。建议自己写一遍,不懂的参考API。
CSDN下载频道有源码,需要1分。(有兴趣的自己花1分,下载吧)
(上传资源,迟迟不出来,晚点再给出下载地址)
http://download.csdn.net/detail/fansunion/6821829
原文链接:http://blog.fansunion.cn/articles/2839(小雷博客-blog.fansunion.cn)
分享到:
相关推荐
* 在Java中使用脚本语言JavaScript。 * * @author LeiWen@FansUnion.cn,http://FansUnion.cn, * http://blog.csdn.net/FansUnion * * QQ:240370818 参考资料:...
5. **并发和多线程**:Java以其强大的并发模型而闻名,OpenJDK的源码揭示了`java.util.concurrent`包下各种并发工具类的实现,如`ExecutorService`、`Future`、`Lock`等。 6. **JMX(Java Management Extensions)*...
3. 类库实现:Java的标准类库如集合框架、I/O流、网络通信等,其底层实现都可以在OpenJDK源码中找到,这对于理解API的工作方式非常有帮助。 二、JVM解析 1. 类加载器:Java的类加载机制是双亲委派模型,OpenJDK...
10. **nashorn**:Nashorn是Java 8引入的JavaScript引擎,它允许在Java应用程序中执行JavaScript代码。 11. **test**:这个目录包含了大量的测试用例,用于验证JDK各个部分的功能正确性。 除了这些目录外,还有...
Java 脚本 API,也称为 Java Scripting API,是Java平台标准版(Java SE)的一部分,它允许Java应用程序在运行时执行脚本语言代码。这个API在Java 6版本中得到了显著增强,为开发者提供了在Java程序中嵌入和执行脚本...
在IT行业中,Java是一种广泛应用的编程语言,而OpenJDK是Java Development Kit(JDK)的一个开源实现。本文将深入探讨如何编译OpenJDK源码,以及涉及到的相关工具和步骤。 首先,我们关注到"CLion-2021.1.tar.gz",...
在OpenJDK源码中,你可以找到JVM的主要组件,如类加载器、执行引擎、内存管理(包括垃圾收集器,如G1、ZGC等)和性能优化策略。例如,HotSpot虚拟机是OpenJDK中广泛使用的JVM实现,它的源码展示了如何优化运行时性能...
这些变化都可以在源码中找到相应的实现和注释。 学习OpenJDK源码对于理解Java运行机制、优化程序性能以及参与Java平台的开发都是非常有益的。通过深入分析`openjdk-7u4-fcs-src-b22-02_may_2012`,开发者不仅可以...
基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-...
8. **接口默认方法**:Java 8允许在接口中定义默认方法,这种方法可以提供默认实现,避免破坏已有的实现。 9. **Type注解**:Java 8增加了类型注解的支持,允许在类型使用处(如方法参数、返回值等)添加注解,增强...
OpenJDK 1.6是Java Development Kit的一个开源实现,它是Java编程语言和Java平台标准版(Java SE)的一部分。OpenJDK项目的目标是提供一个免费、开源的Java实现,鼓励社区参与和透明度,使得开发者可以查看并修改源...
Java JDK 1.7源码包是用于在CentOS 7操作系统上进行OpenJDK 1.8编译的重要资源。这个源码包包含了Java Development Kit的1.7版本,通常被称为JDK 7,它是Oracle公司发布的Java编程语言和Java平台标准版的一个实现。...
安装包:java-7-openjdk-amd64.tar.gz 使用方法 1. 拷贝至服务器/个人电脑 2. 解包 mkdir /opt/jdk/ tar -zxvf java-7-openjdk-amd64.tar.gz -C /opt/jdk/ 3. 配置编译环境 JAVA_HOME=/opt/jdk/java-7-openjdk-amd...
OpenJDK 8是Java开发工具包(Java Development Kit)的一个开源实现,它为开发者提供了构建、测试和运行Java应用程序所需的工具和Java虚拟机(JVM)。Ubuntu是一个流行的Linux操作系统,广泛用于服务器和桌面环境。...
首先,需要在Eclipse的Java构建路径中添加源代码位置,指向OpenJDK的src.zip或源码目录。这样,在遇到不熟悉的方法或类时,可以直接跳转到源码,提高开发效率。 5. **学习价值**: 学习rt.jar源码有助于提升编程...
在Java世界中,源码分析是提升技术能力的重要途径,尤其对于OpenJDK这种基础性软件,其源码更是开发者探索Java运行机制的金钥匙。OpenJDK 7U源码不仅包括了JVM的实现,还涵盖了类库和编译器等多个重要组件,这些组件...
在源码中,你可以找到`java.lang`、`java.util`、`java.nio`等包的实现。 3. **内存模型和并发**:OpenJDK实现了Java内存模型(JMM),这是保证多线程程序正确性的关键。源码中包含了`java.util.concurrent`包的...
java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包
4. **全局Java对象**:在Nashorn中,`java`、`javafx`和`javax`等Java包被暴露为全局对象,可以直接在JavaScript中使用。 5. **脚本API**:Java 8引入了`javax.script`包,提供了ScriptEngine接口,使得在Java应用中...
《深入解析OpenJDK8源码》 OpenJDK8是Java开发的重要基础,它提供了Java虚拟机(JVM)和Java核心库的...通过研究源码,开发者可以深化对Java语言的理解,提高编程技巧,解决实际问题,从而在Java世界中更上一层楼。