首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

  “上帝赋予人类说话的能力,而言语又创造了思想,思想是人类对宇宙的量度。”

                  ——摘自《Prometheus Unbound》,Shelley

• 人类……极其受那些已经成为社会表达工具的特定语言的支配。想像一下,如果一个人可以不使用语言就能够从本质上适应现实世界,语言仅仅是解决具体的交流和反映问题时偶尔才用到的方式,我们会发现,这只能是一种幻想。事实上,“真实世界”在很大程度上是不知不觉地基于群体的语言习惯形成的。

                             ——摘自《The Status of Linguistics As A Science》,1929, Edward Sapir

    如同任何人类语言一样,Java提供了一种表达概念的方式。如果使用得当,随着问题变得更庞大更复杂,这种表达工具将会比别的可供选择的语言更为简单、灵活。

  我们不应该将Java仅仅看作是一些特性的集合—有一些特性在孤立状态下没有任何意义。只有在考虑到设计,而不仅仅是编码时,才能完整地运用 Java的各部分。而且,要按照这种方式来理解Java,必须理解在语言和编程中经常碰到的问题。这本书讨论的是编程问题,它们为什么成为问题,以及 Java已经采取什么样的方案来解决它们。因此,每章所阐述的特性集,都是基于我所看到的这一语言在解决特定类型问题时的方式。按照这种方式,我希望能够每次引导读者前进一点,直到Java思想意识成为你最自然不过的语言。

  自始至终,我一直持这样的观点:你需要在头脑中创建一个模型,以加强对这种语言的深入理解;如果你遇到了疑问,就将它反馈到头脑中的模型并推断出答案。

前提条件

  本书假定你对程序设计有一定程度的熟悉:你已经知道程序是一些语句的集合,知道子程序/函数/宏的概念,知道像“if”这样的控制语句和像 “while”这样的循环结构,等等。不过,你可能在许多地方已经学到过这些,例如使用宏语言进行程序设计,或者使用像Perl这样的工具工作。只要你已经达到能够自如地运用程序设计基本思想的程度,你就能够顺利阅读本书。当然,本书对C程序员来说更容易,对于C++程序员更是如此,但是,即使你没有实践过这两种语言,也不要否定自己—而应该更加努力学习。并且,从www.MindView.net处可下载的《Thinking in C》多媒体研讨课能够带领你快速学习所必需的Java基础知识)。不过,我还会介绍面向对象(OOP)的概念和Java的基本控制机制。

   尽管本书可能会经常引用、参考C和C++语言的特性,但这并不是打算让它们成为内部注释,而是要帮助所有的程序员正确看待这些语言,毕竟Java是从这些语言衍生而来的。我会努力简化这些引用、参考,并且对那些我认为一个非C/C++程序员可能不太熟悉的地方加以解释。

学习Java

  大概在我的第一本书《Using C++》(Osborne/McGraw-Hill,1989)出版发行的同一时候,我就开始教授这种语言了。讲授程序设计语言已经成为我的职业了;自 1987年以来,我在世界各地的听众中看到,有的昏昏欲睡,有的面无表情,有的表情迷茫。当我开始给一些小团体进行室内培训时,在这些实践中我发现了一些事情。即使那些面带微笑频频点头的人也对很多问题心存困惑。我发现,多年来在软件开发会议上由我主持的C++分组讨论会(后来变成Java分组讨论会)中,我和其他的演讲者往往是在极短的时间内告诉听众许多话题。因此,最后由于听众的水平不同和讲授教材的方式这两方面的原因,我可能最终会失去一部分听众。可能这样要求得太多了,但因为我是传统演讲的反对者之一(而且对于大多数人来说,我相信这种抵制是因为厌倦),因此我想尽力让每个人都可以跟得上演讲的进度。

  我曾经一度在相当短的时间内做了一系列不同的演讲。因此,我结束了“实践和迭代”(一项在Java程序设计中也得到很好运用的技术)的学习。最后,我根据自己在教学实践中学到的东西发展出一门课程。我的公司—MindView有限公司现在提供公开的室内“Thinking in Java”研讨课;这是我们主要的初级研讨课,为以后更高级的研讨课提供基础。读者可以到网站www.MindView.net上了解详细情况。(初级研讨课在“Hands-On Java”光盘上也能找到。上述网站也可以找到相关信息。)

  从每个研讨课获得的反馈信息都可以帮助我去修改和重新制定课程教材,直到我认为它能够成为一个良性运转的教学工具为止。不过不能将本书视为一般的研讨课笔记;我努力在本书中放入尽可能多的信息,并且合理地组织本书结构,从而引导读者顺利进入下一主题。最重要的是,本书面向那些孤军奋战一门新的程序设计语言的读者。

目标

  就像我前一本书《Thinking in C++》那样,在设计本书时,我脑子里始终思考的一件事情就是:人们学习语言的方式。当我思索书中的一章时,我思索的是如何在研讨课上教好一堂课。研讨课听众的反馈意见帮助我理解了哪些是需要详细阐明的有难度的部分。在某些领域,我一开始雄心勃勃,在其中一下子囊括了过多的特性,后来通过在讲解这些材料的过程中,我逐渐意识到如果要囊括过多的特性,就必须对它们全部解释清楚,而这很容易使学生产生混淆。

  因此,本书的每一章都设法只教授一个特性,或者一小组互相关联的特性,并且不会依赖于还未介绍的概念。通过这种方式,你可以在你当前所掌握的知识背景下,在继续向前学习之前,消化吸收每一部分内容。

在这本书中我想达到的目标是

    1) 每一次只演示一个步骤的材料,以便读者在继续后面的学习之前可以很容易地消化吸收每一个观念。仔细地对特性的讲解进行排序,以使得你在看到对某个特性的运用之前,会先了解它。当然,这并非总是可行的,在那些不可行的情况下,会给出一个简短的介绍性描述。

    2) 使用的示例尽可能简单、短小。这样做有时会妨碍我们解决“真实世界”的问题,但是,我发现对于初学者,能够理解例子的每一个细节,而不是理解它所能够解决的问题范畴,前者通常更能为他们带来愉悦。同样,适合在教室内学习的代码数量也有严格限制。正因为如此,我将毫无疑问地会遭到批评-批评我使用“玩具般的示例”,但是我乐意接受那些有利于为教育带来益处的种种事物。

    3) 向读者提供“我认为对理解这种程序设计语言来说很重要”的部分,而不是提供我所知道的所有事情。我相信信息在重要性上存在层次差别,有一些事实对于95%的程序员来说永远不必知道—那些只会困扰他们并且使他们对程序复杂性平添许多感触。举一个C语言的例子,如果能够记住操作符优先表(我从未记住过),那么可以写出灵巧的代码。但是你要再想一想,这样做会给读者/维护者带来困惑。因此忘掉优先权,在不是很清楚的时候使用圆括号就行了。

    4) 使每部分的重点足够明确,以便缩短教学和练习之间的时间。这样做不仅使听众在亲身参与研讨课时思维更为活跃和集中,而且还可以让读者更具有成就感。

    5) 给读者打下坚实的基础,使读者能够充分理解问题,以便转入更难的课程学习和书籍阅读中。

  根据本书教学本书最初的版本是从一个为期一周的研讨课演变而来的,当时Java还处于初级阶段,因此一周已经足以覆盖Java的语言特性了。随着Java的成长,有越来越多的特性和类库不断地添加了进来,我固执地试图仍旧在一周内教授所有的内容。那时,有一位顾客请我讲课,内容“只包括基础知识”,我教授的过程中,我发现在一周的时间内填鸭式的教授所有的内容,对于我自己和参加研讨课的人来说,都是一种痛苦。Java已经不再是一种可以在一周内教授的“简单”语言了。

  这份精力和感悟在极大程度上促使我对本书进行了重新的组织,现在它已经被设计为可以支撑一个两周的研讨课,或者是一门两学期的大学课程。介绍性的部分在“通过异常处理错误”一章就结束了,但是你可能还想补充了解一些对JDBC、Servlet和JSP的介绍,这些内容构成了另外一门基础课程,即Hands-on Java 光盘的核心内容。本书剩余部分可以组成一门中级课程,即Intermediate Thinking in Java光盘中所包含的材料。这两张光盘在www.MindView.net都有售。

  通过www.prenhallprofessional.com与Prentice-Hall联系,可以得到能够教授本书这些材料的教师信息。

JDK的HTML文档

  Sun公司的Java语言及其类库(可以从java.sun.com免费下载)配套提供了电子版文档,可使用Web浏览器阅读。许多出版的 Java书籍中也都有这份文档的备份。你可能已经拥有了它,或者能够下载;所以除非必要,本书不会再重复那份文档。因为一般来说,用Web浏览器查找类的描述比在书中查找要快得多(并且在线文档更能保持更新)。你仅需要参考“JDK文档”。只有当需要对文档进行补充,以便你能够理解特定实例时,本书才会提供有关类的一些附加说明。

练习

  在研讨课上,我发现一些简单的练习非常利于学生们理解掌握有关概念,因此在每一章的最后都安排了一些习题。

  大多数练习设计得都很简单,可以让学生在课堂上在合理的时间内完成这些作业,以便指导老师检查辅导以确保所有的学生都吸收了教材的内容。有一些题目具有挑战性,但并没有难度很高的题目。

  一些经过挑选的练习答案可以在名为The Thinking in Java Annotated Solution Guide的电子文档中找到,仅需少许费用便可以从www.MindView.net下载得到。

Java基础

  本书还附送可从www.MindView.net处下载的免费的多媒体研讨课。这是《Thinking in C》的研讨课,它介绍了Java语法沿用的C语言中的语法、操作符及函数。在本书以前的版本中,这部分内容收录在随书附送的“Java基础”CD中,但是现在这个研讨课可以免费下载了。

  我原本打算让Chuck Allison把“Thinking in C”创建成一个独立产品,不过我还是决定将它和第2版的《Thinking in C++》,以及第2版和第3版的《Thinking in Java》包含在一起,这样做是为了让参加研讨课的、没有太多C语言基本语法背景的人们能够很方便地找到相关资料。应该抛开这种思想:“我是一个聪明的程序员,我不想学习C,而想学习C++或Java,因此我会跳过C直接到C++/Java。”在到了研讨课上后,这些人渐渐明白,很好地理解C语言语法这个先决条件很必要。

  技术在不断发生变化,将《Thinking in C》重新制作为可下载的Flash形式比将其收录在CD中要更具实际意义。通过在线提供这个研讨课,我可以保证每个人都可以事先做好充足的准备。

  《Thinking in C》研讨课也让本书获得了更多的读者。尽管本书中“操作符”和“控制执行流程”两章覆盖了Java继承自C的基本部分,但是在线研讨课仍旧是更好的介绍,而且它要求学生所具备的程序设计背景比这本书要求的还要少。

源代码

  本书的所有源代码都能以保留版权的免费软件的形式得到,它们是以单一包的形式发布的,访问www.MindView.net网站便可获取。为了确保你获得的是最新版本,这个发布这些源代码和本书电子版的网站是一个官方网站。你可以在课堂或其他教育场所发布这些代码。

  保留版权的主要目的是为了确保源代码能够被正确地引用,并且防止在未经许可的情况下,在出版媒体中重新发布这些代码。(只要说明是引用了这些代码,那么在大多数媒介中使用本书中的示例通常不是问题。) 在每个源码文件中,都包含下述版权声明文字:

  你可以在自己的项目中引用这些代码,也可以在课堂上引用它们(包括你的演示材料),只要保留每个源文件中出现的保留版权声明即可。

编码标准

  在本书的正文中,标识符(方法、变量和类名)排为粗体。大多数关键字也排为粗体,但是不包括那些频繁使用的关键字,例如“class”,因为如果将它们也设为粗体会令人十分厌烦。

  对于本书中的示例,我使用了一种特定的编码格式,此格式尽可能地遵循了Sun自己在所有代码中实际使用的格式,在它的网站上你会发现这些代码(见java.sun.com/docs/codeconv/ index.html),并且似乎大多数Java开发环境都支持这种格式。如果你已经读过我的其他著作,你会注意到Sun的编码格式与我的一致-尽管这与我没什么关系(我了解这一点),但我还是很高兴。对代码进行格式化这个议题常常会招致几个小时的热烈争论,因此我不会试图通过自己的示例来规定正确的格式;我对自己使用的格式有自己的想法。因为Java是一种自由形式的程序设计语言,所以你可以继续使用自己喜欢的格式。编码风格问题的一种解决方案是使用像Jalopy(www.triemax.com)这样的工具来将格式转变为适合你的形式,该工具帮助我撰写了此书。

  本书中打印的代码文件都用一个自动系统进行过测试,应该全部都能够运行,而且无编译错误。 本书聚焦于Java SE5/6,并用它们进行过测试。如果你需要学习本书这一版中没有讨论的Java语言的先前版本,可以从www.MindView.net处免费下载本书的第1版到第3版。

错误

  无论作者使用多少技巧去查找错误,但是有些错误还是悄悄地潜藏了起来,并且经常对新读者造成困扰。如果你发现了任何你确信是错误的东西,请使用在www.MindView.net处可以找到的为本书专设的链接来提交错误以及你建议的修正。对你的帮助我将不胜感激。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论