前言

前言

本书是针对初学者编写的计算机科学和编程入门教程。从最基本的概念入手,每个术语都在首次使用时给出详尽的定义;循序渐进地介绍新概念;将内容广泛的主题(如递归和面向对象编程)分成多个部分,并分多章介绍。

本书简明扼要,每章都只有十几页的篇幅,涵盖了一周的大学课程内容。本书无意全面介绍 Java,只是想让读者了解基本的编程结构和技巧。我们从小问题和基本算法着手,逐步过渡到面向对象设计,用计算机教学术语讲,本书采取的是“迟来的对象”法。

编写理念

本书是基于如下的指导原则编写的。

  • 每次一个概念。对于可能给初学者带来麻烦的主题,将其分成多个部分,让读者无需熟悉整个主题就能将新学到的概念付诸实践。

  • 兼顾 Java 和概念。本书的主要目的并非介绍 Java,而是用代码示例诠释计算机科学概念。大多数章节以 Java 的语言特性开头,以概念结束。

  • 简明扼要。本书的一个重要目标是使篇幅够小,好让读者一个学期就能读完并搞懂本书内容。

  • 突出术语。尽可能少引入术语,并在首次使用时给出术语的详尽定义。在每章末尾,我们还将它们组织成了术语表。

  • 程序开发策略。程序编写策略有很多,包括自下而上、自上而下,等等。我们演示了开发程序的多种方法,让读者能够从中选择最适合的。

  • 多条学习曲线。要编写程序,得理解算法、熟悉编程语言,还要能够调试代码。本书始终在讨论这些内容,同时专辟了一个附录来总结调试建议。

面向对象编程

有些 Java 书一上来就介绍类和对象,有些则先介绍过程性编程,再逐步过渡到面向对象编程。

Java 的很多面向对象功能都旨在解决以前的语言存在的问题,因此,其实现受到了这些历史原因的影响。对于这些功能,如果你不熟悉它们所能解决的问题,就很难理解。

我们每次介绍一个概念,并尽可能将它讲清楚,让读者能够立即将学到的知识付诸实践。在这个前提之下,我们会尽早地介绍面向对象编程,因此,你不可能翻开本书就接触到这个主题。

然而,如果不使用面向对象功能,根本就无法编写 Java 程序,哪怕是简单的 Hello World 程序。对于有些功能,我们会在首次提及时简要地介绍一下,再在后面作更深入的讨论。

本书几乎涵盖了“AP Java subset”中的每个主题,非常适合用来备考 AP 计算机科学 A 考试(包括面向对象设计和实现)。我们的网站 http://thinkjava.org 中列出了本书各节与 AP 课程最新描述的对应关系。

附录

本书适合按顺序逐章阅读,因为每一章都以前一章的内容为基础。本书还有三个附录,你可在任何时间阅读。

  • 附录 A(开发工具)

    编译、运行和调试 Java 代码的步骤随开发环境和操作系统而异,我们没有将这些细节放在正文中,因为这会分散读者的注意力。相反,我们专辟了附录 A,简要地介绍 DrJava——一个非常适合初学者使用的集成开发环境(interactive development environment,IDE),以及用于检查代码质量的 Checkstyle 和用于测试的 JUnit 等工具。

  • 附录 B(Java 2D 图形)

    Java 提供了处理图形和动画的库,这些主题可能对学生很有吸引力。这些库涉及面向对象功能,读者可能阅读完前 11 章才能完全理解,但可以很早地使用它们。

  • 附录 C(调试)

    有关调试的建议遍布全书,我们将这些调试建议收集到了附录 C 中。建议读者在阅读本书的过程中反复温习该附录。

使用代码示例

本书的示例代码大都可在 Git 仓库 https://github.com/AllenDowney/ThinkJavaCode 中找到。Git 是一个版本控制系统,让你能够跟踪项目中的文件。受 Git 控制的文件集合称为“仓库”。

GitHub 是一种托管服务,为 Git 仓库提供存储空间,还提供了方便的 Web 界面。它提供了多种处理代码的方式。

  • 单击 Fork 键可以在 GitHub 上创建仓库的副本。如果你没有 GitHub 账户,就需要创建一个。建立分支后,你便在 GitHub 上有自己的仓库了,可用它来跟踪你编写的代码。然后,还可以“克隆”这个仓库,即将文件的副本下载到计算机。

  • 你也可以在不建立分支的情况下克隆仓库。这样就不需要 GitHub 账户了,但也无法将所做的修改保存到 GitHub 中。

  • 如果你根本不想使用 Git,可用 GitHub 页面上的 Download ZIP 按钮下载 ZIP 格式的代码,也可通过链接 http://www.tinyurl.com/ThinkJavaCodeZip 下载。

克隆仓库或解压 ZIP 文件后,你将看到一个名为 ThinkJavaCode 的目录,其中包含与本书每章对应的子目录。

本书中的所有示例都是用 Java SE Development Kit 8 开发和测试的。如果你使用的是更新的版本,这些示例也能正确地运行;但如果你使用的是更早的版本,有些示例可能无法正确地运行。

排版约定

本书使用了下列排版约定。

  • 楷体

    表示术语或重点强调的内容。

  • 等宽字体(constant width

    表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

  • 加粗等宽字体(constant width bold

    表示应该由用户输入的命令或其他文本。

Safari® Books Online

Safari Books Online(http://www.safaribooksonline.com)是应运而生的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。技术专家、软件开发人员、Web 设计师、商务人士和创意专家等,在开展调研、解决问题、学习和认证培训时,都将 Safari Books Online 视作获取资料的首选渠道。

对于组织团体、政府机构和个人,Safari Books Online 提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问 O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology 以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解 Safari Books Online 的更多信息,我们网上见。

联系我们

请把对本书的评价和问题发给出版社。

美国:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中国:

  北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)

  奥莱利技术咨询(北京)有限公司

O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:

  http://shop.oreilly.com/product/0636920041610.do

对于本书的评论和技术性问题,请发送电子邮件到:

  bookquestions@oreilly.com

要了解更多 O'Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:

  http://www.oreilly.com

我们在 Facebook 的地址如下:http://facebook.com/oreilly

请关注我们的 Twitter 动态:http://twitter.com/oreillymedia

我们的 YouTube 视频地址如下:http://www.youtube.com/oreillymedia

致谢

很多人提出了勘误和建议,这里要特别感谢他们的宝贵反馈!

  • Ellen Hildreth 在威尔斯利女子学院讲授数据结构时,曾将本书作为补充读物,她指出了一大堆错误,还提出了一些很不错的建议。

  • Tania Passfield 指出有些术语表包含了正文中没有出现的术语。

  • Elizabeth Wiethoff 注意到 exp(—x2) 的级数展开不对,并审阅了本书的 Ruby 版。

  • Matt Crawford 发来了一个包含大量勘误的文件。

  • Chi-Yu Li 指出了一个代码示例的输入错误和编程错误。

  • Doan Thanh Nam 更正了一个示例。

  • Muhammad Saied 在将本书翻译成阿拉伯语的过程中发现了多个错误。

  • Marius Margowski 发现有个代码示例存在不一致的问题。

  • Leslie Klein 发现了 exp(—x2) 的级数展开中的另一个错误,指出了 Card 数组示意图中的输入错误,并就如何让几个练习更清晰提出了很有帮助的建议。

  • Micah Lindstrom 指出了六七个输入错误,并给出了更正建议。

  • James Riely 将本书电子版从 LaTeX 格式转换成了 Sphinx 格式:http://fpl.cs.depaul.edu/jriely/thinkapjava/

  • Peter Knaggs 将本书转换成了 C# 版:http://www.rigwit.co.uk/think/sharp/

  • Heidi Gentry-Kolen 拍摄了多个以本书为教材的教学视频:https://www.youtube.com/user/digipipeline

这里要特别感谢技术审阅人 Blythe Samuels、David Wisneski 和 Stephen Rose。他们找出了错误,提出了很多宝贵建议,让本书的质量得到了极大的提高。

另外,感谢以下人员发现并指出了输入错误:Stijn Debrouwere、Guy Driesen、Andai Velican、Chris Kuszmaul、Daniel Kurikesu、Josh Donath、Rens Findhammer、Elisa Abedrapo、Yousef BaAfif、Bruce Hill、Matt Underwood、Isaac Sultan、Dan Rice、Robert Beard 和 Daniel Pierce。

如果你有其他建议或看法,请发送到 feedback@greenteapress.com。

电子书

扫描如下二维码,即可购买本书电子书。

目录