关闭

关闭

关闭

封号提示

内容

首页 JAVA学习--《java编程思想》《Thinking.In.Java》中文版_950页.pdf

JAVA学习--《java编程思想》《Thinking.In.Java》中文版_950页.pdf

JAVA学习--《java编程思想》《Thinking.In.…

上传者: aimeichao 2011-09-19 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《JAVA学习--《java编程思想》《Thinking.In.Java》中文版_950页pdf》,可适用于IT/计算机领域,主题内容包含译者序《Java编程思想》已经成为了广大Java程序员和爱好者们手中必备的宝典它在广大读者心目中的地位已经无可替代。其作者BruceEckel也已经符等。

译者序《Java编程思想》已经成为了广大Java程序员和爱好者们手中必备的宝典它在广大读者心目中的地位已经无可替代。其作者BruceEckel也已经成为了众多Java程序员顶礼膜拜的大师。随着Java技术的发展以及对Java认识的不断深入BruceEckel推出了《Java编程思想》第三版在这里我们应该向他致敬他不断精益求精、锐意进取的精神正是我们应该努力学习的榜样。随着软件开发技术尤其是Web应用的开发技术的发展Java越来越受到人们的青睐越来越多的企业都选择使用Java及其相关技术例如JEE技术来构建它们的应用系统。但是掌握好Java语言并不是一件可以轻松完成的任务如何真正掌握Java语言从而编写出健壮的、高效的、灵活的程序是Java程序员们面临的重大挑战。《Java编程思想》就是一本能够让Java程序员轻松面对这一挑战并最终取得胜利的经典书籍。本书深入浅出、循序渐进地把我们领入Java的世界让我们在不知不觉中就学会了用Java的思想去考虑问题、解决问题。本书不仅适合Java的初学者对于有经验的Java程序员来说每次阅读本书也总是能够有新的体会这正是本书的魅力所在。本书的第二版由侯捷先生翻译他已经把翻译原著这项工作做到了极致我们在翻译过程中总是诚惶诚恐一方面害怕曲解了原著的意思另一方面也害怕破坏了第二版译著已经做出的让广大中国读者认可本书的种种努力。我们在翻译本书的过程中力求终于原著。对于本书中出现的大量的专业术语尽量遵循标准的译法并在有可能引起歧义之处著上了英文原文以方便读者的对照理解。全书的翻译由陈昊鹏和饶若楠合作完成薛翔、郭嘉和方小丽也参与了全书的翻译工作。由于我们水平有限书中出现错误与不妥之处在所难免恳请读者批评指正。前言我的兄弟托德正准备从硬件工业转移到程序设计领域我曾向他建议下一次技术革命的重点将是基因工程。我们将使用微生物来制造食品燃料和塑料这些微生物不仅能清除污染还能让我们付出比现有少得多的代价就能主宰整个物质世界。我曾以为相比之下计算机革命将显得微不足道。后来我意识到自己犯了科幻小说家常犯的错误:迷信技术的力量(当然这在科幻小说里司空见惯)。有经验的作家都知道故事的重点不是技术而在于人。基因工程将对我们的生活造成深远的影响但它未必就会使计算机革命(或者至少是信息革命)黯然失色因为正是计算机技术推动了基因工程的发展。信息指的是人与人之间的沟通。当然汽车、鞋子、包括基因疗法这些都很重要但它们最终都只是表面现象。人类如何与世界相处才是问题的本质。这个相处的过程就是沟通。本书恰好就是一个例子。很多人认为我很大胆、或者有点狂妄因为我把所有资料都放在网络上。“还有谁会购买呢?”他们这样问。如果我的性格保守谨慎一些我就不会这么做。但是我真的不想再用传统方式来编写一本新的计算机书籍。我不知道这么做会有什么后果但结果表明这是我在写书经历中做过的最明智的一件事。首先人们开始把改正后的意见反馈给我。这是个令人惊叹的过程因为人们仔细检查每个角落、每个缝隙找出技术上和语法上的种种问题让我得以改正所有错误而这些错误单凭我个人是很难觉察到的。人们对这种作法还有些顾虑他们常常说“我并无冒犯之意…”然后扔给我一大堆错误。无疑我自己从未察觉过这些错误。我很喜欢这种集体参与的过程这也使这本书更加特别。这些反馈很有价值所以我使用称为“BackTalk”的系统创建了一些应用来对这些建议进行收集和分类。但是很快我就开始听到“嗯很好。把书做成电子版放到网络上是个好主意可是我希望购买印刷出版并装订成册的书籍”。我曾经作出努力让每个人都能很容易地打印出美观的书籍但这样仍然无法满足人们对印刷书籍的需求。大多数人都不习惯在计算机屏幕上阅读整本书也不喜欢总是带着一捆捆的纸所以即使这些打印出来的书籍再美观也吸引不了他们(而且激光打印机的碳粉并不便宜)。看来即使是计算机革命也难以抢走出版商的生意。不过有个学生提出这也许会在未来成为一种出版模式:先在网络上出版书籍当它引起足够的关注以后才考虑制作纸质版本。目前绝大多数书籍都不赚钱这种新方式或许可以给整个出版业带来更多的利润。在另一方面这本书也带给我一些启迪。开始我认为Java“只不过是另一种程序设计语言”。从许多方面看的确如此。但随着时间流逝以及对Java学习的深入我才开始明白这个编程语言的目的与我所见过的其它语言根本不同。程序设计就是对复杂度的管理。它包括:待解问题的复杂度和所依赖的底层机器的复杂度。正是因为这种复杂度的存在导致了大多数项目的失败。并且据我所知还没有哪个程序设计语言全力将主要设计目标放在“征服程序开发与维护过程中的种种复杂度”上。当然许多编程语言设计时也确实考虑到了复杂度问题但它总是与被视为更本质的问题混在一起。当然那些也都是会让程序员感到困扰的问题。比如C必须向上兼容于C(为使C程序员容易过渡)并具有执行效率高的优点。这两点都很有用并且帮助C取得了成功。不过两者也引入了额外的复杂度使得某些项目无法完成。(当然你可以归咎于开发或管理人员但如果有某种语言可以帮助我们找到错误何乐而不为呢?)VisualBasic(VB)是另一个例子它被局限于BASIC语言(它并不把可扩展能力作为设计目标)这就使得所有堆积于VB之上的扩充功能都造成了可怕且难以维护的语法。Perl也向上兼容于Awk、Sed、Grep、以及其它Unix工具这就导致了被诟病为“能写不能读”的程序代码(也就是说一段时间之后你就无法看懂这些代码)。另一方面C、VB、Perl、Smalltalk之类的编程语言都为复杂度问题付出了相当大的努力在解决特定类型问题的时候非常成功。当我开始理解Java之后印象最深的莫过在Java上体现出的Sun公司的设计目标:为程序员降低复杂度。就好象说:“我们关注的是降低编写健壮代码的困难程度和需要的时间”。以前编写健壮代码将导致性能降低(尽管有许多承诺Java总有一天能够执行得足够快)不过Java的确大大缩短了开发时间相比同等功能的C程序它只需一半甚至更少的时间。只凭这一点就足以省下大量的时间与金钱。不过Java并不仅仅如此。它又持续引入了一些日益重要的复杂任务比如多线程和网络编程。并且通过语言本身的特性和程序库使得这些工作变得轻而易举。最后Java还着眼于某些有着极高复杂度的问题:跨平台程序、动态程序代码联编、甚至安全问题它们都属于复杂度问题的重要方面。所以尽管存在已知的效率问题Java带来的许诺却极其诱人:它能使我们程序员的生产率大大提高。根据我的观察Web是Java影响最深远的地方之一。网络程序设计总是非常困难但Java使它得以简化(Java的设计者仍在努力使它变得更简单)。网络程序设计所关注的就是研究如何让我们用比使用电话更有效率、更廉价的方式进行沟通(单是电子邮件就已经使许多业务领域发生了革命性的变化)。当我们能更有效地进行沟通时奇妙的事情就开始发生这也许要比基因工程所作出的许诺更让人感到神奇。通过所有方式:编写程序、团队开发、设计用户界面(让程序可以和用户交互)、跨平台执行、轻松编写跨互联网的通讯程序等Java扩展了人与人之间的通讯带宽。我认为通讯革命的成果也许不应以海量数据的传输来衡量我们将体会到真正的革命因为我们能更容易和他人沟通:可以是一对一的形式、可以是分组形式、也可以是全球通讯的形式。我曾经听人主张随着足够多的人之间产生了足够多的相互联系下一次革命将会是一种全球化思维的形成。Java可能是、也可能不是这场革命的引线但至少这种可能性使我觉得教授这门语言是一件非常有意义的事情。第版前言这一版的主要目的和大量工作都用在了与Java版保持同步上。不过本书的主旨也更加清楚:使大多数读者通过本书牢牢抓住语言的基本概念以便深入学习更复杂的主题。因为Java还在不断地演化所以重新定义“基础知识”的涵义就很有必要再说本书也不应过在本书第二版我收回这句话:我认为Python语言非常接近这个目标。请参考wwwPythonorg。于面面俱到。这就意味着比如完全重写了“并发”这一章(以前称为“多线程”)它能使你对线程的核心概念有一个基本的了解。没有这一点你就很难理解线程中那些更复杂的概念。我还认识到了代码测试的重要性。如果没有内置的测试框架及相应测试用例并在每次构造系统的时候都进行测试那么你就无法知道代码是否可靠。在本书中为了做到这一点专门编写了单元测试框架用来演示和验证每个程序的输出。这些内容在第章中有介绍里面还解释了ant(Java构建系统的事实标准与make类似)JUnit(Java单元测试框架的事实标准)日志和断言机制(是JDK新引入的)以及对调试和性能分析的介绍。为了涵盖所有这些概念我把这一章命名为“发现问题”里面介绍的内容都是我认为所有的Java程序员都应该具有的基本技能。此外我复查了书中所有的示例并同时问自己:“为什么要用这种方法呢?”。多数情况下我会作出一些修改和润色这样会使例子更贴切同时还有助于演示一些我认为比较好的Java编程实践(至少在比较基础的范围内)。此外我还删除了一些不再有意义的示例并加入了一些新的示例许多已有示例也被重新设计和修改过。全书分为章涵盖了对Java语言的基本介绍。它可以用作基础课程的教材但那些更高级的主题又该如何处理呢?我原计划为本书加入一个新部分专门介绍“Java企业版”(JEE)的基础知识。其中许多章节由我的朋友以及一同授课或开发项目的同事编写他们有:AndreaProvaglio,BillVenners,ChuckAllison,DaveBartlett,和JeremyMeyer。当我把这些新章节的进度和出版日期相对照的时候我就有些担心。并且我注意到前章的篇幅就已经与本书第二版的全部篇幅一样大了。而即使是这个篇幅读者也会经常抱怨。对于本书的前两版读者给予了极高评价当然我也十分欣慰。但有时他们也会抱怨。其中常被提及的就是“这本书太厚了”。在我看来如果这就是你挑出的唯一毛病那真是令人哭笑不得。(这会让人联想到奥地利国王对莫扎特作品的抱怨:“音符太多了”。我并没有任何与莫扎特相比的意思)此外我只能认为发出这种抱怨的人尚未了解Java语言的博大精深也未见识过其它Java书籍。尽管如此我还是在这一版中尽量删减掉那些已经过时或是不那么关键的内容。总之我仔细检查了所有地方在第三版中删除了那些不必要的内容并尽可能作出了修改和润色。这么做我很放心因为本书的前两个版本还可以从网站(wwwBruceEckelcom)上免费下载附在书后的光碟中也有。如果你还需要那些老资料这些地方都能找到。对于作者这样可以减轻很多负担。比如“设计模式”这一章太大了已经可以独立成书:《ThinkinginPatterns(withJava)》(也可以从网站上下载)。在Java的下一个版本(JDK)中预计Sun公司会效法C引入泛型这个新功能。我本来已经决定到时候把本书分为两册以加入新的内容。但有个声音悄悄在问:“为什么要等呢?”。于是我决定在这一版中就这么做于是一切问题迎刃而解。我以前往一本介绍性的书籍塞入了太多内容。这本新书并不是第二卷而是包含了一些高级主题。书名叫《ThinkinginEnterpriseJava》它现在可以从wwwBruceEckelcom免费下载。由于是一本单独的书因此它的篇幅可以随着内容的需要而扩展。与《ThinkinginJava》一样它的目标是向读者提供一本容易理解涵盖JEE技术基础知识的介绍。并为读者能学习更深入的内容做准备。你能在附录C中找到更多说明。对于那些仍然不能忍受本书篇幅的读者我只能说声抱歉。不管你信不信为了让它尽可能薄我已经作了很多努力。先不管书有多厚我认为还有许多替代方式可以令你满意。比如本书有电子版如果你带着便携式电脑的话你可以把电子版放进电脑这样也不会给日常生活带来额外的负担。如果你还想更轻巧些可以使用本书的掌上电脑版本。(有人对我说他喜欢躺在床上打开屏幕的背光看书这样就不会打扰他的妻子。但愿这能帮助他进入梦乡。)如果你一定用纸才能阅读我知道有人一次打印一章然后放在公文包里在火车上阅读。Java,JDKJDK的发布版本以表示本书针对版。尽管这些版本号还是“各自独立”的但JDK或更高版本的标准称呼是“Java”。这表明“旧式Java”(我在本书的第一版中讨论了其中的许多缺陷。)和Java的改进版本之间存在巨大差异后者的缺陷要少得多而且引入了很多优秀的设计。本书针对Java编写尤其是JDK(很多代码不能在以前版本的JDK下编译如果你试图这么做的话构建系统将给出出错信息并终止。)。本书大刀阔斧地删除了一些过时的内容并且重写了语言新引入和改进的部分。那些过时的内容可以在本书的以前版本中找到(可以通过Web或者本书光碟)。此外任何人都可以从javasuncom免费下载JDK也就是说本书针对JDK不会给任何人带来因为升级而造成的经济负担。Java的以前版本在Linux系统上发布的速度稍慢(参见wwwLinuxorg)这个问题正在得到改进针对Linux的新版本与针对其它平台的版本将同时发布现在甚至是Macintosh也开始能跟上Java的新版本。与Java相互配合Linux现在正处于非常重要的发展阶段它正迅速成为市场上最重要的服务器平台因为它快速可靠健壮安全易于维护并且是免费的。这是计算机历史上的一场真正的革命我认为以前的任何工具都没能具备所有这些特征。Java在服务器端编程中占据了重要位置它采用了Servlet和Java服务器页面(JSP)技术这与传统的通用网关接口(CGI)技术相比是一个巨大的进步(相关主题请参考《ThinkinginEnterpriseJava》)。简介“上帝赋予人类说话的能力而说话又创造了人类对宇宙的量度思想”PrometheusUnbound,Shelley人类极其受那些已经成为用来表达他们所处社会的媒介的特定语言的支配。想象一下如果一个人可以不使用语言就能够从本质上适应现实世界语言仅仅是为了解决具体的交流和反映问题时偶尔被使用到的方式那么我们会发现这只能是一种幻想。事实上“真实世界”在很大程度上是不知不觉地创建于群体的语言习惯之上的。摘自“TheStatusofLinguisticsAsAScience”,EdwardSapir。如同任何人类语言一样Java提供了一种表达概念的方式。如果使用得当随着问题变得更庞大更复杂这种表达媒介将会比别的可供选择的语言要更为简单更为灵活。我们不应该将Java仅仅看作是一些特性的集合有一些特性在孤立状态下没有任何意义。如果我们需要考虑设计而不仅仅只是编码那么我们可以将Java的各部分作为一个整体来使用。而且如果要按照这种方式去理解Java我们通常必须理解有关它的问题以及在程序设计时伴随的问题。这本书讨论的是编程问题、它们为什么成为问题以及Java已经采取的用于解决它们的方案。因此我在每章所阐述的特性集都是基于我所看到的这一语言在解决特定类型问题时的方式。按照这种方式我希望能够每次引导你向前前进一点直到Java思想意识成为你自然不过的语言。自始至终我一直持这样的观点:你需要在头脑中创建一个模型用于加强对这种语言的深入理解如果你遇到了疑问你就能够将它反馈给你的模型并推断出答案。前提条件本书假定你对程序设计具有一定程度的熟悉:你已经知道程序是一些语句的集合知道子程序函数宏的思想知道像“if”这样的控制语句和像“while”这样的循环结构等等。不过你可能在许多地方已经学到过这些例如使用宏语言进行程序设计或者使用像Perl这样的工具工作。只要你的程序设计已经到达能够自如地运用程序设计基本思想的程度你就能够顺利阅读本书。当然本书对C程序员来说更容易对于C++程序员更是如此因此即使你没有实践过这两种语言也不要否定自己而应该乐于努力学习(并且伴随本书的多媒体光盘能够带领你快速学习所必需的java基础知识)。不过我还是会介绍面向对象(OOP)的概念和Java的基本控制机制的。尽管经常引用参考C和C++语言的特性但这并不是打算让它们成为内部注释而是要帮助所有的程序员正确看待这些语言毕竟Java是从这些语言衍生而来的。我将会努力简化这些引用参考并且解释我认为一个非CC程序员可能不太熟悉的任何事情。学习Java大概在我的第一本书《UsingC》(OsborneMcGrawHill于年出版)出版发行的同一时候我就开始教授这种语言了。讲授程序设计语言已经成为我的职业了自年以来我在世界各地的听众中看到有的混混欲睡、有的面无表情、有的表情迷茫。当我开始给较小的团体进行室内培训时在这些实践期间我发现了一些事情。即使那些面带微笑频频点头的人也困惑于对很多问题。我发现多年来在软件开发会议上由我主持的C分组讨论会(后来变成Java分组讨论会)中我和其他的演讲者往往是在极短的时间内告诉听众许多的话题。因此最后由于听众的水平不同和讲授教材的方式这两方面原因我可能最终流失了一部分听众。可能这样要求得太多了但因为我是传统演讲的反对者之一(而且对于大多数人来说我相信这种抵制是因为厌倦)因此我想尽力让每个人都可以跟得上演讲的进度。我曾经一度在相当短的时间内做了一系列不同的演讲。因此我结束了实践和迭代(一项在Java程序设计中也能很好运行的技术)的学习。最后我使用自己在教学实践中学到的所有东西发展出一门课程。它以离散的、易消化的步骤以及参与讨论班的形式(最理想的学习形式)解决学习问题并且每一小节课之后都有一些练习。我公司MindView,Inc现在提供公开的和内部的ThinkinginJava培训课程这是我们主要的介绍性培训课程为以后更高级的培训课程提供基础。你可以到网站wwwMindViewnet上详细了解。(培训课程的介绍也可以在附带的Java多媒体光盘中得到。在同样的网站上也可以得到这些消息。)从每个讨论班获得的反馈信息都可以帮助我去修改和重信制订课程教材直到我认为它能够成为一个良性运转的教学工具为止。不过这本书并不能当作一般的培训课程笔记我试着在这些书页中放入尽可能多的信息并且将它构造成能够引导你顺利进入下一课题的结构。最重要的是这本书是为那些正深入一门新的程序设计语言的单个读者而服务的。目标就像我前一本书《ThinkinginC》那样这本书是围绕着程序设计语言的教学过程而构建的。特别地我的目的是要建立一套机制提供一种在自己课程培训班中进行程序语言教学的方式。当我思索书中的一章时我思索的是如何在培训班上教好一堂课。我的目标是切割出可以在合理学时内讲完的篇章随后是适合在课堂上完成的练习作业。在这本书中我想达到的目标是:.每一次只演示一个简单步骤的材料以便你在继续后面的学习之前可以很容易地消化吸收每一个概念。.使用的示例尽可能的简单、简略。这样做有时会妨碍我们解决“真实世界”的问题但是我发现对于初学者通常能够理解例子的每一个细节而不是理解它所能够解决的问题范畴会为他们带来更多的愉悦。同样对于在教室内吸引读者学习的代码数量也有严格限制。正因为这些因素我将毫无疑问地会遭到使用“玩具般的示例”的批评但是我乐意接受那些有利于为教育带来益处的种种事物。.谨慎安排呈现特性的先后顺序以便使你在看到使用某一主题之前已经接触过它。当然不可能总是这样在这种情况下将会给出简洁的介绍性描述。.向你提供那些我认为对理解这种程序设计语言来说是很重要的部分而不是提供我所知道的任何事情。我相信存在一个信息重要性的层次结构有一些事实对于%程序员来说永远不必知道那些只会困扰人们并且凭添他们对程序复杂性感触的细节。举一个C语言的例子如果你能够记住操作符优先表(我从未能记住)那么你可以写出灵巧的代码。但是你需要再想一想这样做会给读者维护者带来困惑。因此忘掉优先权在不是很清楚的时候使用圆括号就行了。.使每部分的重点足够明确以便缩短教学时间和练习时段之间的时间。这样做不仅使听众在参与讨论班时的思维更为活跃和集中而且还可以让读者更具有成就感。.给你提供坚实的基础使你能够充分理解问题以便转入更困难的课程和书籍中。JDK的HTML文档来自于SunMicrosystems公司的Java语言及其类库(可以从javasuncom免费下载)配套提供了电子版文档可使用Web浏览器阅读。并且实际上每个厂商开发的Java编译器都有这份文档或一套等价的文档系统。大部分出版的Java书籍也都有这份文档的备份。所以你或者可能已经拥有了它或者需要下载所以除非需要本书不会再重复那份文档。因为一般来说你用Web浏览器查找类的描述比你在书中查找要快得多(并且在线文档更可能保持更新)。你仅需要参考“JDK文档”。只有当需要对文档进行补充以便你能够理解特定实例时本书才会提供有关类的一些附加说明。章节本书设计时在思想中贯穿了一件事:人们学习Java语言的方式。讨论班听众的反馈帮助我了解哪些困难部分需要解释清楚。对于这个领域在我突然雄心勃勃并且想涵盖如此多的特性之处我渐渐明白贯穿讲述材料的过程中如果涉及到许多新特性你就需要对它们全部解释清楚不然这会很容易使学生感到困惑。因此每次我就费尽大量心思介绍尽可能少的特性。因此本书的目标是每一章只讲述一个单一特性或者是一小组相关特性而不必依赖于其他还没有讲述过的特性。这样一来你在进入下一特性之前就可以消化当前知识背景中的每个部分。下面是对本书所含章节的简单描述它们与我在ThinkinginJava讨论班上的授课和练习时段相对应的。第章:对象引论(相应的讲座在光盘上)。这一章是对面向对象的程序设计(OOP)的一个综述包括对“什么是对象”这种基本问题的回答接口与实现、抽象与封装、消息与函数、继承与组合以及非常重要的多态概念。你也可以概要了解对象生成的问题例如构造器对象存在于什么地方一旦创建好放在什么地方以及神奇的垃圾回收器(清除那些不再需要的对象)。还会介绍其他一些问题包括异常的错误处理响应用户接口的多线程以及网络和Internet。你将会知道是什么使Java如此特别以及它为什么如此成功。第章:一切都是对象(相应的讲座在光盘上)。本章将引导你编写自己的第一个Java程序。本章开始先综述一些基本要素:对象引用的概念基本数据类型和数组的简介对象的生存空间以及垃圾回收器清除对象的方式怎样将Java中的所有东西归为一种新的数据类型(类)创建自己类的基本要素方法、参数以及返回值名字可见性以及从其他类库使用组件static关键字以及注释和内嵌文档。第章:控制程序流(相应的一组讲座在ThinkinginC的光盘上)。本章以讲述Java引自CC的所有运算符为开始。另外你会看到运算符的共同缺点、转型、类型升级以及优先权。接着介绍基本的控制流程图以及选择操作这实际上是任何程序设计语言都具有的特性:ifelse选择结构for和while循环结构用break和continue退出循环以及Java的标注式break和标注式continue(这说明在Java中没有“goto”)以及switch分支选择。尽管材料大部分具有C和C代码的相同思路但还是存在一些不同之处。第章:初始化和清除(相应的讲座在光盘上)。本章首先介绍构造器它用来确保正确的初始化。构造器的定义还涉及方法重载的概念(因为你可能同时需要几个构造器)。随后讨论的是清除过程它并非总是如想象般的那么简单。通常地当你不再使用一个对象时可以不必管它垃圾回收器会最终跟随介入释放对象占据的内存。这部分详细探讨了垃圾回收器以及它的一些特性。本章最后将更近地观察初始化过程:自动成员初始化、指定成员初始化、初始化的顺序、static(静态)初始化以及数组初始化等等。第章:隐藏实现细节(相应的讲座在光盘上)。本章探讨程序代码被封装到一起的方式以及为什么类库的某些部分是暴露的而有一部分则处于隐藏状态。首先要讨论的是package和import关键字它们执行文件级别上的封装操作并允许你构造类库。然后探讨目录路径和文件名的问题。本章最后部分讨论publicprivate以及protected关键字、包内访问的概念以及在不同场合下使用不同访问控制级别的意义。第章:复用类(相应的讲座在光盘上)。复用类的最简单方法是通过组合(composition)将对象嵌入到你的新类中。不过组合不是从已有的类产生新类的唯一方式。继承这个概念几乎是所有OOP语言的标准。它是对已有的类加以利用并为其添加新功能的一种方式(也可以是修改它这是第章的主题)。继承常常用于代码的复用它通过保留相同的“基类”并且只是将这儿或那儿的东西补缀起来以产生你所期望的类型。在这一章中大家将学习在Java中组合和继承是怎样重用代码的以及具体如何运用它们。第章:多态(相应的讲座在光盘上)。如果靠你自己你可能要花上个月的时间才能发现和理解多态这是OOP的基础。通过一些小的、简单的例子你将会看到如何用继承来创建一族类型并通过它们共有的基类对该族类型中的对象进行操作。Java的多态可以让你同等地对待同一族中的所有对象这意味着你编写的大部分代码不必依赖特定的类型信息。这使你的代码更具灵活性因此程序的构建和源代码的维护可以变得更为简单花费也更少。第章:接口和内部类Java提供了专门的工具来建立设计和重用关系:接口它是对象接口的纯粹抽象。Interface不仅仅只是达到极致的抽象类由于它允许你通过创建某个可以向上转型到多个基类的类因此它也实现了类似于C“多重继承”的变体。首先内部类看起来似乎是一种简单的程序代码隐藏机制你只需将类放置到其他类中。不过你将会获悉内部类不仅仅只是这些它可以知晓外围类并能与之通信。你用内部类编写的这种代码更优雅、更清晰。不过它是一个全新的概念需要花费一些时间才能习惯于用内部类进行设计。第章:异常与错误处理Java的基本设计哲学是结构不佳的代码将不能运行。编译器会尽可能地去捕获问题但有时某一问题或者是程序员错误或者作为正常执行程序一部分的情形下自然发生的错误只能在运行时被监测到和被处理。Java具有异常处理机制用来处理在程序运行时产生的任何问题。本章将解释try、catch、throw、throws以及finally等关键字在Java中是怎样运行的什么时刻你应当“抛”出异常以及在捕获到它们时应该做些什么。另外你还会看到Java的标准异常如何创建自己的异常在构造器中异常会发生什么以及如何在异常期间发现异常句柄。第章:类型检查当你仅持有一个对某对象基类的引用时Java运行时类型识别(RTTI)能让你找出这一对象的确切类型。通常地你会需要有意识地忽略对象的确切类型以便让Java的动态绑定机制(多态)能够为那一类型实现恰当的行为。但有时候当你仅有对某一对象的基类引用时能够知道该对象的确切类型则会很有帮助。通常这些信息可以让你更有效地执行某些特殊情况下的操作。本章还将介绍Java的反射(reflection)机制。你将会知道RTTI和反射是什么它们是如何使用的以及当不再需要RTTI时如何避免使用。第章:对象的集合一个程序如果只拥有固定数量的对象并且这些对象的存在时间已知那么这个程序只会是一个非常简单的程序。但是通常情况下你的程序总会在不同的时刻创建出一些新的对象而这些时刻只有在程序运行时才可以知道。此外除非进入运行期否则你无法知道所需要的对象数量以及它们的确切类型。为了解决这个常见的程序设计问题我们需要在任何时间、任何地点创建任何数量的对象。本章深入地探讨Java所提供的集合库:从简单的数组到复杂的容器(数据结构)如Vector和Hashtable以便你在使用它们时可以持有自己所需的一些对象。第章:JavaIO系统理论上你可以将任何程序都分成三部分:输入、处理和输出。这意味着IO(输入/输出)是程序非常重要的一部分。在这一章你将学到Java所提供的各种IO类用于读写文件、内存块以及控制台等。JavaIO的演变以及JDK的新IO(nio)也会给予阐明。此外本节还展示了如何获取一个对象、如何对其进行“流化”操作(使对象可以写入磁盘或通过网络传送)以及如何将其重新构造Java的对象序列化将会为你实现这一切。另外还将讨论Java的压缩库用于Java归档文件格式(JAR)。最后阐述新的优化应用程序接口(API)和正则表达式。第章:并发Java提供了一套内置机制用以支持多个被称为“线程”的并发子任务。这些线程均在单一的程序内运行。(除非你的机器里安装了多个处理器否则这将是多子任务的唯一形式)尽管任何地方都可以应用线程但它大多是被应用于打算创建一个反应灵敏的用户界面的情况举例来说虽然有一些别的任务正在执行但用户仍然可以毫无阻碍地按下按钮或者输入数据。本章会让你在并行程序设计原则中打下坚实的基础。第章:创建窗口和Applet程序Java配套提供了SwingGUI类库它是一系列类的集合能以一种轻便的形式处理窗口。窗口化程序既可以是万维网applet也可以是独立的应用程序。本章将介绍用Swing来创建程序。还展示了Applet签名和JavaWebStart。同时还将介绍重要的“JavaBeans”技术它是创建“快速应用软件开发”(RAD)工具的基础。第章:问题发现程序设计语言检测机制只能让你尽量开发出正确运行的程序。本章介绍一些工具用于解决编译器不能解决的问题。其中向前迈出的最大一步是自动单元测试的合并。对于本书开发了一个自定义的测试系统确保程序输出的正确性而且还介绍了一个实际中的标准JUnit测试系统。开放源码的工具Ant实现了自动构建并且对于团队开发阐述说明了CVS的基本要素。对于运行时的问题报送本章介绍了Java断言机制(这里演示使用的是DesignbyContract)、日志记录API、调试器、剖析器、以及doclets(这些用于帮助发现源代码中的问题)。第章:分析和设计面向对象的模式是一种用于程序设计的崭新的不同以往的思想方式而且很多人在开始学习怎样开发OOP项目时都会遇到问题。一旦你理解了对象这个概念而且随着你学会按照面向对象的方式更深入地思考你就能够开始创建“好的”设计以充分利用OOP提供的好处。本章介绍了分析和设计的思想以及一些解决问题的方法用于在合理时间内开发出好的面向对象程序。本章的主题包括:UML图及相关方法、用例、类职责合作(CRC)卡片、迭代开发、极限编程(XP)、开发和发展可重用的代码的方式以及用于向面向对象程序设计过渡(转化)的策略。附录A:对象的传递和返回尽管在Java中我们和对象会话的唯一方式是通过引用但是将对象传递给方法以及将对象从方法返回的概念还是会有一些有趣的结果。此附录说明当你正进入和离开方法时你需要知道哪些是用来操纵对象的并且还演示了String类的做法它使用的是另外一种解决问题的方法。附录B:Java编程指南这个附录收集了一些我这几年发现和收集到的建议当你进行低层的程序设计和编写代码时能够帮助引导你。附录C:补充以下是一些从MindView处可得到的附加学习材料的说明:.书后面的光盘包含FoundationsforJavaseminaronCD为你学习这本书做好了准备。.HandsOnJava光盘的第版本可以从wwwMindViewnet网站上获取。它是基于本书资料的一张seminaronCD。.ThinkinJavaSeminar。MindView公司一个主要的基于本书资料的介绍性研讨会。其日程安排和注册页面请参见wwwMindViewnet。.ThinkinginEnterpriseJava一本介绍了更先进的Java主题的书适用于企业版程序设计。可以从wwwMindViewnet网站上获得。.JEESeminar向你介绍真实世界Web使能的以及Java的分布式应用这些实际开发。见wwwMindViewnet。.对象设计及系统研讨会。面向对象的分析、设计及技术实现。见wwwMindViewnet。.ThinkinginPatterns(Java版)介绍一些更先进的、关于设计模式和问题解决技术的Java主题。可在wwwMindViewnet网站上获得。.ThinkinginPatternsSeminar。一个基于上述书籍的充满活力的研讨会。日程安排和注册页面可见wwwMindViewnet。.DesignConsultingandReviews。协助你的项目处于良好的状态。附录D:资源列出我发现特别有用的一系列Java书籍。练习在培训班上我发现一些极其简单的例子对学生的完全理解很是有用因此在每一章的最后你都会看到一些习题集。大多数练习设计得都很简单可以让学生在课堂上在合理的时间内完成这些作业以便指导老师在查看时可以确保所有的学生都吸收了教材的内容。有一些题目具有挑战性但并没有难度很高的题目。(我想你应该自己找出这些题目或者更可能的是它们会自动找上门来)。一些经过挑选的练习答案可以在TheThinkinginJavaAnnotatedSolutionGuide的电子文档中找到或者仅需少许费用便可以从wwwBruceEckelcom下载得到。CDROM本书后面配套提供的还有一张光盘。过去我一直反对将光盘附在书的后面因为我感觉支付了一些额外费用去获取大容量CD上的几千字节的源代码不太明智相反更喜欢让人们到我的网站上下载这些东西。不过你将会发现这张CD还有一些不同之处。这张CD不包含本书的源代码而是提供了到wwwMindViewnet网站上的一个超链接(你并不需要链接CD上的地址以获取代码只要直接到那个网站去找寻即可)。这样做的原因是:在CD送往打印时源代码还不完整并且这种方式可以使代码在出现问题的任何时候都能及时得到完善和修正。因为本书的三个版本之间有非常显著的变化所以这张CD包含了HTML格式的本书的第一版和第二版包括因前述理由而在较新的版本中被移除的但是可能在某些情况下对你还是有用的章节。另外你可以从wwwMindViewnet下载本书的当前(第三版)的HTML版本而且它还包含了被发现并被订正了的修订。HTML版本的一个好处是它的索引是超链接的所以对它的内容进行导航要简单得多。不过+兆字节的CD大部分是一个完整的被称为FoundationsforJava的多媒体教程。它包括了ThinkinginC培训班讲座介绍了一些Java所沿用的C语言的语法、操作及函数。此外还包括源自我所开创并讲授的HandsOnJavaseminaronCD第二版的前七章的演讲内容。尽管完整的HandsOnJavaCD曾经只单独出售(第版本的HandsOnJavaCD也是这样你到wwwMindViewnet网站上可以获得)我之所以决定仅包含第二版的前七章是因为它们和该书的第三版相比没有太大变化因此它不仅可以向你提供这本书的基础而且我还希望它还能让你感受到HandsOnJavaCD(第版)的质量和价值。我原本打算让ChuckAllison把作为seminaronCDROM一部分的ThinkinginC创建成一个单独产品不过我还是决定将它和第二版本的ThinkinginC和ThinkinginJava包含在一起这样做是为了让参加培训班的、没有太多C语言基本语法背景的人们具有连贯一致的体验。应该抛开这种思想“我是一个聪明的程序员我不想学习C而想学习C++或Java因此我会跳过C直接到C++Java。”在到了培训班以后这些人渐渐明白对C语言语法很好的理解这个先决条件很有必要。通过本书配套提供的光盘我们相信每个参加培训班的人都能够事先做好充分准备。这张CD也让这本书获得了更多的读者。即使书中第三章(程序控制流)没有介绍Java继承自C的基本部分但是这张CD却进行了很好的介绍而且它要求的学生应该具备的程序设计背景比这本书要求的还要少。并且通过HandsOnJavaCD第二版中相应的讲稿来贯通前七章的资料应该可以帮助你在进入Java的学习之前打下更加扎实的基础。这张CD也期望更多的人能够加入Java程序设计的大军。只有在网站wwwBruceEckelcom上直接订购后才能获得HandsOnJavaCDROM第三版本。源代码本书的所有源代码都可以以保留版权的免费软件的形式得到它们是以一个单一包的形式发布的访问wwwBruceEckelcom网站便可获取。为了确保你获得的是最新版本这个发布这些源代码和本书电子版的网站是一个官方网站。你也可以在其他站点上找到这本电子书籍和这些代码的镜像版本(有一些站点已经在wwwBruceEckelcom列出)不过你应该检查这个官方网站以确保镜像版本确实是最新的版本。你可以在课堂或其他的教育场所发布这些代码。保留版权的主要目的是为了确保源代码能够被正确地引用并且防止在未经许可的情况下在打印媒体中重新发布这些代码。(只要说明是引用了这些代码那么在大多数媒介中使用本书中的示例通常不是问题。)在每个源码文件中都可以发现下述版本声明文字:ThiscomputersourcecodeisCopyrightMindView,IncAllRightsReservedPermissiontouse,copy,modify,anddistributethiscomputersourcecode(SourceCode)anditsdocumentationwithoutfeeandwithoutawrittenagreementforthepurposessetforthbelowisherebygranted,providedthattheabovecopyrightnotice,thisparagraphandthefollowingfivenumberedparagraphsappearinallcopiesPermissionisgrantedtocompiletheSourceCodeandtoincludethecompiledcode,inexecutableformatonly,inpersonalandcommercialsoftwareprogramsPermissionisgrantedtousetheSourceCodewithoutmodificationinclassroomsituations,includinginpresentationmaterials,providedthatthebook"ThinkinginJava"iscitedastheoriginPermissiontoincorporatetheSourceCodeintoprintedmediamaybeobtainedbycontactingMindView,IncValleVistaLaMesa,CaliforniaWayneMindViewnetTheSourceCodeanddocumentationarecopyrightedbyMindView,IncTheSourcecodeisprovidedwithoutexpressorimpliedwarrantyofanykind,includinganyimpliedwarrantyofmerchantability,fitnessforaparticularpurposeornoninfringementMindView,IncdoesnotwarrantthattheoperationofanyprogramthatincludestheSourceCodewillbeuninterruptedorerrorfreeMindView,IncmakesnorepresentationaboutthesuitabilityoftheSourceCodeorofanysoftwarethatincludestheSourceCodeforanypurposeTheentireriskastothequalityandperformanceofanyprogramthatincludestheSourcecodeiswiththeuseroftheSourceCodeTheuserunderstandsthattheSourceCodewasdevelopedforresearchandinstructionalpurposesandisadvisednottorelyexclusivelyforanyreasonontheSourceCodeoranyprogramthatincludestheSourceCodeShouldtheSourceCodeoranyresultingsoftwareprovedefective,theuserassumesthecostofallnecessaryservicing,repair,orcorrectionINNOEVENTSHALLMINDVIEW,INC,ORITSPUBLISHERBELIABLETOANYPARTYUNDERANYLEGALTHEORYFORDIRECT,INDIRECT,SPECIAL,INCIDENTAL,ORCONSEQUENTIALDAMAGES,INCLUDINGLOSTPROFITS,BUSINESSINTERRUPTION,LOSSOFBUSINESSINFORMATION,ORANYOTHERPECUNIARYLOSS,ORFORPERSONALINJURIES,ARISINGOUTOFTHEUSEOFTHISSOURCECODEANDITSDOCUMENTATION,ORARISINGOUTOFTHEINABILITYTOUSEANYRESULTINGPROGRAM,EVENIFMINDVIEW,INC,ORITSPUBLISHERHASBEENADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGEMINDVIEW,INCSPECIFICALLYDISCLAIMSANYWARRANTIES,INCLUDING,BUTNOTLIMITEDTO,THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULARPURPOSETHESOURCECODEANDDOCUMENTATIONPROVIDEDHEREUNDERISONAN"ASIS"BASIS,WITHOUTANYACCOMPANYINGSERVICESFROMMINDVIEW,INC,ANDMINDVIE

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/49
仅支持在线阅读

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部