?各种Java版本之间的联系 ? JINI技术
既然存在那幺多不同Java版本是一件事实,那幺,假如这些针对不同版本来开发的Java程序能够彼此连结在一块,互相分享彼此的资源,或是做资料交换,岂不是一件很棒的事情? 这就是JINI被创造出来的理由。各种不同版本的Java平台藉由JINI彼此联系,如下图所示:
有关JINI技术,在此笔者不多着墨,因为市面上已经有许多书籍讨论此技术。不过在上图之中要请大家注重的是,Smart Card版本由于其特性使然,所以并没有藉由JINI与其它Java版本的应用程序做沟通,而只是在JINI所造成的广大分布式环境之中被用来作为认证之用。
?各种Java版本之程序开发
如前面所说,各种不同的Java版本,在其支持的核心类别之完整性以及所支持的Java基本型别这两件事情上都有所差异,但是对于程序设计师而言,这些版本的关系下图所示:
也就是说,不管您开发的是企业所使用的Java程序、手持装置上执行的Java程序、浏览器上执行的Applet,或是在PC上执行的应用程序。您都必须在您的计算机上先安装J2SE,然后再安装各种版本的额外扩充类别,如此才能成功地开发各种不同功能的Java程序。
J2SE所提供的Java编译器(javac.exe)可以帮助我们编译各种不同平台上的Java程序,而J2SE所提供的Java虚拟机器(java.exe)则可以帮助我们在PC上先行测试这些程序执行结果的正确与否。
另外,Java编译器并不会帮您检查您的程序是否符合各种平台上所支持的核心类别与Java基本型别。举例来说,虽然我们在上面说过,Smart Card版本中并不支持boolean、byte以外的Java基本型别,而且该平台也只支持java.lang.*核心类别,可是当我们在撰写Smart Card平台上的程序时,就算在程序代码里头用了boolean或byte以外的Java基本型别,或者使用了java.lang.*之外的其它核心类别,编译器仍然可以照常帮您编译出类别档出来。这个时候大家一定开始产生迷惑--那幺这些程序假如放到Smart Card上头执行的时候,出了问题怎幺办? 难道不会造成Smart Card上的虚拟机器发生执行错误吗? 针对这个可能发生的潜在问题,所以在各种不同版本的开发套件中,有些会内附检查器(checker)或者预先审核器(preverifier),这两个工具可以帮助您在将程序放到目标平台之前先做好检查和预先审核的工作。
检查器会帮您找出类别文件之中不合目标平台规格的部分,并提醒你这些地方可能无法在目的平台上执行。因此只要有检查器的协助,您大致上可以确定您的程序可以符合目标平台的规定并顺利执行。
而某些平台的开发套件则附有预先审核器,之所以有预先审核器的原因是因为传统Java程序(Application、Servlet、Applet)的执行程序如下:
在传统的Java程序之中,为了安全上的考量,任何进入执行环境的类别档 (不管该类别档是来自本机或是远程机器),都必须先经过Byte Code审核器(Byte code verifier)的验证,以防止有人在程序传送途中遭到恶意的修改,而使得Java程序在执行时对系统有不良影响。经过验证之后,该类别档才能开始被JVM所执行。
假如这个审核的动作在一般的PC上执行,速度倒是还能够接受,可是一旦放到如Palm或是手机这些CPU较慢、内存也较少的机器上面就显得十分吃力了。为了节省宝贵的CPU运算时间(既能省电又能够加速程序执行),因此,在程序设计师产生能够让某些特定平台执行的类别档之前,程序设计师必须先在PC上使用预先审核器做一些前置的验证工作,预先审核器会在类别文件之中加入一些非凡标记或符号。如此一来,当这些程序放到目标平台上执行时,就可以大幅减少在目标平台上做验证时的时间,藉而加速程序的的激活及执行速度。