前 言 欢迎阅读本书。本书是为初级计算机科学(CS1)Java课程教材而编写的,向教师和学生提供了一些崭新的内容。CS1课程是计算机科学课程的基础。我们的主要目标是调动所有学生学习编程的积极性,无论他们原来的基础如何。学习动机激发学习的兴趣。学习动机和兴趣是学习编程的学生迈向成功的关键因素。本书是50多个学期的成功编程教学课堂记录的综合和结晶。 本书首先介绍了一些简要示例、练习和较长的编程示例。然后,列举了一些大型编程示例,它们构成了本书的主要内容。实际上,本书根据学生的要求提供素材,简单明了并具有较强的可读性。书中的大多数示例取材于课堂中学生的交互练习。 不管从事任何职业,都要求进行反复练习。学习烹饪的学员需要练习如何做出美味佳肴。初学小提琴的学员需要练习如何拉准音调。刚开始学习编程的学员必须练习如何解决问题和编写代码。本书不是一本Java示例书。书中没有简单地列出Java语法,举出示例,而是深入剖析所有概念背后的“原理”。对于首次介绍的每个主题,都阐述了关键问题的“原理”。这种方法对学习Java起到了引导作用。学生只有理解了“原理”后才会激发学习的兴趣。 过去,学习Java的初级编程人员需要掌握一门编程语言的知识。本书不要求学生具备编程经验。不过,需要有一些适当的数学背景,如高等数学的知识。 本书内容 以前Java被视为一种Web编程语言,但现在它已逐渐进入到讲授计算机科学课程的课堂中。目前,很多大学将Java用作初级编程语言课程(CS1)。Java是一种将传统的编程模式(使用非图形用户界面)与现代编程模式(使用图形用户界面(GUI))相结合的编程语言。对于这两种编程模式,本书分别进行了介绍。下面我们将简单概述一下每章的内容,然后讨论如何阅读本书。 第1章简要回顾了计算机和编程语言的历史。读者可以快速浏览并了解计算机硬件和软件方面的一些知识。本章还介绍了如何处理Java程序。另外,还介绍了两种基本的问题解决方案:结构化编程和面向对象设计。 学习完第2章后,学生将会了解Java的基本概念并为编写执行一些计算的复杂程序作好准备。第2章还介绍了本书中的一些常用术语:基本类型变量、引用变量和对象。第3章对这些术语进行了明确的定义和区分,并定制了相应的使用规则。对象是面向对象编程语言的基本实体。这一章进一步说明了对象是如何工作的。由于输入/输出是任何编程语言的基础,因此在第3章首先简单地介绍了其概念,之后进行了详细说明。第4章和第5章介绍了用于更改执行顺序流程的控制结构。 Java具有强大的且简单易用的图形用户界面(GUI)组件,可创建用户友好的图形程序。第6章介绍了各种GUI组件并给出如何在Java应用程序中使用这些组件的若干示例。由于Java是面向对象的编程语言,因此第6章的第二部分讨论了如何使用面向对象的设计方法解决不同的问题并给出了一些示例。 第7章讨论了用户定义的方法。参数传递是任何编程语言的基本概念。在这一章中列举了若干示例,其中包括一些可视图形,以帮助读者理解这一概念。为了将原始对象值作为对象传递,在该章中使用了第6章中所介绍的几个类(附录D列出了有关这些类及如何使用Java程序的详细信息。由于学习第7章可以跨过第6章,因此必要时可以在附录D中查看这些类)。建议没有编程背景的学生多花些时间学习本章。 第8章讨论了用户定义的类。在Java中,类是一种常用的重要元素。类用于创建Java程序、组相关操作,并使用户可以创建他们自己的数据类型。这一章使用大量的可视图形来说明类的对象如何操纵数据。 第9章对数组进行了说明。第10章研究了查找和排序算法。 继承是面向对象设计的一个重要方法。它促进了代码的重用。第11章讨论了继承并举出若干示例以说明如何从现有类派生类。另外,这一章还讨论了抽象类、内部类和组合。 在程序执行期间可以检测到的不希望发生的情况称为异常。例如,被零除是一个异常。Java为处理异常提供了广泛的支持。第12章说明了如何处理程序中的异常。第12章还讨论了事件处理,这一内容在第6章中有简单介绍。 第13章继续第6章的GUI组件的讨论。这一章还介绍了其他GUI组件及如何创建applet。 第14章介绍了递归。并举出若干示例以说明递归方法是如何执行的。 附录A列出了Java关键字。附录B列出了Java运算符的优先级和结合顺序。附录C列出了Unicode字符集的ASCII(美国信息交换标准代码)部分及EBCDIC(扩充的二进制编码的十进制交换码)字符集。附录D列出了如何在Java程序中使用用户定义的类。附录E介绍了本书中常用的Java类。附录F给出了部分练习题的答案。 如何阅读本书 Java是一种非常强大且复杂的语言。除了传统的(非GUI)编程之外,Java还为使用图形用户界面(GUI)创建程序提供了广泛的支持。第3章介绍了输入和输出对话框。第6章介绍了常用的GUI组件,如标签、按钮和文本字段。第13章介绍了更多的GUI组件。 可以采用两种方法阅读本书。一种是综合方法,使用该方法,读者可以边学习基本编程概念和技巧,边学习如何编写非GUI和GUI程序。另一种方法着重于先阐释非GUI编程所使用的基本编程概念,然后再阐释所包含的GUI组件。建议读者分别针对每种方法按以下顺序阅读本书: ● 综合方法:按顺序学习各章。 ● 先学习非GUI编程,然后再学习GUI编程:先按顺序学习第1~5章,然后学习第7~12章和第14章。该方法跳过主要讲述GUI的第6章。学习完第1~5章、第7~12章和第14章后,再回过来学习第6章和第13章,即讲述GUI的章节。 如果选择第二种学习方法,应注意一点,即第8章和第11章中的“编程示例”最初是在未使用任何GUI组件的情况下开发的,其后这些程序被扩展为包含GUI组件。另外,如果读者跳过第6章,就可以跳过第12章的事件处理部分。第14章(递归)列出两个“编程示例”:一个是非GUI应用程序,另一个是使用GUI的程序。如果跳过第6章和第13章,就可以跳过第8章、第11章、第12章和第14章中“编程示例”的GUI部分。在学习完第6章和第13章后,即可学习第8章、第11章、第12章和第14章中“编程示例”的GUI部分。 图1显示了本书各章之间的相互关系。实线箭头表示在学习箭头尾部的章节之前必须学习箭头顶端所指向的章节。虚线箭头表示在学习箭头尾部的章节之前可以不学习箭头顶端所指向的章节。 图1 各章之间的关系图 本书特色 书中的每章都具有下列特色。这些特色对学习本书非常有帮助,并使学生可以按其步调学习本书内容。 ● “本章主要内容”部分介绍了要在本章详细讨论的Java编程概念。 ● “注意”部分重点说明了与章节中所介绍概念相关的重要内容。 ● 200多个可视图形,丰富而详尽地说明了较难理解的概念。 ● 带编号的示例使用相关代码说明了重要概念。为方便引用,对这些示例中的编程代码 进行了编号,并在后面给出“示例运行”。然后解释说明每行代码所执行的操作。 ● “编程示例”部分是完整的程序,在每章末尾列出。这些示例包括“输入”、“输出”、“问题分析”、“算法设计”和“完整程序清单”等各个确切具体的阶段。 ● “快速回顾”部分对每章所涵盖的概念进行了总结。 ● “练习题”部分真正进一步巩固所学知识,确保学生真正掌握章节内容。 ● “编程练习”部分要求学生练习编写一些较复杂的Java程序,并输出特定的结果。 本书从头到尾,通过引导的方式分阶段地介绍了各个概念。本书的编写风格简单直观,与课堂教学风格保持一致。在介绍重要概念之前,先说明必须使用某些元素的原因,然后使用示例和小型程序对这些概念进行阐述。 每章都使用两种类型的程序。第一种类型是小型程序,它们是带编号示例(例如,示例4-1)的一部分并用于解释重要概念。在这些示例中,对每行编程代码都进行了编号。通过“示例运行”列出输出结果,然后逐行分析每个语句。并对每行使用到的原理进行详细讨论。 本书的主要特点是包含了大量的程序分析,称为“编程示例”。这些“编程示例”构成了本书的骨干。 这些程序旨在向读者提供解决问题的方法并使其简单易懂。每个“编程示例”以“问题分析”开始,然后列出“算法设计”。接着用Java对每一步算法编写代码。除了讲授问题解决方法之外,这些详尽的程序还向读者演示了如何将概念应用到真正的Java程序中。本书强烈建议学生认真学习每个“编程示例”,这样才能有效地掌握Java。 每章末尾的“快速回顾”部分使学生巩固所学的知识。学习完一章后,学生可以快速地浏览这一章的要点,然后做后面的“练习题”测试自己所掌握的情况。很多读者认为“快速回顾”是在测验前复习已学章节内容的简单方法。 本书中的所有源代码和解决方案都经过了编写、编译并用Sun Java JDK 1.4进行了测试,这样可以保证这些程序的可靠性。 教学工具 当本书用于教学时可以利用下列补充材料。请参阅书后的“教辅材料申请表”索取相关材料。 电子教学手册。本书附带的教师手册包含以下内容: ● 备课的辅助教学材料,包括对授课主题的建议。 ● 所有各章末尾习题的答案,包括“编程练习”。 ExamView。本书附带的ExamView是一种强大的测试软件包,使用它,教师可以创建并管理笔试、机试(基于LAN)和Internet考试。ExamView包含与本书主题相配套的数百道试题,使学生可以定制一些包含了页面索引在内的详细的学习指南,以供进一步复习使用。这些基于计算机和Internet的考试组件使学生可以通过他们的计算机参加考试,由于每次考试后都能自动进行评分,因此节省了教师的时间。 PowerPoint演示文稿。本书为每章都提供了Microsoft PowerPoint幻灯片。这些幻灯片可作为教学辅助工具供课堂演示使用,使学生可以通过网络查看章节内容,或打印出来在课堂上分发。教师可以制作授课所需的其他主题的幻灯片。 远程教学。Course Technology的得意之作就是在WebCT和Blackboard及它自己的课程增强工具中提供了一些联机课程。当您将联机内容添加到课程中时,将为您添加下列多种功能:自我测试、链接、词汇表,最重要的是它提供了通向21世纪最重要信息资源的途径。无论其在联机还是脱机状态下,我们都希望学生能够充分利用这些课程。如果您想知道有关如何将远程教学引入课程的详细信息,请与当地的Course Technology销售代表联系。 源代码。从上可以找到源代码。运行某些程序所需的输入文件也包含在这些源代码中。不过,应先将输入文件存储在软盘中。 习题答案文件。所有编程练习的习题答案文件可在中找到。运行某些程序所需的输入文件也包含在习题答案文件中。不过,应先将输入文件存储在软盘中。