序言 我一直都怀疑被那些自以为博学的人不停讨论的最热门的话题Java™ 。您可以用一分为二的观点来对待这些问题,最终你被迫相信 Java 将带来世界和平并能偿还美国的国债或者它完全是在浪费时间。我经常想涉足这些讨论,但我还是尽量避而不谈,直到我能够提供广博的观点。
设想一下当我从圣诞节假期归来时发现我的下一个任务是需要学习 Java 时,我是多么的惊慌(或者应当说成是惧怕)。你能说“留心你想要得到的东西,因为你可能正在得到它”吗?但是,我很兴奋的发现学习比我预计的要轻易。Java 是面向对象的设计方法,作为一个长期在复杂凌乱的 C++ 世界挣扎的 C 程序员,经过多年的面向对象的编程,作为一种回报我发现确实学到了一些原理和技术。的确,我承认我是一个 OLE 热衷者(阅读过 Nigel Tompson 的系列文章的 MSDN 订阅者都会理解我的意思),至少在产品代码迁移方面如此。但是,渐渐的我离开了无序的行列,至少在考虑 Java 时是这样。
我的第一个决定??并且是一个正确的决定??避免了选择类似于《利用你五天刷牙的时间学会 Java》这样的书。假如你最近到过书店的计算机技术部分(假如你可以外出),会知道那里有许多 Java 书籍。为了缩小你的查找范围,你可以选择适合自己的书。因为我有丰富的 C 程序经验,我找到一些适用于 C 程序员学习 Java 的书。例如,找到一本David Flanagan 所著的《简单的Java》(Java in a Nutshell 专用系统参考 1996年12月。ISBN:1556592183)。我还买了一本Addison-Wesley 出的《Java 系列》(参见http://www.awl.com/cp/javaseries/),这些书的确十分有用,但大部分都是编程参考。按照我自己通过实践进行学习的习惯,没过多久我就熟悉了。我开始时编写示例 Applet 程序,这在当时看来是很有用的,但很快我就熟悉到自己的知识很有限需要深入的学习。于是我开始浏览微软的Java 开发者 Web 站点和Sun MicroSystems 站点, 并且在下列站点也找到一些资料(这不是一个全面的列表):
? Java 开发者 (最好的Java 编程疑问与解答)
? “Java Jolt” (Web Developer.com 的指导专栏周刊)
? “Digital Espresso” (Java 邮件列表摘要周刊和Mentor Software Solutions 的新闻组活动)
? JavaWorld (每月更新的关于 Java 社团的IDG 杂志)
? Javology (每月更新的 Java 新闻和在线见解e-zine)
权威人士一些关于 Java 的观点让我感到鼓舞,我又回到原先起步阶段的 Applet 示例中,但是很快就又转移了视线,开始阅读 Sun Java 开发工具(JDK)的 Applet 示例源程序??可以从http://www.javasoft.com/nav/developer/index.Html 下载。自然,当我开始看实现系统类的源代码时,觉得阅读示例源程序更有趣。
我的 Java 学习方法实践证实是比较成功的。由于正确的选择了适合自己 C 编程背景的启蒙书籍,我对 Java 有了相当充分深入的理解。学习的第二阶段通过到 Web 站点浏览,我又把握了关于 Java 开发工具和相关问题的最新信息。经过阅读源代码,使我对 Java 的结构和实现有了本质的熟悉。
关于 Java 系列文章的第一篇将帮助每个 C 程序员解答“Java 可移植性的要害是什么?”这个问题。我将重点介绍设计方面使 Java 应用程序比其他技术在不同计算机平台之间有更好的可移植性的原因。但是,假如你想彻底理解这一切,Java 良好的可移植性内部的理论将是你学习的一个重点。我看到在 Java 新闻组中有大量的布告,反映出实际使用时不断出现的真正的问题。当然,人们也在抱怨 Java 的兼容性问题,我将从根本上解释这一问题。假如你认为该主题的文章有帮助,我将很感激你能告诉我(我的 e-mail 地址是michaele@microsoft.com )。
关于可移植性
提供创建高可移植性应用程序的便利是 Java 设计体系的核心要素。我的大部分编程经验是关于 C 语言的,八十年代当我开始自己的计算机游戏程序员生涯时,我就开始与可移植代码问题朝夕相伴。我所在的游戏公司常期支持几个不同的平台,包括Apple II、C64、Mac、Amiga、Atari ST 和 PC??使用游戏控制台,但未能成功。因此,“移植仪定”仿佛成了我的名字。当我在这些平台之间移植游戏时我学到了重要的一课:不存在完全可移植的代码;仅仅是可移植代码多和少的问题。我同时也把握了一个可以产生尽可能多的可移植代码的方法。对我们来讲,这个方法包括尽可能多的用 C 语言编写代码,使用我们称为虚拟机的技术??我们移植到不同平台时所使用的基本库代码,该库充当运行我们的游戏程序所需的虚拟图形和用户输入库。因此,从我个人来之不易的创建可移植软件经验,我能证实 Java 通常使用可靠性好的技术来生成高可移植性的代码更轻易。