中文版序Introduction to Java Programming, Comprehension Version, Tenth EditionWelcome to the Chinese translation of Introduction to Java Programming Tenth Edition.The first edition of the English version was published in 1998. Since then ten editions of thebook have been published in the last seventeen years.Each new edition substantially improvedthe book in contents,presentation, organization, examples, and exercises.This book is nowthe#l selling computer science textbook in theUS.Hundreds and thousands of students around theworldhavelearnedprogrammingandproblem solvingusing this book.I thank Dr.Kaiyu Dai of Fudan University for translating this latest edition.It is a greathonor to reconnect with Fudan through this book.I personally benefited from teachings ofmany great professors at Fudan. Professor Meng Bin made Calculus easy with many insightfulexamples.ProfessorLiu Guangqi introduced multidimensional mathematic modeling in theLinear Algebra class.Professor Zhang Aizhu laid a solid mathematical foundation for computerscience in the discrete mathematics class.Professor Xia Kuanli paid a great attention to smalldetails in the PASCAL course.Professor Shi Bole showed many interesting sort algorithms inthe data structures course.Professor Zhu Hong required an English text for the algorithm designand analysis course.Professor Lou Rongsheng taught the database course and later supervisedmymaster's thesis.My study at Fudan and teaching in the US prepared me to write the textbook.The Chineseteaching emphasizes on the fundamental concepts and basic skills, which is exactly I used towrite this book.The book is fundamentals first by introducing basic programming conceptsand techniques before designing custom classes.The fundamental-first approach is now widelyadopted by the universities in theUS.With the excellent translation from Dr.Dai, I hope morestudents will benefitfrom this book and excel in programming and problem solving
I 中文版序I Welcome to the Chinese translation of Introduction to Java Programming Tenth Edition. The first edition of the English version was published in 1998. Since then ten editions of the book have been published in the last seventeen years. Each new edition substantially improved the book in contents, presentation, organization, examples, and exercises. This book is now the #1 selling computer science textbook in the US. Hundreds and thousands of students around the world have learned programming and problem solving using this book. I thank Dr. Kaiyu Dai of Fudan University for translating this latest edition. It is a great honor to reconnect with Fudan through this book. I personally benefited from teachings of many great professors at Fudan. Professor Meng Bin made Calculus easy with many insightful examples. Professor Liu Guangqi introduced multidimensional mathematic modeling in the Linear Algebra class. Professor Zhang Aizhu laid a solid mathematical foundation for computer science in the discrete mathematics class. Professor Xia Kuanli paid a great attention to small details in the PASCAL course. Professor Shi Bole showed many interesting sort algorithms in the data structures course. Professor Zhu Hong required an English text for the algorithm design and analysis course. Professor Lou Rongsheng taught the database course and later supervised my master’s thesis. My study at Fudan and teaching in the US prepared me to write the textbook. The Chinese teaching emphasizes on the fundamental concepts and basic skills, which is exactly I used to write this book. The book is fundamentals first by introducing basic programming concepts and techniques before designing custom classes. The fundamental-first approach is now widely adopted by the universities in the US. With the excellent translation from Dr. Dai, I hope more students will benefit from this book and excel in programming and problem solving
V欢迎阅读本书第10版的中文版。本书英文版的第1版于1998年出版。自那之后的17年中,本书共出版了10个版本。每个新的版本都在内容、表述、组织、示例以及练习题等方面进行了大量的改进。本书目前在美国计算机科学类教材中销量排名第一。全世界无数的学生通过本书学习程序设计以及问题求解。感谢复日大学的戴开宇博士翻译了这一最新版本。非常荣幸通过这本书和复日大学重建联系,我本人曾经受益于复大学的许多杰出教授:孟斌教授采用许多富有洞察力的示例将微积分变得清晰易懂:刘光奇教授在线性代数课堂上介绍了多维度数学建模:张需珠教授的离散数学课程为计算机科学的学习打下了坚实的数学基础:夏宽理教授在Pascal课程中对许多小的细节给予了极大的关注;施伯乐教授在数据结构课程中演示了许多有趣的排序算法;朱洪教授在算法设计和分析课程中使用了英文教材:楼荣生教授讲授了数据库课程,并且指导了我的硕士论文。我在复日大学的学习经历以及美国的授课经验为撰写本书奠定了基础。中国的教学重视基本概念和基础技能,这也是我写这本书所采用的方法。本书采用基础为先的方法,在介绍设计自定义类之前首先介绍了基本的程序设计概念和方法。目前,基础为先的方法也被美国的大学广泛采用。我希望通过戴博士的优秀翻译,让更多的学生从中受益,并在程序设计和问题求解方面出类拔萃。梁勇y.daniel.liang@gmail.comwww.cs.armstrong.edu/liang
V 欢迎阅读本书第 10 版的中文版。本书英文版的第 1 版于 1998 年出版。自那之后的 17 年中,本书共出版了 10 个版本。每个新的版本都在内容、表述、组织、示例以及练习题等 方面进行了大量的改进。本书目前在美国计算机科学类教材中销量排名第一。全世界无数的 学生通过本书学习程序设计以及问题求解。 感谢复旦大学的戴开宇博士翻译了这一最新版本。非常荣幸通过这本书和复旦大学重建 联系,我本人曾经受益于复旦大学的许多杰出教授:孟斌教授采用许多富有洞察力的示例将 微积分变得清晰易懂;刘光奇教授在线性代数课堂上介绍了多维度数学建模;张霭珠教授的 离散数学课程为计算机科学的学习打下了坚实的数学基础;夏宽理教授在 Pascal 课程中对许 多小的细节给予了极大的关注;施伯乐教授在数据结构课程中演示了许多有趣的排序算法; 朱洪教授在算法设计和分析课程中使用了英文教材;楼荣生教授讲授了数据库课程,并且指 导了我的硕士论文。 我在复旦大学的学习经历以及美国的授课经验为撰写本书莫定了基础。中国的教学重视 基本概念和基础技能,这也是我写这本书所采用的方法。本书采用基础为先的方法,在介绍 设计自定义类之前首先介绍了基本的程序设计概念和方法。目前,基础为先的方法也被美国 的大学广泛采用。我希望通过戴博士的优秀翻译,让更多的学生从中受益,并在程序设计和 问题求解方面出类拔萃。 梁勇 y.daniel.liang@gmail.com www.cs.armstrong.edu/liang
译者序Introduction to Java Programming,Comprehension Version, Tenth EditionJava是一门伟大的程序设计语言,同时,它还是基于Java语言从联入式开发到企业级开发的平台。在风起云涌的计算机技术发展历程中,Java的身影随处可见,而且生命力极其强大。1995年,JavaApplet使得Web网页可以表现精彩和互动的多媒体内容,促进了Web的蓬勃发展。之后随看web的发展,应用web成为大型应用开发的主流方式,Java凭借其“一次编译,到处运行”的特性很好地支持了互联网应用所要求的跨平台能力,成为服务器端开发的主流语言。JavaEE至今依然是最重要的企业开发服务器端平台。2004年再次产生了对Web客户端体验的强烈需求,促使富因特网应用技术广泛流行,从JavaWebStart到现在的JavaFx,都是重要的富因特网应用技术。现在我们进入了移动互联网时代,而Java依然是当之无愧的主角。从第一阶段移动互联网中的J2ME,到目前移动操作系统中全球占据份额最大的Android系统上的App开发,都采用的是Java语言和平台。云计算、大数据、物联网、可穿戴设备等技术的应用,都需要可以跨平台、跨设备的分布式计算环境,我们依然会看到Java语言在其中的关键作用。除此之外,Java还是一门非常优秀的教学语言。它是一门经典的面向对象编程语言,拥有优雅和尽量简明的语法以及丰富的实用类库,让编程人员可以尽可能地将精力集中在业务领域的问题求解上。许多开源项目和科研中的原型系统都是采用Java实现的。课堂教学采用的语言同时在工业界和学术领域具有如此广泛的应用,对手学生今后的科研和工作都有直接帮助。我曾经对美国计算机专业排名靠前的儿十所大学的相关课程进行调研,这些著名大学的编程课程中绝大部分选用了Java语言进行教学。在多年前机械工业出版社举办的一次教学研讨会上,我有幸认识原书的作者梁勇(YDanielLiang)教授并进行了交流。那次会议之后我开始在主讲的程序设计课程中采用本书英文版作为教材,在同行和学生中得到了良好反响。作为复且校友,梁教授对中国学生的情况非常了解,书中没有过于嗨的词汇和表达,所以本英文教材非常适合中国学生的英文基础。更重要的是,本书知识点全面,体系结构清晰,重点突出、文字准确、内容组织循序渐进,并有大量精选的示例和配套素材,比如精心设计的大量练习题,甚至在配套网站中有支持教学的大量动画演示。本书采用基础优先的方式,从编程基础开始,逐步引入面向对象思想,最后介绍应用框架,这样很适合程序设计人门的学生。另外,强调面向问题求解的教学方法是本书特色,这也是我在课堂上一直遵循的教学方法。通过生动实用的例子来引导学生学习程序设计课程,避免了枯燥的语法学习,让学生学以致用,并且可以举一反三。程序设计课堂最重要的是要培养学生的计算思维,这对学生综合素质的培养以及其他知识的学习,都是很有神益的。掌握了程序设计的思维,可以很方便地学习和使用其他编程语言。该版本的另一特色是对最新Java语言特色的跟进,即基于Java最新版本8进行介绍。这是Java语言变动非常大的一个版本,比如对JavaFX的全面引入以及并行计算的支持等,都反映了最新的计算机技术和应用特点。相应地,教材也进行了大幅更新。我很荣幸成为本书第10版的译者,让中国的读者可以通过这一最新版本的中文版方便地学习程序设计相关知识
译 者 序I Introduction to Java Programming, Comprehension Version,Tenth Edition Java 是一门伟大的程序设计语言,同时,它还是基于 Java 语言从嵌入式开发到企业级 开发的平台。在风起云涌的计算机技术发展历程中,Java 的身影随处可见,而且生命力极其 强大。1995 年,Java Applet 使得 Web 网页可以表现精彩和互动的多媒体内容,促进了 Web 的蓬勃发展。之后随着 Web 的发展,应用 Web 成为大型应用开发的主流方式,Java 凭借其 “一次编译,到处运行” 的特性很好地支持了互联网应用所要求的跨平台能力,成为服务器 端开发的主流语言。Java EE 至今依然是最重要的企业开发服务器端平台。2004 年再次产生 了对 Web 客户端体验的强烈需求,促使富因特网应用技术广泛流行,从 Java Web Start 到现 在的 JavaFX, 都是重要的富因特网应用技术。现在我们进入了移动互联网时代,而 Java 依 然是当之无愧的主角。从第一阶段移动互联网中的 J2ME,到目前移动操作系统中全球占据 份额最大的 Android 系统上的 App 开发,都采用的是 Java 语言和平台。云计算、大数据、 物联网、可穿戴设备等技术的应用,都需要可以跨平台、跨设备的分布式计算环境,我们依 然会看到 Java 语言在其中的关键作用。除此之外,Java 还是一门非常优秀的教学语言。它 是一门经典的面向对象编程语言,拥 _优雅和尽量简明的语法以及丰富的实用类库,让编程 人员可以尽可能地将精力集中在业务领域的问题求解上。许多开源项目和科研中的原型系统 都是采用 Java 实现的。课堂教学采用的语言同时在工业界和学术领域具有如此广泛的应用, 对于学生今后的科研和工作都有直接帮助。我曾经对美国计算机专业排名靠前的几十所大学 的相关课程进行调研,这些著名大学的编程课程中绝大部分选用了 Java 语言进行教学。 在多年前机械工业出版社举办的一次教学研讨会上,我有幸认识了原书的作者梁勇(Y. Daniel Liang) 教授并进行了交流。那次会议之后我开始在主讲的程序设计课程中采用本书 英文版作为教材,在同行和学生中得到了良好反响。作为复旦校友,梁教授对中国学生的情 况非常了解,书中没有过于晦涩的词汇和表达,所以本英文教材非常适合中国学生的英文基 础。更重要的是,本书知识点全面,体系结构清晰,重点突出、文字准确,内容组织循序渐 进,并有大量精选的示例和配套素材,比如精心设计的大量练习题,甚至在配套网站中有支 持教学的大量动画演示。本书采用基础优先的方式,从编程基础开始,逐步引人面向对象思 想,最后介绍应用框架,这样很适合程序设计人门的学生。另外,强调面向问题求解的教学 方法是本书特色,这也是我在课堂上一直遵循的教学方法。通过生动实用的例子来引导学 生学习程序设计课程,避免了枯燥的语法学习,让学生学以致用,并且可以举一反三。程 序设计课堂最重要的是要培养学生的计算思维,这对学生综合素质的培养以及其他知识的 学习,都是很有裨益的。掌握了程序设计的思维,可以很方便地学习和使用其他编程语言。 该版本的另一特色是对最新 Java 语言特色的跟进,即基于 Java 最新版本 8 进行介绍。这 是 Java 语言变动非常大的一个版本,比如对 JavaFX 的全面引入以及并行计算的支持等,都 反映了最新的计算机技术和应用特点。相应地,教材也进行了大幅更新。我很荣幸成为本 书第 10 版的译者,让中国的读者可以通过这一最新版本的中文版方便地学习程序设计相关 知识
VII在本书的翻译过程中,我得到了原书作者梁勇教授的大力支持。非常感谢他不仅对我邮件中的一些问题进行快速回复和详细解答,还拨写了中文版序,其一丝不苟的学术精神让人感动。感谢机械工业出版社的朱劫编辑,她在本书的整个翻译过程中提供了许多帮助。感谢李艺编辑等其他出版社工作人员以及本书前一版的译者,本书的出版也得益于他们的工作。最后要感谢我的家人在翻译过程中给予的支持和鼓励。由于经验不足和水平有限,书中一定会存在许多间题,敬请得到大家的指正。你们善意的指正,对我和阅读本书的许多读者是有益的。戴开宇2015年4月
VII 在本书的翻译过程中,我得到了原书作者梁勇教授的大力支持。非常感谢他不仅对我邮 件中的一些问题进行快速回复和详细解答,还拨冗写了中文版序,其一丝不苟的学术精神让 人感动。感谢机械工业出版社的朱劼编辑,她在本书的整个翻译过程中提供了许多帮助。感 谢李艺编辑等其他出版社工作人员以及本书前一版的译者,本书的出版也得益于他们的工 作。最后要感谢我的家人在翻译过程中给予的支持和鼓励。由于经验不足和水平有限,书中 一定会存在许多问题,敬请得到大家的指正。你们善意的指正,对我和阅读本书的许多读者 是有益的。 戴开宇 2015 年 4 月
前言Introduction to Java Programming, Comprehension Version, Tenth Edition许多读者就本书之前的版本给出了很多反馈。这些评论和建议极大地改进了本书。这一版从表述、组织、示例、练习题以及附录方面都进行了极大的增强,包括:·用JavaFX取代了Swing。JavaFX是一个用于开发JavaGUI程序的新框架,它极大地简化了GUI程序设计,比Swing更易于学习。。在GUI程序设计之前介绍异常处理、抽象类和接口,若教师选择不教授GUI的内容,可以直接跳过第14~16章。。在第4章便开始介绍对象和字符题串,从而使得学生可以较早地使用对象和字符串来开发有趣的程序。。包含更多新的有趣示例和练习题,用于激发学生兴趣。在配套网站(wwW.Cs.armstrong.edu/liang/intro1Oe/或www.pearsonhighered.com/liang)上还为教师提供了100多道编程练习题。本书采用基础优先的方法,在设计自定义类之前,首先介绍基本的程序设计概念和技术。选择语句、循环、方法和数组这样的基本概念和技术是程序设计的基础,它们为学生进一步学习面向对象程序设计和高级Java程序设计做好准备。本书以问题驱动的方式来教授程序设计,将重点放在问题的解决而不是语法上。我们通过使用在各种应用情景中引发思考的问题,使得程序设计的介绍也变得更加有趣。前面章节的主线放在问题的解决上,引人合适的语法和库以支持编写解决问题的程序。为了支持以问题驱动的方式来教授程序设计,本书提供了大量不同难度的问题来激发学生的积极性。为了吸引各个专业的学生来学习,这些问题涉及很多应用领域,包括数学、科学、商业、金融、游戏、动画以及多媒体等。本书将程序设计、数据结构和算法无缝集成在一起,采用一种实用性的方式来教授数据结构。首先介绍如何使用各种数据结构来开发高效的算法,然后演示如何实现这些数据结构。通过实现,学生获得关于数据结构效率,以及如何和何时使用某种数据结构的深人理解。最后,我们设计和实现了针对树和图的自定义数据结构。本书广泛应用于全球各大学的程序设计入门、数据结构和算法课程中。完全版?包括程序设计基础、面向对象程序设计、GUI程序设计、数据结构、算法、并行、网络、数据库和Web程序设计。这个版本旨在把学生培养成精通Java的程序员。基础篇可用于程序设计的第一门课程(通常称为CS1)。基础篇包含完全版的前18章内容,前13章适合准备AP计算机科学考试(APComputerScienceExam)的人员使用。教授编程的最好途径是通过示例,而学习编程的唯一途径是通过动手练习。本书通过示例对基本概念进行了解释,提供了大量不同难度的练习题供学生进行实践。在我们的程序设计课程中,每次课后都布置了编程练习。?本书中文版将完全版分为基础篇和进阶篇出版,基础篇对应原书第1~18章,进阶篇对应原书第1933章,您手中的这一本是基础篇。一一编辑注
I 前 言 I I Introduction to Java Programming, Comprehension Version,Tenth Edition 许多读者就本书之前的版本给出了很多反馈。这些评论和建议极大地改进了本书。这一 版从表述、组织、示例、练习题以及附录方面都进行了极大的增强,包括: 用 JavaFX 取代了 Swing。JavaFX 是一个用于开发 JaVa GUI 程序的新框架,它极大 地简化了 GUI 程序设计,比 Swing 更易于学习。 在 GUI 程序设计之前介绍异常处理、抽象类和接口,若教师选择不教授 GUI 的内 容,可以直接跳过第 14 丨6章。 在第 4 章便开始介绍对象和字符题串,从而使得学生可以较早地使用对象和字符串 来开发有趣的程序。 包含更多新的有趣示例和练习题 ,用于激发学生兴趣。在配套网站(www.es. armstrong.edu/liang/introlOe/ 或 www.pearsonhighered.com/liang ) 上还为教师提供了 100 多道编程练习题。 本书采用基础优先的方法,在设计自定义类之前,首先介绍基本的程序设计概念和技 术。选择语句、循环、方法和数组这样的基本概念和技术是程序设计的基础,它们为学生进 一步学习面向对象程序设计和高级 java 程序设计做好准备。 本书以问题驱动的方式来教授程序设计,将重点放在问题的解决而不是语法上。我们通 过使用在各种应用情景中引发思 _考的问题,使得程序设计的介绍也变得更加有趣。前面章节 的主线放在问题的解决上,引人合适的语法和库以支持编写解决问题的程序。为了支持以问 题驱动的方式来教授程序设计,本书提供了大量不同难度的问题来激发学生的积极性。为了 吸引各个专业的学生来学习,这些问题涉及很多应用领域,包括数学、科学、商业、金融、 游戏、动画以及多媒体等。 本书将程序设计、数据结构和算法无缝集成在一起,采用一种实用性的方式来教授数据 结构。首先介绍如何使用各种数据结构来开发高效的算法,然后演示如何实现这些数据结 构。通过实现,学生获得关于数据结构效率,以及如何和何时使用某种数据结构的深人理 解。最后,我们设计和实现了针对树和图的自定义数据结构。 本书广泛应用于全球各大学的程序设计人门、数据结构和算法课程中。完全版e包括程 序设计基础、面向对象程序设计、GUI 程序设计、数据结构、算法、并行、网络、数据库和 Web 程序设计。这个版本旨在把学生培养成精通 Java 的程序员。基础篇可用于程序设计的 第一门课程(通常称为 CS1 )。基础篇包含完全版的前 18 章内容,前 13 章适合准备 AP 计 算机科学考试(AP Computer Science Exam) 的人员使用。 教授编程的最好途径是通过示例,而学习编程的唯一途径是通过动手练习。本书通过示 例对基本概念进行了解释,提供了大量不同难度的练习题供学生进行实践。在我们的程序设 计课程中,每次课后都布置了编程练习。 © 本书中文版将完全版分为基础篇和进阶篇出版. 基础篇对应原书第 1 丨8 章. 进阶篇对应原书第丨9 33 章. 您手中的这一本是基础篇。— 编辑注