友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

Java编程思想第4版[中文版](PDF格式)-第2部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!



                        写在前面的话  



我的兄弟Todd 目前正在进行从硬件到编程领域的工作转变。我曾提醒他下一次大革命的重点将是遗传工程。  

我们的微生物技术将能制造食品、燃油和塑料;它们都是清洁的,不会造成污染,而且能使人类进一步透视 

物理世界的奥秘。我认为相比之下电脑的进步会显得微不足道。  

但随后,我又意识到自己正在犯一些科幻作家常犯的错误:在技术中迷失了(这种事情在科幻小说里常有发 

生)!如果是一名有经验的作家,就知道绝对不能就事论事,必须以人为中心。遗传对我们的生命有非常大 

的影响,但不能十分确定它能抹淡计算机革命——或至少信息革命——的影响。信息涉及人相互间的沟通: 

的确,汽车和轮子的发明都非常重要,但它们最终亦如此而已。真正重要的还是我们与世界的关系,而其中 

最关键的就是通信。  

这本书或许能说明一些问题。许多人认为我有点儿大胆或者稍微有些狂妄,居然把所有家当都摆到了Web 

上。“这样做还有谁来买它呢?”他们问。假如我是一个十分守旧的人,那么绝对不这样干。但我确实不想 

再沿原来的老路再写一本计算机参考书了。我不知道最终会发生什么事情,但的确认为这是我对一本书作出 

的最明智的一个决定。  

至少有一件事是可以肯定的,人们开始向我发送纠错反馈。这是一个令人震惊的体验,因为读者会看到书中 

的每一个角落,并揪出那些藏匿得很深的技术及语法错误。这样一来,和其他以传统方式发行的书不同,我 

就能及时改正已知的所有类别的错误,而不是让它们最终印成铅字,堂而皇之地出现在各位的面前。俗话 

说,“当局者迷,旁观者清”。人们对书中的错误是非常敏感的,往往毫不客气地指出:“我想这样说是错 

误的,我的看法是……”。在我仔细研究后,往往发现自己确实有不当之处,而这是当初写作时根本没有意 

识到的(检查多少遍也不行)。我意识到这是群体力量的一个可喜的反映,它使这本书显得的确与众不同。  

但我随之又听到了另一个声音:“好吧,你在那儿放的电子版的确很有创意,但我想要的是从真正的出版社 

那里印刷的一个版本!”事实上,我作出了许多努力,让它用普通打印机机就能得到很好的阅读效果,但仍 

然不象真正印刷的书那样正规。许多人不想在屏幕上看完整本书,也不喜欢拿着一叠纸阅读。无论打印格式 

有多么好,这些人喜欢是仍然是真正的“书”(激光打印机的墨盒也太贵了一点)。现在看来,计算机的革 

命仍未使出版界完全走出传统的模式。但是,有一个学生向我推荐了未来出版的一种模式:书籍将首先在互 

联网上出版,然后只有在绝对必要的前提下,才会印刷到纸张上。目前,为数众多的书籍销售都不十分理 

想,许多出版社都在亏本。但如采用这种方式出版,就显得灵活得多,也更容易保证赢利。  

这本书也从另一个角度也给了我深刻的启迪。我刚开始的时候以为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++》一样,这本书面向语言的教授进行了良好的结构与组织。特别地,我 

的目标是建立一套有序的机制,可帮助我在自己的研讨会上更好地进行语言教学。在我思考书中的一章时, 

实际上是在想如何教好一堂课。我的目标是得到一系列规模适中的教学模块,可以在合理的时间内教完。随 

后是一些精心挑选的练习,可以在课堂上当即完成。  

在这本书中,我想达到的目标总结如下:  



                                                             8 


…………………………………………………………Page 10……………………………………………………………

(1) 每一次都将教学内容向前推进一小步,便于读者在继续后面的学习前消化前面的内容。  

(2) 采用的示例尽可能简短。当然,这样做有时会妨碍我解决“现实世界”的问题。但我同时也发现对那些 

新手来说,如果他们能理解每一个细节,那么一般会产生更大的学习兴趣。而假如他们一开始就被要解决的 

问题的深度和广度所震惊,那么一般都不会收到很好的学习效果。另外在实际教学过程中,对能够摘录的代 

码数量是有严重限制的。另一方面,这样做无疑会有些人会批评我采用了“不真实的例子”,但只要能起到 

良好的效果,我宁愿接受这一指责。  

(3) 要揭示的特性按照我精心挑选的顺序依次出场,而且尽可能符合读者的思想历程。当然,我不可能永远 

都做到这一点;在那些情况下,会给出一段简要的声明,指出这个问题。  

(4) 只把我认为有助于理解语言的东西介绍给读者,而不是把我知道的一切东西都抖出来,这并非藏私。我 

认为信息的重要程度是存在一个合理的层次的。有些情况是95%的程序员都永远不必了解的。如强行学习, 

只会干扰他们的正常思维,从而加深语言在他们面前表现出来的难度。以 C 语言为例,假如你能记住运算符 

优先次序表(我从来记不住),那么就可以写出更“聪明”的代码。但再深入想一层,那也会使代码的读者 

/维护者感到困扰。所以忘了那些次序吧,在拿不准的时候加上括号即可。  

(5) 每一节都有明确的学习重点,所以教学时间(以及练习的间隔时间)非常短。这样做不仅能保持读者思 

想的活跃,也能使问题更容易理解,对自己的学习产生更大的信心。  

(6) 提供一个坚实的基础,使读者能充分理解问题,以便更容易转向一些更加困难的课程和书籍。  



4。  联机文档  



由Sun 微系统公司提供的 Java 语言和库(可免费下载)配套提供了电子版的用户帮助手册,可用Web 浏览器 

阅读。此外,由其他厂商开发的几乎所有类似产品都有一套等价的文档系统。而目前出版的与Java 有关的几 

乎所有书籍都重复了这份文档。所以你要么已经拥有了它,要么需要下载。所以除非特别必要,否则本书不 

会重复那份文档的内容。因为一般地说,用Web 浏览器查找与类有关的资料比在书中查找方便得多(电子版 

的东西更新也快)。只有在需要对文档进行补充,以便你能理解一个特定的例子时,本书才会提供有关类的 

一些附加说明。  



5。  章节  



本书在设计时认真考虑了人们学习 Java 语言的方式。在我授课时,学生们的反映有效地帮助了我认识哪些部 

分是比较困难的,需特别加以留意。我也曾经一次讲述了太多的问题,但得到的教训是:假如包括了大量新 

特性,就需要对它们全部作出解释,而这特别容易加深学生们的混淆。因此,我进行了大量努力,使这本书 

一次尽可能地少涉及一些问题。  

所以,我在书中的目标是让每一章都讲述一种语言特性,或者只讲述少数几个相互关联的特性。这样一来, 

读者在转向下一主题时,就能更容易地消化前面学到的知识。  

下面列出对本书各章的一个简要说明,它们与我实际进行的课堂教学是对应的。  

  

(1) 第 1 章:对象入门  

这一章是对面向对象的程序设计(OOP)的一个综述,其中包括对“什么是对象”之类的基本问题的回答,并 

讲述了接口与实现、抽象与封装、消息与函数、继承与合成以及非常重要的多形性的概念。这一章会向大家 

提出一些对象创建的基本问题,比如构建器、对象存在于何处、创建好后把它们置于什么地方以及魔术般的 

垃圾收集器(能够清除不再需要的对象)。要介绍的另一些问题还包括通过违例实现的错误控制机制、反应 

灵敏的用户界面的多线程处理以及连网和因特网等等。大家也会从中了解到是什么使得Java 如此特别,它为 

什么取得了这么大的成功,以及与面向对象的分析与设计有关的问题。  

  

(2) 第2 章:一切都是对象  

本章将大家带到可以着手写自己的第一个 Java 程序的地方,所以必须对一些基本概念作出解释,其中包括对 

象“句柄”的概念;怎样创建一个对象;对基本数据类型和数组的一个介绍;作用域以及垃圾收集器清除对 

象的方式;如何将Java 中的所有东西都归为一种新数据类型(类),以及如何创建自己的类;函数、自变量 

以及返回值;名字的可见度以及使用来自其他库的组件;static关键字;注释和嵌入文档等等。  

  

(3) 第 3 章:控制程序流程  

本章开始介绍起源于C 和C++,由Java 继承的所有运算符。除此以外,还要学习运算符一些不易使人注意的 

问题,以及涉及造型、升迁以及优先次序的问题。随后要讲述的是基本的流程控制以及选择运算,这些是几 



                                                               9 


…………………………………………………………Page 11……………………………………………………………

乎所有程序设计语言都具有的特性:用 if…else 实现选择;用 for 和while 实现循环;用break 和 continue 

以及Java 的标签式break 和 contiune (它们被认为是Java 中“不见的 gogo”)退出循环;以及用 switch 

实现另一种形式的选择。尽管这些与C 和C++中见到的有一定的共通性,但多少存在一些区别。除此以外, 

所有示例都是完整的Java 示例,能使大家很快地熟悉Java 的外观。  

  

(4) 第4 章:初始化和清除  

本章开始介绍构建器,它的作用是担保初始化的正确实现。对构建器的定义要涉及函数过载的概念(因为可 

能同时有几个构建器)。随后要讨论的是清除过程,它并非肯定如想象的那么简单。用完一个对象后,通常 

可以不必管它,垃圾收集器会自动介入,释放由它占据的内存。这里详细探讨了垃圾收集器以及它的一些特 

点。在这一章的最后,我们将更贴近地观察初始化过程:自动成员初始化、指定成员初始化、初始化的顺 

序、static (静态)初始化以及数组初始化等等。  

  

(5) 第 5 章:隐藏实现过程  

本章要探讨将代码封装到一起的方式,以及在库的其他部分隐藏时,为什么仍有一部分处于暴露状态。首先 

要讨论的是 package 和 import关键字,它们的作用是进行文件级的封装(打包)操作,并允许我们构建由类 

构成的库(类库)。此时也会谈到目录路径和文件名的问题。本章剩下的部分将讨论 public,private 以及 

protected 三个关键字、“友好”访问的概念以及各种场合下不同访问控制级的意义。  

  

(6) 第6 章:类再生  

继承的概念是几乎所有 OOP 语言中都占有重要的地位。它是对现有类加以利用,并为其添加新功能的一种有 

效途径(同时可以修改它,这是第 7 章的主题)。通过继承来重复使用原有的代码时(再生),一般需要保 

持“基础类”不变,只是将这儿或那儿的东西串联起来,以达到预期的效果。然而,继承并不是在现有类基 

础上制造新类的唯一手段。通过“合成”,亦可将一个对象嵌入新类。在这一章中,大家将学习在Java 中重 

复使用代码的这两种方法,以及具体如何运用。  

  

(7) 第 7 章:多形性
返回目录 上一页 下一页 回到顶部 10 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!