昆明java培训
达内昆明广州春城路

18487146383

热门课程

java开发:易变业务使用脚本语言编写

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明达内Java培训的老师知道,Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy、Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的。为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示:

灵活:脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,可以再运行期改变类型。

便捷:脚本语言是一种解释性语言,不需要编译成二进制代码,也不需要像Java一样生成字节码。它的执行时依靠解释器解释的,因此在运行期间变更代码很容易,而且不用停止应用;

简单:只能说部分脚本语言简单,比如Groovy,对于程序员来说,没有多大的门槛。

脚本语言的这些特性是Java缺少的,引入脚本语言可以使Java更强大,于是Java6开始正式支持脚本语言。但是因为脚本语言比较多,Java的开发者也很难确定该支持哪种语言,于是JSCP(Java Community ProCess)很聪明的提出了JSR233规范,只要符合该规范的语言都可以在Java平台上运行(它对JavaScript是默认支持的)。

简单看看下面这个小例子:

function formual(var1, var2){

return var1 + var2 * factor;

}

这就是一个简单的脚本语言函数,可能你会很疑惑:factor(因子)这个变量是从那儿来的?它是从上下文来的,类似于一个运行的环境变量。该js保存在C:/model.js中,下一步需要调用JavaScript公式,代码如下:

1 import java.io.FileNotFoundException;

2 import java.io.FileReader;

3 import java.util.Scanner;

4

5 import javax.script.Bindings;

6 import javax.script.Invocable;

7 import javax.script.ScriptContext;

8 import javax.script.ScriptEngine;

9 import javax.script.ScriptEngineManager;

10 import javax.script.ScriptException;

11

12 public class Client16 {

13    public static void main(String[] args) throws FileNotFoundException,

14            ScriptException, NoSuchMethodException {

15        //获得一个JavaScript执行引擎

16        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");

17        //建立上下文变量

18        Bindings bind = engine.createBindings();

19        bind.put("factor", 1);

20        //绑定上下文,作用于是当前引擎范围

21        engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);

22        Scanner input =new Scanner(System.in);

23        

24        while(input.hasNextInt()){

25            int first = input.nextInt();

26            int second = input.nextInt();

27            System.out.println("输入参数是:"+first+","+second);

28            //执行Js代码

29            engine.eval(new FileReader("C:/model.js"));

30            //是否可调用方法

31            if (engine instanceof Invocable) {

32                Invocable in = (Invocable) engine;

33                //执行Js中的函数

34                Double result = (Double) in.invokeFunction("formula", first, second);

35                System.out.println("运算结果是:" + result.intValue());

36            }

37        }

38

39    }

40 }

上段代码使用Scanner类接受键盘输入的两个数字,然后调用JavaScript脚本的formula函数计算其结果,注意,除非输入了一个非int数字,否则当前JVM会一直运行,这也是模拟生成系统的在线变更情况。运行结果如下:

输入参数是;1,2 运算结果是:3

此时,保持JVM的运行状态,我们修改一下formula函数,代码如下:

function formual(var1, var2){

return var1 + var2 - factor;

}

其中,乘号变成了减号,计算公式发生了重大改变。回到JVM中继续输入,运行结果如下:

输入参数:1,2 运行结果是:2

修改Js代码,JVM没有重启,输入参数也没有任何改变,仅仅改变脚本函数即可产生不同的效果。这就是脚本语言对系统设计最有利的地方:可以随时发布而不用部署;这也是我们javaer最喜爱它的地方----即使进行变更,也能提供不间断的业务服务。

Java6不仅仅提供了代码级的脚本内置,还提供了jrunscript命令工具,它可以再批处理中发挥最大效能,而且不需要通过JVM解释脚本语言,可以直接通过该工具运行脚本。想想看。这是多么大的诱惑力呀!而且这个工具是可以跨操作系统的,脚本移植就更容易了。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:java开发:break万万不可忘
下一篇:java程序:慎用动态编译

昆明达内Java培训带你了解机器学习

中美it行业数据大pk

昆明达内java培训的面试问题你都掌握了吗

机器学习领域需要掌握什么

选择城市和中心
贵州省

广西省

海南省