快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰app是真的吗:JDK6的新特性脚本语言支持(Scripting)



概述

-----------------------------

JDK6增添了对脚本说话的支持(JSR 223),道理上是将脚本说话编译成bytecode,这样脚本说话也能享用Java平台的诸多上风,包括可移植性,安然等,别的,因为现在是编译成bytecode后再履行,以是比原本边解释边履行效率要高很多。加入对脚本说话的支持后,对Java说话也供给了以下好处。

1、许多脚本说话都有动态特点,比如,你不必要用一个变量之前先声明它,你可以用一个变量寄放完全不合类型的工具,你不必要做强制类型转换,由于澳门新葡亰app是真的吗转换都是自动的。现在Java说话也可以经由过程对脚本说话的支持间接得到这种机动性。

2、 可以用脚本说话快速开拓产品原型,由于现在可以Edit-Run,而无需Edit-Compile-Run,当然,由于Java有异常好的IDE支持,我 们完全可以在IDE里面编辑源文件,然后点击运行(隐含编译),以此达到快速开拓原型的目的,以是这点好处基础上可以轻忽。

3、经由过程引入脚本说话可以轻松实现Java利用法度榜样的扩展和自定义,我们可以把原本散播在在Java利用法度榜样中的设置设置设备摆设摆设逻辑,数学表达式和营业规则提掏出来,转用JavaScript来处置惩罚。

Sun的JDK6实现包孕了一个基于Mozilla Rhino的 脚本说话引擎,支持JavaScript,这并不是阐明JDK6只支持JavaScript,任何第三方都可以自己实现一个JSR-223兼容的脚本引擎 使得JDK6支持其余脚本说话,比如,你想让JDK6支持Ruby,那你可以自己按照JSR 223的规范实现一个Ruby的脚本引擎类,详细一点,你必要实现javax.script.ScriptEngine(简单起见,可以承袭javax.script.AbstractScri澳门新葡亰app是真的吗ptEngine)和javax.script.Scr澳门新葡亰app是真的吗iptEngineFactory两个接口。当然,在你实现自己的脚本说话引擎之前,先到scripting.dev.java.net project 这里看看是不是有人已经帮你做了事情,这样你就可以直接拿来用就行。

Scripting API

-------------------------------

Scripting API是用于在Java里面编写脚本说话法度榜样的API, 在Javax.script中可以找到Scripting API,我们便是用这个API来编写JavaScript法度榜样,这个包里面有一个ScriptEngineManager类,它是应用Scripting API的进口,ScriptEngineManager可以经由过程jar办事发明(service discovery)机制探求相宜的脚本引擎类(ScriptEngine),应用Scripting API的最简单要领只需下面三步

1、创建一个ScriptEngineManager工具

2、经由过程ScriptEngineManager得到ScriptEngine工具

3、用ScriptEngine的eval措施履行脚本

下面是一个Hello World法度榜样

/** * @author chinajash */

public class HelloScript {

public static void main(Strin [] args) throws Exception {

ScriptEngineManager factory = new ScriptEngineManage();//step 1

ScriptEngine engine = factory.getEngineByName("JavaScript");//Step 2

engine.eval("print('Hello, Scripting')");//Step 3

}

}

运行上面法度榜样,节制台会输出Hello, Scripting上面这个简单的Scripting法度榜样演示了若何在Java里面运行脚本说话,除此之外,我们还可以使用Scripting API实现以下功能1、裸露Java工具为脚本说话的全局变量2、在Java中调用脚本说话的措施3、脚本说话可以实现Java的接口4、脚本说话可以像Java一样应用JDK平台下的类下面的类演示了以上4种功能

package Scripting;

import java.io.File;import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

/** * @author chinajash */

public class ScriptingAPITester {

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("JavaScript");

testScriptVariables(engine);//演示若何裸露Java工具为脚本说话的全局变量

testInvokeScrip澳门新葡亰app是真的吗tMethod(engine);//演示若何在Java中调用脚本说话的措施

testScriptInterface(engine);//演示脚本说话若何实现Java的接口

testUsingJDKClasses(engine);//演示脚本说话若何应用JDK平台下的类

}

public static void testScriptVariables(ScriptEngine engine) throws ScriptException{

File file = new File("test.txt");

engine.put("f", file);

engine.eval("println('Total Space:'+f.getTotalSpace())");

}

public static void testInvokeScriptMethod(ScriptEngine engine) throws Exception{

String script = "function hello(name) { return 'Hello,' + name;}";

engine.eval(script);

Invocable inv = (Invocable) engine;

String res = (String)inv.invokeFunction("hello", "Scripting" );

System.out.println("res:"+res);

}

public static void testScriptInterface(ScriptEngine engine) throws ScriptException{

String script = "var obj = new Object();

obj.run = function() { println('run method called');

}";

engine.eval(script);

Object obj = engine.get("obj");

Invocable inv = (Invocable) engine;

Runnable r = inv.getInterface(obj,Runnable.class);

Thread th = new Thread(r);

th.start();

}

public static void testUsingJDKClasses(ScriptEngine engine) throws Exception{

//Packages是脚本说话里的一个全局变量,专用于造访JDK的package

String js = "function doSwing(t){var f=new Packages.javax.swing.JFrame(t);

f.setSize(400,300);f.setVisible(true);}";

engine.eval(js);

Invocable inv = (Invocable) engine;

inv.invokeFunction("doSwing", "Scripting Swing" );

}

}

Scripting Tool

----澳门新葡亰app是真的吗-------------------------

SUN供给的JDK6中有一个敕令行对象??jrunscript,你可以在/bin下面找到这个对象,jrunscript是一个脚本说话的解释法度榜样,它自力于脚本说话,但默认是用JavaScript,我们可以用jrunscript来测试自己写的脚本说话是否精确,下面是一个在敕令交运行jrunscript的简单例子

jrunscript

js>println("Hello,JrunScript");

Hello,JrunScript

js>9*8

72.0

js>

您可能还会对下面的文章感兴趣: