科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何在Java平台上使用脚本语言做Java开发(1)

如何在Java平台上使用脚本语言做Java开发(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本篇文章概括了一些脚本语言(如Groovy,Jruby,Jython)和Java语言的区别,论述了一些在Java平台上使用脚本将会面临的挑战。同时,本文介绍了一些方法,使你可以集成一些最初由Ruby或Python写成的脚本到你的Java代码中。

作者:Gregor Roth/梁婷婷 编译 来源:51CTO.com 2007年12月10日

关键字: 使用 脚本语言 平台 java

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)

最近开始流行区分Java平台和Java语言,但很多Java开发者还是不能确定如何在Java应用程序开发中结合脚本。本篇文章,Gregor Roth给出了在Java平台上使用脚本的方法。通过这篇文章,你可以了解怎样在你的Java应用程序中使用脚本,是否你要通过使用Groovy和Jython把不同的Java应用程序模块粘合在一起,或者写一个你自己的基于JRuby的应用程序,适用于Java平台。

作为一个Java开发者,你可能已经注意到了,Java语言已经不是Java平台的唯一所有者。Groovy也是一种适用于Java平台的编程语言,而且还有很多其他语言的解释器和编译器,都可以运行于Java虚拟机(JVM)之上,其中最流行的就是Jython和JRuby。另外,Java SE 6内置对于脚本引擎的支持,JSR 223定义了一个标准接口,与运行于Java平台的动态语言进行交互。

为了能在Java平台上做脚本开发,你需要清楚地理解所要面临的挑战和获得的好处。你需要理解从JRuby和 Jython写成的脚本中调用Java类时会发生什么事情,你同样需要知道要集成一个脚本语言到Java平台会遇到的困难,在你的开发过程中会产生什么样的影响。最后,你应该知道至少一些流行的脚本语言的不同特征,这样你才能知道他们适合放在你的程序的什么地方。

本篇文章概括了一些脚本语言(如Groovy,Jruby,Jython)和Java语言的区别,论述了一些在Java平台上使用脚本将会面临的挑战。同时,本文介绍了一些方法,使你可以集成一些最初由Ruby或Python写成的脚本到你的Java代码中。

静态类型VS动态类型

大部分脚本语言都是动态类型语言,而Java是一种静态类型语言。静态类型语言在声明变量的时候需要定义变量的类型,而且变量的值也只能设置成给定的类型的值。与之相反,动态类型语言不需要程序员给出清楚的类型定义,因为类型信息附属于变量值,而不是变量。通过下面的列表1可以看到,Groovy定义的变量V1可以被赋予任意不同类型的值。

列表1:Groovy动态类型

def v1 = '66'      // sets the variable with a value of type String
println v1.dump()
// prints out:
// <java.lang.String@6c0 value=[6, 6] offset=0 count=2 hash=1728>
v1 = 9            // resets the variable with a value of type Integer
println v1.dump()
// prints out:
// <java.lang.Integer@9 value=9>

动态类型脚本语言的一种典型的实现方法,就是一直保持变量值和它的类型的可变性标签。当在操作中使用任何变量之前,才立即进行类型检查。这种做法的缺点就是在运行时需要额外的处理循环来确定变量值的类型和进行类型检查。但静态类型的提倡者指出,使用动态类型语言总是导致性能不足。

弱类型 VS 强类型

一些流行的脚本语言都是弱类型。弱类型语言允许在不同的类型上进行操作。弱类型语言支持隐式类型转换或多态。例如列表2所示,Groovy允许在一个整型和字符串型上进行加操作。

列表2:Groovy弱类型的例子

def v1 = '66'         // set v1 with a String typed value
def v2 = 5            // set v2 with a Integer typed value
def v3 = v1 + v2
println v3
// prints out:
// 665

与Groovy一样,Python也是一个动态类型语言。但与Groovy相比,Python却是一个强类型语言,所以它不支持上述操作。强类型没有弱类型那么宽松,不允许不同类型之间的混合操作,见列表3。

列表3:Python强类型的例子

v1 = '66'              # set v1 with a String typed value
v2 = 5                 # set v2 with a Integer typed value
v3 = v1 + v2
# prints out:
# TypeError: cannot concatenate 'str' and 'int' objects

静态,强类型的Java语言,在声明时,对于对象类型有最强可能性的约束。例如,如果想用Java实现一个回调模式,需要先写一个回调接口,定义回调函数,声明返回值类型,以及所有参数和定义异常类型。具体的回调实现将通过使用这个接口进行引用和调用,见列表4。

列表4:Java回调模式的实现

// the call back handler definition
interface IDataHandler {
public boolean onData(INonBlockingConnection nbc) throws IOException;
        }
// the server receives data and performs the handler's call back method
class MultithreadedServer {
private volatile boolean isRunning = true;
private IDataHandler dataHandler = null;
                // accepts only an object which implements the IDataHandler interface
MultithreadedServer(IDataHandler dataHandler) {
this.dataHandler = dataHandler;
}
public void run() {
while (isRunning) {
// waiting for data
// ...

// ... and dispatch it
dataHandler.onData(nbc);
}
}
}
// the call back implementation
class SmtpProtocolHandler implements IDataHandler {
public boolean onData(INonBlockingConnection nbc) throws IOException {
SmtpSession session = (SmtpSession) nbc.getAttachment();
//...
}
}
        MultithreadedServer server = new MultithreadedServer(new SmtpProtocolHandler());
server.run();

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章