按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
的最明智的一个决定。
至少有一件事是可以肯定的,人们开始向我发送纠错反馈。这是一个令人震惊的体验,因为读者会看到书中
的每一个角落,并揪出那些藏匿得很深的技术及语法错误。这样一来,和其他以传统方式发行的书不同,我
就能及时改正已知的所有类别的错误,而不是让它们最终印成铅字,堂而皇之地出现在各位的面前。俗话
说,“当局者迷,旁观者清”。人们对书中的错误是非常敏感的,往往毫不客气地指出:“我想这样说是错
误的,我的看法是……”。在我仔细研究后,往往发现自己确实有不当之处,而这是当初写作时根本没有意
识到的(检查多少遍也不行)。我意识到这是群体力量的一个可喜的反映,它使这本书显得的确与众不同。
但我随之又听到了另一个声音:“好吧,你在那儿放的电子版的确很有创意,但我想要的是从真正的出版社
那里印刷的一个版本!”事实上,我作出了许多努力,让它用普通打印机机就能得到很好的阅读效果,但仍
然不象真正印刷的书那样正规。许多人不想在屏幕上看完整本书,也不喜欢拿着一叠纸阅读。无论打印格式
有多么好,这些人喜欢是仍然是真正的“书”(激光打印机的墨盒也太贵了一点)。现在看来,计算机的革
命仍未使出版界完全走出传统的模式。但是,有一个学生向我推荐了未来出版的一种模式:书籍将首先在互
联网上出版,然后只有在绝对必要的前提下,才会印刷到纸张上。目前,为数众多的书籍销售都不十分理
想,许多出版社都在亏本。但如采用这种方式出版,就显得灵活得多,也更容易保证赢利。
这本书也从另一个角度也给了我深刻的启迪。我刚开始的时候以为Java “只是另一种程序设计语言”。这个
想法在许多情况下都是成立的。但随着时间的推移,我对它的学习也愈加深入,开始意识到它的基本宗旨与
我见过的其他所有语言都有所区别。
程序设计与对复杂性的操控有很大的关系:对一个准备解决的问题,它的复杂程度取决用于解决它的机器的
复杂程度。正是由于这一复杂性的存在,我们的程序设计项目屡屡失败。对于我以前接触过的所有编程语
言,它们都没能跳过这一框框,由此决定了它们的主要设计目标就是克服程序开发与维护中的复杂性。当
然,许多语言在设计时就已考虑到了复杂性的问题。但从另一角度看,实际设计时肯定会有另一些问题浮现
出来,需把它们考虑到这个复杂性的问题里。不可避免地,其他那些问题最后会变成最让程序员头痛的。例
如,C++必须同 C 保持向后兼容(使 C 程序员能尽快地适应新环境),同时又要保证编程的效率。C++在这两
个方面都设计得很好,为其赢得了不少的声誉。但它们同时也暴露出了额外的复杂性,阻碍了某些项目的成
功实现(当然,你可以责备程序员和管理层,但假如一种语言能通过捕获你的错误而提供帮助,它为什么不
那样做呢?)。作为另一个例子,Visual Basic (VB)同当初的BASIC 有关的紧密的联系。而 BASIC 并没有
打算设计成一种能全面解决问题的语言,所以堆加到VB 身上的所有扩展都造成了令人头痛和难于管理和维护
的语法。另一方面,C++、VB 和其他如Smalltalk 之类的语言均在复杂性的问题上下了一番功夫。由此得到
的结果便是,它们在解决特定类型的问题时是非常成功的。
在理解到Java 最终的目标是减轻程序员的负担时,我才真正感受到了震憾,尽管它的潜台词好象是说:“除
了缩短时间和减小产生健壮代码的难度以外,我们不关心其他任何事情。”在目前这个初级阶段,达到那个
目标的后果便是代码不能特别快地运行(尽管有许多保证都说Java 终究有一天会运行得多么快),但它确实
将开发时间缩短到令人惊讶的地步——几乎只有创建一个等效 C++程序一半甚至更短的时间。这段节省下来
的时间可以产生更大的效益,但Java 并不仅止于此。它甚至更上一层楼,将重要性越来越明显的一切复杂任
务都封装在内,比如网络程序和多线程处理等等。Java 的各种语言特性和库在任何时候都能使那些任务轻而
易举完成。而且最后,它解决了一些真正有些难度的复杂问题:跨平台程序、动态代码改换以及安全保护等
等。换在从前,其中任何每一个都能使你头大如斗。所以不管我们见到了什么性能问题,Java 的保证仍然是
非常有效的:它使程序员显著提高了程序设计的效率!
6
…………………………………………………………Page 8……………………………………………………………
在我看来,编程效率提升后影响最大的就是Web。网络程序设计以前非常困难,而 Java 使这个问题迎刃而解
(而且Java 也在不断地进步,使解决这类问题变得越来越容易)。网络程序的设计要求我们相互间更有效率
地沟通,而且至少要比电话通信来得便宜(仅仅电子函件就为许多公司带来了好处)。随着我们网上通信越
来越频繁,令人震惊的事情会慢慢发生,而且它们令人吃惊的程度绝不亚于当初工业革命给人带来的震憾。
在各个方面:创建程序;按计划编制程序;构造用户界面,使程序能与用户沟通;在不同类型的机器上运行
程序;以及方便地编写程序,使其能通过因特网通信——Java 提高了人与人之间的“通信带宽”。而且我认
为通信革命的结果可能并不单单是数量庞大的比特到处传来传去那么简单。我们认为认清真正的革命发生在
哪里,因为人和人之间的交流变得更方便了——个体与个体之间,个体与组之间,组与组之间,甚至在星球
之间。有人预言下一次大革命的发生就是由于足够多的人和足够多的相互连接造成的,而这种革命是以整个
世界为基础发生的。Java 可能是、也可能不是促成那次革命的直接因素,但我在这里至少感觉自己在做一些
有意义的工作——尝试教会大家一种重要的语言!
7
…………………………………………………………Page 9……………………………………………………………
引言
同人类任何语言一样,Java 为我们提供了一种表达思想的方式。如操作得当,同其他方式相比,随着问题变
得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。
不可将Java 简单想象成一系列特性的集合;如孤立地看,有些特性是没有任何意义的。只有在考虑“设
计”、而非考虑简单的编码时,才可真正体会到Java 的强大。为了按这种方式理解 Java,首先必须掌握它
与编程的一些基本概念。本书讨论了编程问题、它们为何会成为问题以及 Java 用以解决它们的方法。所以,
我对每一章的解释都建立在如何用语言解决一种特定类型的问题基础上。按这种方式,我希望引导您一步一
步地进入Java 的世界,使其最终成为您最自然的一种语言。
贯穿本书,我试图在您的大脑里建立一个模型——或者说一个“知识结构”。这样可加深对语言的理解。若
遇到难解之处,应学会把它填入这个模型的对应地方,然后自行演绎出答案。事实上,学习任何语言时,脑
海里有一个现成的知识结构往往会起到事半功倍的效果。
1。 前提
本书假定读者对编程多少有些熟悉。应已知道程序是一系列语句的集合,知道子程序/函数/宏是什么,知
道象“If”这样的控制语句,也知道象“while”这样的循环结构。注意这些东西在大量语言里都是类似的。
假如您学过一种宏语言,或者用过 Perl 之类的工具,那么它们的基本概念并无什么区别。总之,只要能习惯
基本的编程概念,就可顺利阅读本书。当然,C/C++程序员在阅读时能占到更多的便宜。但即使不熟悉 C,一
样不要把自己排除在外(尽管以后的学习要付出更大的努力)。我会讲述面向对象编程的概念,以及Java 的
基本控制机制,所以不用担心自己会打不好基础。况且,您需要学习的第一类知识就会涉及到基本的流程控
制语句。
尽管经常都会谈及 C 和 C++语言的一些特性,但并没有打算使它们成为内部参考,而是想帮助所有程序员都
能正确地看待那两种语言。毕竟,Java 是从它们那里衍生出来的。我将试着尽可能地简化这些引用和参考,
并合理地解释一名非C/C++程序员通常不太熟悉的内容。
2。 Java 的学习
在我第一本书《Using C++》面市的几乎同一时间(Osborne/McGraw…Hill 于 1989 年出版),我开始教授那
种语言。程序设计语言的教授已成为我的专业。自 1989 年以来,我便在世界各地见过许多昏昏欲睡、满脸茫
然以及困惑不解的面容。开始在室内面向较少的一组人授课以后,我从作业中发现了一些特别的问题。即使
那些上课面带会心的微笑或者频频点头的学生,对许多问题也存在认识上的混淆。在过去几年间的“软件开
发会议”上,由我主持 C++分组讨论会(现在变成了Java 讨论会)。有的演讲人试图在很短的时间内向听众
灌输过多的主题。所以到最后,尽管听众的水平都还可以,而且提供的材料也很充足,但仍然损失了一部分
听众。这可能是由于问得太多了,但由于我是那些采取传统授课方式的人之一,所以很想使每个人都能跟上
讲课进度。
有段时间,我编制了大量教学简报。经过不断的试验和修订(或称“反复”,这是在 Java 程序设计中非常有
用的一项技术),最后成功地在一门课程中集成了从我的教学经验中总结出来的所有东西——我在很长一段
时间里都在使用。其中由一系列离散的、易于消化的小步骤组成,而且每个小课程结束后都有一些适当的练
习。我目前已在Java 公开研讨会上公布了这一课程,大家可到http://BruceEckel。 了解详情(对研
讨会的介绍也以CD…ROM 的形式提供,具体信息可在同样的Web 站点找到)。
从每一次研讨会收到的反馈都帮助我修改及重新制订学习材料的重心,直到我最后认为它成为一个完善的教
学载体为止。但本书并非仅仅是一本教科书——我尝试在其中装入尽可能多的信息,并按照主题进行了有序
的分类。无论如何,这本书的主要宗旨是为那些独立学习的人士服务,他们正准备深入一门新的程序设计语
言,而没有太大的可能参加此类专业研讨会。
3。 目标
就象我的前一本书《Thinking in C++》一样,这本书面向语言的教授进行了良好的结构与组织