23.3 用Jython写Python和Java的程序

    23.3.1 什么是Jython

    Jython是一种可以把两种不同的编程语言结合在一起的工具。首先,它使Python程序员介入到Java开发环境并让他们能快速开发方案原型,以便无缝地集成到现有的Java平台上。其次,它能在Java中加入脚本语言,并以此来简化数计百万计的Java程序员的工作。Java程序员们再也不用为他们刚写的一个类写一大堆的测试用例或驱动程序。

    Jython提供了Python的大部分功能,以及实例化Java类并与Java类交互的功能。Jython代码被动态地编译成Java字节码,因此,你可以用Jython扩展Java类,也可以用Java来扩展Python。在Python中写一个类,像使用Java类一样使用这个类是很容易的事情。你甚至可以把Jython脚本静态地编译为Java字节码。

    你可以从本书的网站或http://jython.org下载Jython。在安装完,并阅读了一些处理新的jar文件的默认启动注意事项后,启动Jython的交互解释器就跟用Python一样简单。而且,你也可以像在Python中一样,写一个“Hello World!”:

    23.3 用Jython写Python和Java的程序 - 图1

    23.3 用Jython写Python和Java的程序 - 图2

    惟一的不同是,现在,你不得不等待Java那超长的启动时间。如果你能忍受这个,你就能做一些更有用的事了。用Jython交互解释器的一个更有趣的方面就是,现在你可以用Java来写“Hello World!”了:

    23.3 用Jython写Python和Java的程序 - 图3

    Java给了Python用户一些额外的好处,即可以使用本地异常处理(这在标准Python——相对于其他实现来说,也被称为“CPython”——里是没有的),以及可以使用Java的垃圾收集器(这样就没必要再为Java开发一套Python的实现了)。

    23.3.2 Swing GUI开发(Java或者Python!)

    有了对所有Java类的访问能力,我们能做的事就太多了,例如,图形界面(GUI)的开发。在Python中,我们用Tkinter模块中的Tk作为默认GUI,但是,Tk不是Python的本地工具包。不过,Java有Swing,它是本地的。用Jython,我们可以用Swing组件写一个GUI应用程序,不是用Java,而是用Python。

    一个简单的“Hello World!” GUI程序的Java版本和对应的Python版本分别在例23.7和例23.8中给出。这两个版本都模仿了图像界面编程那一章的Tk例子tkhello3.py。这两段程序分别叫swhellojava和swhello.py.

    例23.7 在Java中,用Swing写“Hello World” (swhello.java)

    本程序像tkhello3.py那样,创建一个GUI。使用Swing而不是Tk,使用的语言是Java。

    23.3 用Jython写Python和Java的程序 - 图4

    23.3 用Jython写Python和Java的程序 - 图5

    例23.8 在Python中用Swing写“Hello World” (swhello.py)

    下面的Python脚本代码具有和上面的Java程序具有相同的功能,需要在Jython解释器中执行。

    23.3 用Jython写Python和Java的程序 - 图6

    两段代码都与tkhello3.py—一致,惟一的区别就是它们使用了Swing而不是Tk。Python版本的特点是,做同样的事,Python所要写的代码相对于Java大幅减少。Python代码的表达能力更强,所以每一行都显得更为重要。简单地说,就是“白色噪音”(译者注:指Java大量换行造成的留白部分)更少了。Java的代码更趋向于用更多的“样板”代码来完成工作,而Python则让你把注意力集中在你的应用的重要部位,即你要解决的问题的解决方案上。

    由于两个程序都会被编译为Java字节码,在同一个平台上两个程序看上去完全一样也就没什么好奇怪的了(见图23-8)。

    23.3 用Jython写Python和Java的程序 - 图7

    图 23-8 Swing的Hello World示例脚本(swhello.java和swhello.py)

    Jython是一个很伟大的工具。因为你可以同时得到了Python的强大的表达能力,以及Java库中丰富的API。如果你现在是一个Java程序员,希望我们己经引起了你对你身后Python的强大力量的兴趣。如果你是Java新手,Jython能让你更为轻松。你可以用Jython写原型,然后在必要的时候轻松地移植到Java中。