\\JAVA编程思想中文第3版(PDF)陈昊鹏和饶若楠翻译

所需积分/C币:12 2007-04-06 23:59:44 11.97MB PDF

《Java编程思想》就是一本能够让Java程序员轻松面对这一挑战,并最终取得胜利的经典书籍。本书深入浅出、循序渐进地把我们领入Java的世界,让我们在不知不觉中就学会了用 Java 的思想去考虑问题、解决问题。本书不仅适合 Java 的初学者,对于有经验的Java程序员来说,每次阅读本书也总是能够有新的体会,这正是本书的魅力所在。 本书假定你对程序设计具有一定程度的熟悉:你已经知道程序是一些语句的集合,知道子程序/函数/宏的思想,知道像“if”这样的控制语句和像“while”这样的循环结构,等等。不过,你可能在许多地方已经学到过这些,例如使用宏语言进行程序设计或者使用像Perl这样的工具
计语言全力将主要设计目标放在征服程序开发与维护过程中的种和复杂度上。当然,许 多编程语言设计时也确实考虑到了复杂度问题,但它总是与做视为更本质的问题混在一起。 当然,那些也都是会让程序员感到困扰的问题。比如,必须向上兼容于(为使程序 员容易过渡),并具有执行效率高的优点。这两点都很有用,并且帮助取得了成功 不过,两者也引入了额外的复杂度,使得某些项目无法完成。(当然,你可以归咎于开发或 管理人员,但如果有某种语言可以帮助我们找到错误,何乐而不为呢?) 是另一个例子,它被局限于语言(它并不把可扩展能力作为设计目标),这就使得 所有堆积」之上的扩充功能,都造成了可怕且难以维护的语法。 也向上兼容」 以及其它工具,这就导致了被诟病为能写不能读的程序代码(也 就是说,段吋间之后,你就无法看懂这些代码)。另一方面 之类的编程语言,都为复杂度问题付出了相当大的努力,在解决特定类型门趣的时候非常成 功 当我开始理解之后,印象最深的莫过在上体现出的公司的设计目标:为 桯序员降低复杂度。就好象说:我们关注的是降低编写健壮代码的困难程度和需要的时间。 以前,编写健壮代码将导致性能降低(尽管有许多承诺,总有一天能够执行得足够快), 不过的确大大缩短了开发时间;相比同等功能的程序,它只需·半甚至更少的 时间。只凭这一点,就足以省下人量的时间与金钱。不过, 并不仅仅如此。它又持续 引入了一些日益重要的复杂任务,比如多线程和网络编程。并且通过语言本身的特性和程序 库,使得这些工作变得轻而易举。最后,还着眼于某些有着极高复杂度的问题:跨丬 台程序、动态程序代码联编、甚至安全问题,它们都属于复杂度问题的重要方面。所以尽管 存在已知的效率问题,带来的许诺却极其诱人:它能使我们程序员的生产率大大提晑。 根据我的观察,是影响最深远的地方之一。网络程序设计总是非常难,但 使它得以简化(的设计者仍在努力使它变得更简单)。网络程序设计所关注的,就是 研究如何让我们用比使用电话更有效凇、更廉价的方式进行沟通(单是电了邮件就已经使许 多业务领域发生了革命性的变化)。当我们能更有效地进行沟通时,奇妙的事情就开始发生, 这也许要比基因工程所作出的许诺更让人感到神奇 通过所有方式:编写程序、团队廾发、设计用户界面(让程序可以和用户交互)、跨平台执 行、轻松编写跨互联网的通讯程序等,扩展了人与人之间的通讯带宽。我认为,通讯 革命的成果也许不应以海量数据的传输米衡量;我们将体会到真正的革命,因为我们能更容 易和他人沟通:可以是一对一的形式、可以是分组形式、也可以是全球通讯的形式。我曾经 听人主张,随着足够多的人之间产生了足够多的相互联系,下一次革命将会是一种全球化思 维的形成 可能是、也可能不是这场革命的引线,但至少这种可能性使我觉得,教授 这门语言是一件非常有意义的事情。 第版前言 这一版的主要目的和大量工作都用在了与 版保持同步上。不过,本书的主旨也史 加清楚:使大多数读者通过本书牢牢抓住语言的基本概念,以便深入学习更复杂的主题。因 为还在不断地演化,所以重新定义基础知识的涵义就很有必要,再说本书也不应过 在本书弟二版我收回这句话:我认为 语言非常接近这个目标。请参考 于面面俱到。这就意味着,比如,完全重写了并发这一章(以前称为多线程),它能使 你对线程的核心概念冇一个基本的了解。没有这一点,你就很难理解线程中那些更复杂的概 我还认识到了代码测试的重要性。如果没有内置的测试框架及相应测试用例,并在每次构造 系统的时候都进行测试,那么你就无法知道代码是否可靠。在本书中,为了做到这一点,专 门编写了单元测试框架,用来演示和验证每个程序的输出。这些内容在第章中有介绍, 里面还解释了(构建系统的事实标准,与类似) (单元测试框 架的事实标准),口志和断言机制(是 新引入的),以及对调试和性能分析的介绍 为了涵盖所有这些概念,我把这一章命名为发现问题,面介绍的内容都是我认为所有的 程序员都应该具有的基本技能。 此外,我复查了书中所有的示例,并同时问自己:为什么要用这种方法呢?。多数情况下 我会作出一些修改和润色,这样会使例子更贴切,同时还有助于演示一些我认为比较好的 编程实践(至少在比较基础的范围内)。此外,我还删除了一些不再有意义的示例, 并加入了一些新的示例,许多己有示例也被重新设计和修改过。 仝书分为章,溷盖了对语言的基本介绍。它可以用作基础课程的教材,但那些更高 级的主题又该如何处理呢? 我原计划为本书加入一个新部分,专门介绍 企业版()的基础知识。其中许 多章节由我的朋友、以及一同授课或开发项日的同事编写,他们有 和 当我把这些新章节的进度 和岀版日期相对照的时候,我就有些担心。并且我注意到,前章的篇幅就经与木书第 二版的仝部篇幅一样大了。而即使是这个篇幅,读者也会经常抱怨 对于本书的前两版,读者给予了极高评价,当然我也十分欣慰。但有时他们也会抱怨。其中 常被提及的就是这木书太厚了。在我看来,如果这就是你挑出的唯一毛病,那真是令人哭 笑不得。(这会让人联想到奥地利国王对莫扎特作品的抱怨:音符太多了。我并没有任何 与莫扎特相比的意思)此外,我只能认为发岀这种抱怨的人尚未了解语言的博大精深 乜未见识过其它书籍。尽管如此,我还是在这一版中尽量删减掉那些己经过时,或是 不那么关键的内容。总之,我仔细检查了所有地方,在第三版中删除了那些不必要的内容, 并尽可能作出了修改和润色。这么做我很放心,因为木书的前两个版木还可以从网站 )上免费下绂,附在书后的光碟中也有。如果你还需要那些老资 料,这些地方都能找到。对于作者,这样可以减轻很多负担。比如,设计模式这·章太大 了,已经可以独立成书:《 》也可以从网站上下载。 在的下一个版本( 中,预计公司会效法引入泛型这个新功能。我 本来已经决定,到时候把本书分为两册,以加入新的内容。但有个声音悄悄在问:为什么 要等呢?。于是,我决定在这一版中就这么做,于是一切问题迎刃而解。我以前往一本介 绍性的书籍塞入了太多内容。 这本新书并不是第二卷,而是包含了一些高级主题。书名叫《 》,它现在可以从 免费下载。由于是一本单独的书,因此它的 篇幅可以随着内容的需要而扩展。与《 》一样,它的目标是向读者提供 本容易理解,涵盖技术基础知识的介绍。并为读者能学习更深入的内容做准备。你 能在附录中找到更多说明 对于那些仍然不能忍受本书篇幅的读者,我只能说声抱歉。不管你信不信,为了让它尽可能 薄,我已经作了很多努力。先不管书冇多厚,我认为还有许多替代方式可以令你满意。比如, 木书有电子版,如果你带着使携式电脑的话,你叮以把电子版放进电脑,这样也不会给日常 生活带来额外的负担。如果你还想更轿巧些,可以使用本书的掌上电脑版本。(有人对我说, 他喜欢躺在床上,打丌屏幕的背光看书,这样就不会打扰他的妻了。但愿这能帮助他进入梦 乡。)如果你一定用纸才能阅读,我知道有人一次打印一章,然后放在公文包里,在火车上 阅读。 的发布版本以 表示,本书针对版。尽管这些版本号还是各 自独立的,但 或更高版本的标准称呼是 这衣明旧式 (我在本书 的第一版中讨论了其中的许多缺陷。)和的改进版本之间存在巨大差异,后者的缺陷 要少得多,而且引入了很多优秀的设计 本书针对 编写,尤其是 (很多代码不能在以前版本的下编译,如果你 试图这么做的话,构建系统将给出岀错信息并终止。)。本书大刀訚斧地刑除了一些过时的 内容,并且重写了语言新引入和改进的部分。那些过时的内容可以在本书的以前版本中找到 (可以通过或者木书光碟)。此外,任何人都可以从 免费卜载,也 就是说,本书针欢 ,不会给任何人带来因为升级而造成的经济负担。 的以前版本在系统上发布的速度稍慢(参见 ),这个问题正在 得到改进,针对的新版木与针对其它平台的版木将同时发布,现在甚至是 也开始能跟上的新版本。与相互配合, 现在正处于非常重要的发展阶段 它止迅速成为市场上最重要的服务器平台,因为它快速、可靠、健壮、安全、易于维护,并 且是免费的。这是计算机历史上的一场真正的革命,我认为以前的任何工只都没能具备所有 这些特征。在服务器端编程中占据了重要位置,它采用了 和服务器页面 ()技术,这与传统的通用网关接口()技术相比是一个巨大的进步(相关主题请 参考《 》) 简介 上帝赋予人类说话的能力,而说话又创造了人类对宇宙的量度——思想 人类极其受那些已经成为用米表达他们所处社会的媒个的特定语言的现想象一下,如果 个人可以不使用语言就能够从本质上适应现实世界,语言仅仅是为了解决只体的交流和反 所问题时偶尔被使用到的方式,那么我们会发现这只能是一种幻想。享实上“真实世界”在 很大程度上是不知不觉地创建群体的语言与贺之上的。 摘自“ 如同仼何人类语言一样,提供了一种表达概念的方式。如果使用得当,随着问题变得 更庞大更复杂,这种表达媒介将会比别的可供选择的语言要更为简单更为灵活。 我们不应该将 仅仅看作是一些特性的集合——有一些特性在孤立状态下没有任何意 义。如果我们需要考虑设计,而不仪仪只是编码,那么我们可以将的各部分作为个 整体来使用。而且如果要按照这神方式去瑆解,我们通常必须理解有关它的问题以及 在程序设计时伴随的问题。这本书讨论的是编程问题、它们为什么成为问题,以及已 经采取的用于解决它们的方案。因此,我在每章所阐述的特性集都是基于我所看到的这一语 言在解泱特定类型问题时的方式。按照这种方式,我希望能够每次引导你向前前进一点,直 到思想意识成为你自然不过的语言 自始至终,我直持这样的观点:你需要在头脑中创建个模型,用于加强对这种话言的深 入理解;如果你遇到了疑问,你就能够将它反馈给你的模型并摊断出答案。 前提条件 本书假定你对程序设计具有定程度的熟悉:你已经知道程序是一些语句的集合,知道了程 序函数宏的思想,知道像“”这样的控制语句和像“ 这样的循环结构,等等。 不过,你可能在许多地方已经学到过这些,例如使用宏语言进行程序设计或者使用像 这样的工具工作。只要你的程序设计已经到达能够自如地运用程序设计基木思想的程度,你 就能够顺利阅读本书。当然,本书对程序员来说更容易,对于十+稈序员更是如此, 因此,即使你没有实践过这两种语言,也不要否定自己—而应该乐于努力学习(并且,伴 随本书的多媒体光盘能够带领你快速学习所必需的某础知识)。不过,我还是会介绍 面向对象()的概念和基本控制机制的。 尽管经常引用参考和十+语言的特性,但这并不是打算让它们成为内部注释,而是要 帮助所有的程序员正确看待这些话言,毕竞是从这些语言衍生而来的。我将会努力简 化这些引用参考,并且解释我认为一个非 程序员可能不太熟悉的任何事情。 学习 大概在我的第本书《 》( 年出版)出版发 行的同一时候,我就开始教授这种语言了。讲授程序设计语言已经成为我的职业了;自 年以来,我在世界各地的听众中看到有的混混欲睡、有的面无表情、冇的表情迷茫。当我开 始给较小的团体进行室内培训时,在这些实践期间我发现了一些事情。即使那些面带微笑频 频点头的人也困惑于对很多问题。我发现,多年来在软件开发会议上由我主持的分组 讨论会(后来变成分组讨论会)中,我和其他的演讲者往往是在极短的时间内告诉听 众许多的话题。因此,最后由于听众的水平不同和讲授教材的方式这两方面原因,我可能最 终流失了一部分听众。可能这样要求得太多了,但因为我是传统演讲的反对者之一(而且对 于大多数人来说,我相信这种抵制是因为仄倦),因此我想尽力让每个人都叮以跟得上演讲 的进度。 我曾经一度在相当短的时间内做了一系列不同的演讲。因此,我结束了实践和迭代(一项在 程序设计中也能很好运行的技术)的学习。最后,我使用自u在教学实战中学到的所 有东西发展出一门课程。它以离散的、易消化的步骤以及参与讨论班的形式(最理想的 形式)解决学习问题,并且每一小节课之后都有一些练习。我公司 现在提供 公开的和内部的 培训课程;这是我们主要的介绍性培训课程,为以后更 高级的培训课程提供基础。你可以到网站 上详细了解。(培训课程的 介绍也可以在附带的多媒体光盘中得到。在同样的网站上也可以得到这些消息。) 从每个讨论班获得的反馈信息都可以帮助我去修改和重信制订渫程教材,直到我认为它能够 成为一个良性运转的教学工具为止。不过这本书并不能当作一般的培训课程笔记;我试着在 这些书页中放入尽可能多的信息,并且将它构造成能够引导你顺利进入卜一课题的结构。最 重要的是,这本书是为那些正深入一门新的程序设计语言的单个读者而服务的。 目标 就像我前一本书《 》那样,这本书是围绕着程序设计语言的教学过程而 构建的。特別地,我的目的是要建立一套机制,提供一种在自己课程培训班中进行程序语 教学的方式。当我思索书中的一章时,我思索的是如何在培训班上教好一堂课。我的目标是 切割出可以在合理学时内讲完的篇章,随后是适合在课堂上完成的练习作业。 在这本书中我想达到的目标是 每次只演示个简单步骤的材料,以便你在继续后面的学习之前可以很容易地消化吸 收每一个概念。 使用的示例尽可能的简单、简咚。这样做有时会妨碍我们解决“真实世界”的问题,但 是,我发现对于初学者,通常能够理解例了的每·个细节,而不是理解它所能够解决的问题 范畴会为他们带来更多的愉悦。同样,对于在教室内吸引读者学习的代码数量乜有严柊限制。 正因为这些因素,我将毫无疑问地会遭到使用“玩具般的示例”的批评,但是我乐意接受那 些有利于为教育带来益处的种种事物 蓮慎安排呈现特性的先后顺序,以便使你在看到使用某一主题之前已经接触过它。当然, 不可能总是这样;在这种情况下,将会给出简洁的介绍性描述。 向你提供那些我认为对理解这种程序设计语言来说是很重要的部分,而不是提供我所知 道的任何事情。我相信存在一个信息重要性的层次结构,有一些事实对于%程序员来说 永远不必知道——那些只会困扰人们并且凭添他们对程序复杂性感触的细节。举一个语 言的例子,如果你能够记住操作符优先表(我从未能记住),那么你叮以写出灵巧的代码。 但是你需要再想一想,这样做会给读者维护者带来困惑。因此忘掉优先权,在不是很清楚 的时候使用圆括号就行了。 使每部分的重点足够明确,以便缩短教学时冋和练习时段之冋的时间ε这样做不仅使呖 众在参与讨论班时的思维更为活跃和集中,而且还可以计读者更具有成就感。 给你提供坚实的基础,使你能够充分理解问题,以便转入更困难的课程和书籍中 的 文档 来自于 公司的语言及其类库(可以从 免费費下载), 靴套提供了电子版文档,可使用浏览器阅读。并且实际上,每个丿商廾发的编 译器都有这份文档或一套等价的文档系统。部分出版的书籍也都有这份文档的备份。 所以你或者可能已经拥有了它,或者需要下载;所以除非需要,本书不会再重复那份文档。 因为一般来说,你用浏览器查找类的描述比你在书中查找要快得多(并且在线文档更 可能保持更新)。你仅需要参考“文档”。只有当需要对文档进行补充,以便你能够 理解特定实例时,木书才会提供有关类的一些附加说明。 章节 本书设计时在思想中贯穿了一件事:人们学习语言的方式。讨论班听众的反馈帮助我 了解哪些凼难部分需要解释清楚。对于这个领域,在我突然雄心勃勃并且想涵盖如此多的特 性之处,我渐渐明白——贯穿讲述材料的过程中——如果涉及到许多新特性,你就需要对它 们全部解释清楚,不然这会很容易使学生感到困惑。因此,每次我就费尽大量心思介绍尽可 能少的特怛 因此,本书的目标是每一章只训述一个单一特性,或者是一小组相关特性,而不必依赖于其 他还没有讲述过的特性。这样来你在进入下特性之前就可以消化当前知识背景中的每个 部分。 下面是对本书所含章节的简单描述,它们与我在 讨论班上的授课和练习 时段相对应的。 第亭:象引论 (们应的讲座在光盘上)。这一章是对面向对象的程序设计()的一个综述,包括对什 么是对象这种基本问题的回答,接口与实现、抽象与封装、消息与函数、继承与组合以及 非常重要的多态概念。你也可以概要了解对象生成的问题,例如构造器,对象存在」什么地 方,一日创建好放在什么地方,以及神奇的垃圾回收器(清除那些不再需要的对象)。还会 介绍其他·些问题,包括异常的错误处理,响应用户接∏的多线程以及网络和 你将会知道是什么使如此特别以及它为仆么如此成功 第章:一切都是对象 (相应的讲坐在光盘上)。本章将引导你编写自己的第一个程序。本章开始先综述一 些基木要素:对象引用的概念;基木数据类型和数组的简介;对象的生存空间以及垃圾回收 器清除对象的方式;怎样将中的所有东西归为一种新的数据类聖(类);创建自己类 的基本要素;方法、参数以及返回值;名宇可见性以及从其他类使用组件; 关键字 以及注释和内嵌文档。 第章:控制程序流 (相应的一组讲座在 的光盘上)。本章以讲述引自 的所有 运算符为开始。屴外,你会看到运算符的共同缺点、转型、类型升级以及优先权。接着介绍 基本的控制流程图以及选择操作,这实际上是任何程序设计语言都具有的特性 选 择结构,和 循环结构,用 和 退出循环以及的标注式 和标注式 (这说明在中没有“”),以及 分支选择。尽管材 料大部分具有和代码的相同思路,但还是存在一些不同之处。 第章:初始化和清除 (楣应的讲座在光硗上)。木章首先介绍构造器,它用来确保正确的初始化。构造器的定义 还涉及方法重载的慨念(因为你可能同时需要几个构造器)。随后讨论的是清除过程,它并 非总是如想象般的那么简单。通常地,当你不再使用个对象时,可以不必管它,垃圾回收 器会最终跟随介入,释放对象占据的内存c这部分详细探讨了垃圾回收器以及它的一些特性 本章最后将更近地观察初始化过程:自动成员初始化、指定成员初始化、初始化的顺序 (静态)初始化以及数组初始化等等。 第章:隐减实现细 (相应的访座在光盘上)。本章探讨程序代码被封装到一起的方式,以及为什么类库的某些 部分是暴露的,而有部分则处于隐藏状态。首先要讨论的是 和 关键字, 它们执行文件级别上的封装操作,并允许你构造类厍。然后探讨日录路径和文件名的问题。 本章最后备分讨论 以及 关键字、包内访问的概念以及在不同 场合下使用不同访问控制级别的意义。 第亭:复用类 (相应的训座在光盘上)。复用类的最简单方法是通过组合 )将对象嵌入到 你的新类中。不过,组合不是从已有的类产生新类的唯一方式。继承这个概念儿乎是所有 语言的标准。它是对己有的类加以利用,并为其添加新功能的一种方式(乜可以是修 改它,这是第章的主题)。继承常常用于代码的复用,它通过保留相同的“基类”,并 且只是将这儿或那儿的东西补缀起来以产生你所期望的类型。在这一章中,大家将学习在 中组合和继承是怎样重用代码的,以及具体如何运用它们。 第章:多 应的讲座在光盘上)。如果靠你自己,你可能要花上个月的吋间才能发现和理解多 态,这是的础。通过一些小的、简单的例子,你将会看到如何用继来创建一族类 型,并通过它们共有的基类对该族类型中的对象进行操作。 的多态可以让你同等地对 待同一族中的所有对象,这意味着你编写的大部分代码不必依赖特定的类型信息。这使你的 代码更具灵活性,因此,程序的构建和源代码的维护可以变得更为简单,花费也更少 第章:接口和内部类 提供了专门的工具来建立设计和重用关系:接∏,它是对象接∏的纯粹抽象。 不仅仅只是达到极致的抽象类,由于它允许你通过创建某个可以向上转型到多个基类的类, 因此它也实现了类似于 “多重继承”的变体。 首先,内部类看起来似乎是一种简单的程序代码隐臧机制;你只需将类放置到其他类中。不 过,你将会获悉内部类不仅仅只是这些;它可以知晓外围类并能与之通信。你用内部类编写 的这种代码更优雅、更清晰。不过,它是一个全新的概念,需要花费一些时间才能习惯于用 内部类进行设计。 第章:异常与错误处理 的基本设计哲学是结构不佳的代码将不能运行。编译器会尽可能地去捕获问题,但有 吋某问题—或者是程序员错误,或者作为常执行程序·部分的情形下自然发生的错误 只能在运行时被监测到和被处理。具有异常处理机制用来处理在稈序运行时产生 的任何问题。本章将解释 以及 等关键字在中 是怎样运行的,仆么时刻你应当抛出异常,以及在捕获到它们时应该做些什么。另外,你 还会看到的标准异常,如何创建自己的异常,在构造器中异常会发生什么,以及如何 在异常期间发现异常句柄。 第章:类型检查 当你仅持有一个对某对象基类的引用时, 运行时类犁识别()能让你找出这一对 象的确切类型。通常地,你会需要有意识地忽略对象的确切类型,以便让的动态绑定 机制(多态)能够为那一类型实现恰当的行为。但有时候,当你仅有对某一对象的基类引用 时,能够知道该对象的确切类型则会很冇帮助。通常这些信息可以让你更冇效地执行某些特 殊情况卜的操作。本章还将介绍的反射( )机制。你将会知道和反 射是什么,它们是如何使用的,以及当不再需要时,如何避免使用。 第章:象的集合

...展开详情

评论 下载该资源后可以进行评论 26

Abtswiath丶 不错的东西,谢谢分享。
2019-04-11
回复
zhou20161107 谢谢分享。很好的资料。
2018-01-08
回复
章元_ 下载中断了,再次下载需要评论才可以
2017-12-25
回复
weixin_38720193 入门者,学习一下
2017-11-01
回复
qq_39445019 很好的书,深入浅出
2017-10-24
回复
img

关注 私信 TA的资源

上传资源赚积分,得勋章
相关内容推荐