一、背景
利用Java语言编写系统的时候,经常会遇到业务需求的变更而导致修改代码,甚至有些时候还需要修改核心代码(如果整个系统架构设计的不合理的话)。为了避免这种问题,在Java编程的时候,我们应该将易变业务使用脚本语言编写。
Java世界一直在遭受着“异族”的入侵,比如PHP、Ruby、Groovy、JavaScript等,这些入侵者都有一个共同的特征:全是同一类语言——脚本语言,它们都是在运行期间解释执行的。为什么Java这种强编译型的语言会需要这些脚本语言呢?这是因为脚本语言的三大特点:灵活、便捷、简单。
二、脚本语言特征的简述
上一节提出了脚本语言的三大特征,这一节就这三大特征作一个简单的描述。
灵活:脚本语言一般都是动态类型,可以不用声明类型而直接使用,也可以的在运行期间改变类型。
便捷:脚本语言是一种解释型语言,不需要经过编译成二进制代码,也不需要像Java一样生成字节码。它的执行是依靠解释器解释的,因此在运行期间变更代码非常容易,而且不用停止应用。
简单:关于这一特征,只能说只有部分脚本语言适用,比如Groovy,Java程序员若转到Groovy程序语言上,只需要两个小时,看完语法说明,看完Demo即可以适用了,没有太多的技术门槛。
三、Java程序中使用脚本语言
脚本语言的这些特征是Java所没有的,引入脚本语言可以是Java更加强大,于是Java 6开始正式支持脚本语言。但是因为脚本语言的种类比较多,Java开发者也很难确定该支持哪种脚本语言,因而JCP(Java Community Process)提出了JSR223规范,只要符合该规范的脚本语言,都可以在Java平台上运行(该规范对JavaScript是默认支持的)。
四、实例分析
编写一个简单的模型计算公式,用来观察一下脚本语言是如何“拥抱变化”的。
1、编写JS脚本文件:demo.js,将此文件保存在本地的某个目录下。例如,我保存的路径是D:\learn\demo.js
function fomulate(var1,var2){ return var1 * var2 + factor; }
2、编写Java程序:ScriptIntoJava.java,此类用来观察运行结果。
import java.io.FileReader; import java.util.Scanner; import javax.script.Bindings; import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptIntoJava { @SuppressWarnings("resource") public static void main(String[] args) throws Exception{ //获取一个JavaScript执行引擎 ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("javascript"); //建立上下文变量 Bindings bind = scriptEngine.createBindings(); bind.put("factor", 1); //绑定上下文,作用域是当前引擎范围 scriptEngine.setBindings(bind, ScriptContext.ENGINE_SCOPE); Scanner input = new Scanner(System.in); while(input.hasNext()){ int first = input.nextInt(); int second = input.nextInt(); System.out.println("输入参数是:" + first + ", " + second); //读取JS脚本文件 scriptEngine.eval(new FileReader("D:/learn/demo.js")); //是否可调用方法 if(scriptEngine instanceof Invocable){ Invocable in = (Invocable)scriptEngine; //执行JS中的函数 Double result = (Double)in.invokeFunction("fomulate", first,second); System.out.println("运算结果:" + result.intValue()); } } } }
3、第一次运行,如下所示:
1
2
输入参数是:1, 2
运算结果:3
其中蓝色的是在控制台输入的参数。
现在,直接修改demo.js中的方法,保持JVM是运行状态,修改后的文件内容如下:
function fomulate(var1,var2){ return var1 * var2 - factor; }
再次,运行一下,如下所示:
1
2
输入参数是:1, 2
运算结果:1
其中蓝色的是在控制台输入的参数。
五、总结
仅仅修改了脚本文件,而Java还是处于JVM运行状态,没有重新启动,就可以得出两种不同的计算结果,这就是脚本语言对系统设计最有利的地方。此处,我用的JDK 1.8,后面的JDK版本是不是还支持这种特性,有待观察。
相关推荐
虽然“Java脚本编程”的表述可能略有不准确之处,但通过了解Java生态系统中的脚本语言,我们可以发现许多强大的工具和技术,这些工具和技术不仅提高了开发效率,还为Java开发者提供了更加灵活的选择。无论是Groovy...
根据给定的信息,“Java脚本编程:语言、框架与模式”这一主题包含了三个核心部分:Java作为一门编程语言的基础知识、流行的Java开发框架以及在Java编程中常用的软件设计模式。 ### Java编程语言 #### 1. Java语言...
eclipse编程语言+JAVAspring+脚本语言+动态扩展**:这是一个关于JAVAspring编程语言的脚本语言的动态扩展的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的脚本语言的概念、原理和作用,以及如何使用...
当需要定期或按需运行Java程序时,利用这两种脚本语言可以极大地提高工作效率。下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序...
Java调用Jython、JRuby和Groovy提供了强大的动态编程能力,使得开发者可以在Java应用中充分利用这些脚本语言的优点。了解如何在Java中正确地调用和管理这些脚本,对于提升开发效率和应用功能都有很大帮助。在实际...
不但可以继续使用脚本语言来编辑程序,还可以使用强大的Java类库来扩展脚本语言的能力。从而使Java程序设计员拥有动态定做应用程序的能力。 4. Java和脚本语言整合的注意事项 当进行与脚本语言的整合时,需要考虑...
Java是一种广泛使用的面向对象的编程语言,而脚本语言则以它们的轻量级、解释执行和快速开发特性而闻名。两者在软件开发领域中各有所长,常常被用来解决不同的问题。本压缩包文件“java与脚本语言.rar”可能包含关于...
在Java编程领域,数据库应用程序开发是一项至关重要的任务。本文将深入探讨如何使用Java进行数据库应用程序编程,特别是关于创建和管理数据库脚本的实践指南。我们将主要关注Java与Oracle数据库的交互,因为压缩包中...
JavaSprint是一种基于Java的脚本语言,常用于快速开发Web应用程序。它的设计目标是简化Web界面的构建,提供一种更高效、更易读的语法,使得开发者可以更专注于业务逻辑,而不是繁琐的低级编程任务。在"javasprint...
Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...
计算机编程语言根据其工作原理和执行机制,主要分为编译性语言、解释性语言和脚本语言。这三种类型的编程语言各有特点,适用于不同的场景。 编译性语言,如C、C++、Objective-C和Fortran,它们的源代码首先需要通过...
《Java脚本语言程序员手册》是一本专门为Java脚本编程者设计的指南,旨在帮助开发者深入理解和高效利用Java脚本语言。手册详细介绍了Java Scripting API(JSR 223)以及相关的脚本框架,如Rhino和Nashorn,这些都是...
而解释器则是对源代码逐行解释并立即执行,不需要编译过程,适合小型程序或脚本语言。 3. Java语言的发展史:文档提到Java语言是在1991年由James Gosling、Bill Joy、Patrick Naughton、Chris Warth、Ed Frank和...
Java脚本语言,虽然在名字中包含了"Java",但其实与Java编程语言并不完全相同。它是用于增强网页交互性和动态性的脚本语言,主要在客户端浏览器中运行,以JavaScript最为常见。JavaScript是由Netscape公司的Brendan ...
在Android开发中,Java语言是主要的编程工具,但有时候我们可能需要在应用程序中执行一些脚本代码,比如JavaScript、Python或Shell等。这通常是为了实现一些特定功能,如自动化处理、数据解析或是利用第三方库的脚本...
本教程将详细讲解如何在Java程序中调用Python脚本。 首先,我们要了解Java如何与Python交互。Java提供了一个名为`Jython`的项目,它是一个Python的实现,可以在Java平台上运行。但在这里,我们将更常见地使用Java的...
Java是一种广泛使用的面向对象的编程语言,而Perl则是一种功能强大的脚本语言,常用于文本处理和系统管理任务。在某些场景下,我们可能需要在Java应用程序中调用Perl脚本来执行特定的功能。JERL(Java-Embedding for...
Java脚本语言,通常指的是Java Scripting API (JSAPI) 或者是JavaScript,它是一种轻量级、解释型的编程语言,广泛应用于Web开发中,为网页提供动态交互功能。虽然名字相似,但它与Java语言在语法和用途上有所不同。...