教育>本科研究生>计算机类
Java程序设计教程(第九版)(英文版)  

Java程序设计教程(第九版)(英文版)  "

作者:JohnLewis(约翰·刘易斯),WilliamLoftus(威廉·洛夫特斯)
ISBN:9787121434327
定价:¥159.0
字数:1423千字
页数:760
出版时间:2022-05
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书对面向对象的思想和机制进行了准确而透彻的剖析,为读者深入学习Java语言程序设计提供了全面、详细的指导,并在前几版的基础上进行了全面的修订与更新。全书覆盖了面向对象设计的广泛内容,介绍了Java语言的基本数据类型、流程控制、类和对象等。本书在深入分析面向对象设计方法的基础上,介绍了封装机制、继承机制和多态性的实现与应用、异常的捕捉和处理、集合类的定义方法与泛型类的概念。书中提供了大量具有可实践性的程序实例、自测题及答案、练习题和编程项目、生动的"软件失误案例”,并且在每章中都补充了针对本章主题的图形用户界面(GUI)设计知识和实例,讲解了如何使用开发工具JavaFX来设计GUI,这部分内容可形成完整的Java GUI设计知识体系。

前言

前 言 欢迎使用本书第九版。多年来,本书能够满足广大师生的需求并为教学服务,这使我们深感欣慰。这一版本做了进一步的内容组织和调整,完善了关键技术问题的重点分解和概念解释。 本版的改进 这一版最大的变化,是彻底重写了书中的“图形设计之路”部分,以充分利用JavaFX API。Oracle已经不再支持Swing。现在,JavaFX 已经成为开发图形和图形用户界面(GUI)的首选方法,因此本书也将采用它。 书中的更新如下: 涵盖JavaFX图形形状。 讲解JavaFX控件,包括按钮、文本框、复选框、单选钮、选项框、颜色选择器、日期选择器、对话框、滑动条及微调器等。 使用Java 8的方法引用和lambda表达式来定义事件处理器。 探究JavaFX的类层次。 解释JavaFX中的属性及属性绑定。 优化了各章末尾的练习题及编程项目。 新增的附录G讲解了JavaFX布局面板。 新增的附录H介绍了JavaFX Scene Builder软件。 关于JavaFX有两个令人激动的部分。首先,它提供了比Swing更清晰的GUI开发方法。用JavaFX开发的程序,会比用Swing开发的更短、更易理解。 其次,与Swing相比,JavaFX更遵循面向对象的核心原则。例如,所有的图形都是用包含基本数据元素的类体现的,比如包含半径值的Circle类。第3章讲解的有关各种形状的类,都是经过精心设计的基本类,只需学生具备对类和对象的基本理解即可。 通过Java 8的方法引用,为定义事件处理器提供了一种容易理解的途径。或者,学生也可以使用(底层的)lambda表达式来定义事件处理器。 关于JavaFX布局面板,在书中的一些示例中解释;有关它的完整描述,在附录G中给出。我们认为,与Swing布局管理器相比,JavaFX布局面板更好,书中的一章里会专门解释。 书中提供的所有GUI都是用Java代码“手工”编写出来的。对于初学者而言,这样做很重要。附录H讲解的是JavaFX Scene Builder软件,它能进行鼠标拖放操作。但是,本书正文中并没有使用它。 除了与JavaFX相关的改变,本书还更新了一些示例和讨论的内容,以满足当今的教学需要。 除了为学生提供本书,我们也很乐意听到读者对本书的评价和疑问。 本书的基石 本书是基于下面的基本思想编写的,相信这有助于使其成为一本优秀的教材。 真正的面向对象。一本真正介绍完全面向对象方法的教材,必须使用对象语言,即所有问题都应该用面向对象的术语来讨论。但这并不意味着必须对第一个程序就讨论多个类和方法的编写方式,学生应当在学会编写对象之前先了解如何使用对象。本书采用一种自然的学习进程,使学生逐步达到具有设计实际的面向对象解决方案的能力。 良好的程序设计实践。本书的主要目的不是教学生如何编程,而是讲解如何写出好的软件,二者是有差别的。编写软件并不是按照说明完成一套动作,一个好程序也远非仅是一些语句的集合。本书汇集了一些可作为良好程序设计技巧基础的实践经验,它们不仅应用于本书所有的实例,而且还将在讨论中进一步强化。学生将学会如何解决问题及如何实现设计方案。全书贯穿了软件工程基本技术的介绍,“软件失误案例”通过生动的实例,展示了不遵守这些程序设计实践原则所带来的后果,进一步复习了软件工程的基本技术课程。 程序示例。学生将通过程序示例来学习。本书通过大量已完整实现的实例来讲解特定的概念。书中穿插列举了易理解的小例子和实用的大例子,二者相辅相成,并对图形和非图形实例的采用进行了合理的选择。 图形与图形用户界面(GUI)。图形能够激发学生极大的学习兴趣,而且图形设计可以充当面向对象应用的绝佳实例。因此,本书每章都安排了精心设计的几部分,称为“图形设计之路”。本书完整讲解了JavaFX API,它提供对Java图形和GUI的全面支持,是首选的开发工具。随着图形设计主题讨论的开展,学生将很自然地学会以适当的方式创建GUI。对于无须涉及图形设计的学生,则可以忽略“图形设计之路”的内容。 各章概述 第1章(计算机系统概述)一般性地介绍了计算机系统,包括计算机基本结构和硬件、网络及编程语言。本章对Java也进行了介绍,并讨论了通用程序开发的基础和面向对象编程。这一章广泛涵盖了学生应该熟悉的开发环境。 第2章(数据与表达式)探讨了Java程序中使用的一些基本数据类型和计算表达式的用法,还讨论了数据类型间的转换,以及如何借助标准的Scanner类与用户进行交互式输入。 第3章(类与对象)讲解了预定义类的使用及其对象的创建方法,这些类和对象用于处理字符串、产生随机数、执行复杂计算和格式化输出。此外还讨论了枚举数据类型。 第4章(编写类)分析了与类和方法的编写有关的问题,包括实例数据、可见性、引用范围、方法参数和返回类型。此外,本章还讨论了封装和构造方法。与编写类相关的其他问题在第6章讨论。 第5章(条件判断与循环)讨论了用于判断的布尔表达式的用法,然后详细地讲解了if语句和while循环语句。一旦建立了循环,就可引入迭代的概念,并进一步讨论用Scanner类不断接收、解析输入数据及读取文本文件的方法。最后,本章介绍了可用于管理大量对象的ArrayList类。 第6章(其他条件判断与循环)讨论了第5章未涉及的其他Java条件语句(switch)和循环语句(do,for),包括for循环语句的增强版本。for-each循环语句也可用于处理迭代和ArrayList对象。 第7章(面向对象设计)进一步深入和扩展了关于类的设计问题的讨论,包括解决问题时需要确定类和对象的识别技术,以及类与对象间的关系。本章还探讨了静态类成员、接口及枚举型类的设计。这一章对方法设计和方法重载也进行了讨论。 第8章(数组)详细讲解了数组及数组的处理,将作为最基本的程序设计数据结构的数组与高层次的对象管理方法进行了对比分析。此外,本章还讨论了命令行实参、可变长度参数表及多维数组。 第9章(继承)讲解了类的派生及其相关概念,例如类层次结构、重写方法和可见性。本章还强调了应合理使用继承,以及在软件设计中使用继承的原则。 第10章(多态性)探讨了绑定的概念及绑定与多态性的关系。接着,讲解了如何使用继承或接口实现多态性,并利用排序示范了多态性。最后,本章讨论了有关多态性的程序设计问题。 第11章(异常)探讨了Java标准库中用于定义异常的类层次结构,以及定义用户异常对象的方法。同时还讨论了处理输入/输出异常时的方法,并分析了一个编写文本文件的程序示例。 第12章(递归)讲解了递归的概念、递归的实现及合理使用递归的方法,并通过几个不同应用领域的程序示例,演示了利用递归技术使某些特定问题解决得更完美。 第13章(集合)介绍了集合的概念及其基本数据结构,并进一步深入探讨了抽象概念和经典的数据结构。此外,本章还介绍了泛型。本章可作为CS2(计算机科学课程第二阶段)的入门内容。 补充资料① 学生的在线资源 书中所有程序的源代码 Java开发环境的链接 在线练习和评估② MyProgrammingLab(编程实验室)可帮助学生全面掌握程序设计的逻辑性、语义和句法。在MyProgrammingLab中,学生可以进行实际的练习并即时获得问题反馈信息,从而提高对一些常用的基本概念和高级程序设计语言范例感到困惑的初学者的编程能力。 MyProgrammingLab是一个辅助学生自主学习和完成课后作业的工具,其中包括配合本书教学内容和组织结构的数百个小型练习题。对于学生,该工具可自动检查学生提交代码的逻辑和语法错误,并提供明确的错误提示信息,帮助学生分析错在何处、为什么出错。对于教师,该工具提供了一个综合性的记分册,可跟踪记录学生的正确答案和错误答案,并可保存学生提交的代码供教师审阅。 MyProgrammingLab提供给本书用户使用,实现该工具的合作方是TC(Turing’s Craft),即CodeLab交互式程序设计训练系统的开发者。通过查看来自教师和学生的反馈信息,或在学习本书内容时使用该工具,可以全面了解MyProgrammingLab的功能和用法。 教师资源③ 下面的补充材料仅供教师使用: 幻灯片文件——使用PowerPoint制作的幻灯片 各章末尾练习题答案 各章末尾编程项目答案 本书特点 重要概念 全书用KEY CONCEPT文本框显示基础概念和重点内容,并在各章末尾对这些概念进行了总结。 程序示例?对所有的程序示例都进行了编号,并在程序后面给出了程序的输出结果、运行实例或者屏幕截图。程序中的代码用不同的灰度进行区分,以突出注释和保留字。 语法流程图?书中以特殊的流程图方式讨论了Java语言的语法元素,语法流程图清晰地描述了一条语句或语句构造的有效格式。Java语言的全部语法流程图在附录K中给出。 图形设计之路?所有关于图形与GUI处理的讨论,都安排在每章的最后几节中,这部分内容称为“图形设计之路”。即使忽略这部分内容,也不会影响本书的完整性。当然,也可以根据需要专门关注“图形设计之路”的内容。每个“图形设计之路”小节的内容,都与其所在章的讨论主题相关。 重要概念小结?每章末尾都给出了该章重要概念的小结。 自测题和答案?每章给出的自测题是对该章建立的基本概念和术语的复习,并且可以使学生评估自己对该章学习内容的掌握程度。自测题答案在附录L中给出。 练习题?这些阶段性的练习题涉及计算、分析或编写代码段,它们要求对本章内容有全面的理解。尽管练习题可能涉及代码编写,但通常并不需要上机实践。 编程项目?编程项目要求设计和实现Java程序,它们的难度各不相同。 MyProgrammingLab?学生可以进行实际的练习并即时获得个性化的问题反馈信息。对于那些对基本概念和高级程序设计语言范例感到困惑的初学者而言,MyProgrammingLab可提高他们的编程能力。 软件失误案例?一些穿插在各章之间的短文,讨论了现实世界中软件设计的种种缺陷,激励学生从编程学习的开始就注意采用良好的软件设计原则。 致谢 非常感激世界各地的教师和学生对本书以前各个版本提出的宝贵意见与建议。我们很高兴地看到教师对学生的深切关心和学生对知识的渴求,并欢迎你们继续对本书给出评价和质疑。 特别感谢Brigham Young大学的Robert Burton为本书提供的热心帮助、深刻见解及对本书的密切关注。多年来,Robert一直不断地提出有助于完善和改进本书的有价值的反馈意见。 在将本书内容更新至JavaFX的过程中,瑞士西部高等专业学院的Bradley Richards提供了有用的建议和资源。Simon Fraser大学的Brian Fraser也提出了一些非常好的反馈意见,有助于澄清一些问题。我们深切感受到,与计算机教育者之间的这种交流,的确非常有益。 感谢Villanova大学的Dan Joyce,是他完成了最初的自测题的编写工作,并确保有足够的自测题覆盖本书中每个相关的主题。 我们不断地惊叹于Pearson Education为本书付出的才智和努力。本书编辑Matt Goldstein具有惊人的洞察力和责任心;他的助手Kristy Alaura一直给我们提供帮助和支持;市场部经理Demetrius Hall使我们确信,教师能够理解和认同本书在教学方法方面的优势;天才设计师Joyce Wells为本书设计了封面;Scott Disanno和Carole Snyder负责本书的印刷流程;Lakeside Editorial Services公司的Louise Capulli是本书的项目经理,她每天都在为我们提供帮助。我们感谢所有确保这本书达到高质量出版标准的人们。 特别要感谢下面这些人,他们通过兴趣小组、访谈、评论等不同方式为本书提供了有价值的建议。他们及其他许多的教师和朋友,都为本书提供过很好的反馈。这些人的名单如下: Elizabeth Adams James Madison University Hossein Assadipour Rutgers University David Atkins University of Oregon Lewis Barnett University of Richmond Thomas W. Bennet Mississippi College Gian Mario Besana DePaul University Hans-Peter Bischof Rochester Institute of Technology Don Braffitt Radford University Robert Burton Brigham Young University John Chandler Oklahoma State University Robert Cohen University of Massachusetts,Boston Dodi Coreson Linn Benton Community College James H. Cross II Auburn University Eman El-Sheikh University of West Florida Sherif Elfayoumy University of North Florida Christopher Eliot University of Massachusetts,Amherst Wanda M. Eanes Macon State College Stephanie Elzer Millersville University Matt Evett Eastern Michigan University Marj Feroe Delaware County Community College, Pennsylvania John Gauch University of Kansas Chris Haynes Indiana University James Heliotis Rochester Institute of Technology Laurie Hendren McGill University Mike Higgs Austin College Stephen Hughes Roanoke College Daniel Joyce Villanova University Saroja Kanchi Kettering University Gregory Kapfhammer Allegheny College Karen Kluge Dartmouth College Jason Levy University of Hawaii Peter MacKenzie McGill University Jerry Marsh Oakland University Blayne Mayfield Oklahoma State University Gheorghe Muresan Rutgers University Laurie Murphy Pacific Lutheran University Dave Musicant Carleton College Faye Navabi-Tadayon Arizona State University Lawrence Osborne Lamar University Barry Pollack City College of San Francisco B. Ravikumar University of Rhode Island David Riley University of Wisconsin (La Crosse) Bob Roos Allegheny College Carolyn Rosiene University of Hartford Jerry Ross Lane Community College Patricia Roth Southeastern Polytechnic State University Carolyn Schauble Colorado State University Arjit Sengupta Georgia State University Bennet Setzer Kennesaw State University Vijay Srinivasan JavaSoft, Sun Microsystems, Inc. Stuart Steiner Eastern Washington University Katherine St. John Lehman College, CUNY Alexander Stoytchev Iowa State University Ed Timmerman University of Maryland Shengru Tu University of New Orleans Paul Tymann Rochester Institute of Technology John J. Wegis JavaSoft, Sun Microsystems,Inc. Ken Williams North Carolina Agricultural and Technical University Linda Wilson Dartmouth College David Wittenberg Brandeis University Wang-Chan Wong California State University (Dominguez Hills) 还要感谢我的朋友和以前在Villanova大学工作的同事,他们提供了很多建设性意见,这些同事包括Bob Beck、Cathy Helwig、Anany Levitin、Najib Nadi、Beth Taddei及Barbara Zimmerman。还要感谢Pete DePasquale,他以前在New Jersey学院工作,现供职于SailThru公司。 还有许多人以各种方式提供了帮助,包括Ken Arnold、Mike Czepiel、John Loftus、Sebastian Niezgoda和Saverio Perugini。在此还要向被我遗漏了名字的所有朋友致以深深的歉意。 美国计算机学会(ACM)的计算机科学教育特别兴趣组(SIGCSE)是一个巨大的教育信息交流机构,他们的会议给来自不同层次与不同类型的学校的教师提供了交流教育新观点、新思路和资源的机会。对于从事某一计算机领域的教育工作者来说,如果还未加入SIGCSE,就会错过参与这种教育信息交流的机会。

目录

目?录 Chapter 1?Introduction?计算机系统概述 1 1.1?Computer Processing?计算机处理过程 2 1.2?Hardware Components?硬件组件 10 1.3?Networks?网络 19 1.4?The Java Programming Language?Java编程语言 26 1.5?Program Development?程序开发 35 1.6?Object-Oriented Programming?面向对象编程 43 Chapter 2?Data and Expressions?数据与表达式 55 2.1?Character Strings?字符串 56 2.2?Variables and Assignment?变量与赋值 63 2.3?Primitive Data Types?基本数据类型 69 2.4?Expressions?表达式 73 2.5?Data Conversion?数据类型转换 81 2.6?Interactive Programs?交互式程序 85 Chapter 3?Using Classes and Objects?类与对象 99 3.1?Creating Objects?创建对象 100 3.2?The String Class?String类 104 3.3?Packages?包 108 3.4?The Random Class?Random类 112 3.5?The Math Class?Math类 115 3.6?Formatting Output?格式化输出 118 3.7?Enumerated Types?枚举类型 124 3.8?Wrapper Classes?包装器类 127 3.9?Introduction to JavaFX?JavaFX简介 129 3.10?Basic Shapes?基本形状 133 3.11?Representing Colors?颜色呈现 140 Chapter 4?Writing Classes?编写类 147 4.1?Classes and Objects Revisited?类与对象的核心概念 148 4.2?Anatomy of a Class?类的分析 150 4.3?Encapsulation?封装 157 4.4?Anatomy of a Method?方法的分析 160 4.5?Constructors Revisited?再论构造方法 169 4.6?Arcs?弧 170 4.7?Images?图形 173 4.8?Graphical User Interfaces?图形用户界面 176 4.9?Text Fields?文本框 180 Chapter 5?Conditionals and Loops?条件判断与循环 191 5.1?Boolean Expressions?布尔表达式 192 5.2?The if Statement?if语句 197 5.3?Comparing Data?数据比较 210 5.4?The while Statement?while语句 214 5.5?Iterators?迭代器 225 5.6?The ArrayList Class?ArrayList类 229 5.7?Determining Event Sources?确定事件源 232 5.8?Managing Fonts?管理字体 234 5.9?Check Boxes?复选框 237 5.10?Radio Buttons?单选钮 241 Chapter 6?More Conditionals and Loops?其他条件判断与循环 255 6.1?The switch Statement?switch语句 256 6.2?The Conditional Operator?条件运算符 260 6.3?The do Statement?do语句 261 6.4?The for Statement?for语句 265 6.5?Using Loops and Conditionals with Graphics?对图形使用循环和条件 271 6.6?Graphic Transformations?图形转换 276 Chapter 7?Object-Oriented Design?面向对象设计 289 7.1?Software Development Activities?软件开发活动 290 7.2?Identifying Classes and Objects?明确类和对象 291 7.3?Static Class Members?静态类成员 293 7.4?Class Relationships?类间关系 298 7.5?Interfaces?接口 310 7.6?Enumerated Types Revisited?再论枚举类型 317 7.7?Method Design?方法设计 320 7.8?Method Overloading?方法重载 331 7.9?Testing?测试 333 7.10?GUI Design?GUI设计 337 7.11?Mouse Events?鼠标事件 338 7.12?Key Events?按键事件 343 Chapter 8?Arrays?数组 355 8.1?Array Elements?数组元素 356 8.2?Declaring and Using Arrays?声明和使用数组 357 8.3?Arrays of Objects?对象数组 368 8.4?Command-Line Arguments?命令行实参 378 8.5?Variable Length Parameter Lists?可变长度参数表 380 8.6?Two-Dimensional Arrays?二维数组 384 8.7?Polygons and Polylines?多边形和折线 389 8.8?An Array of Color Objects?Color对象数组 392 8.9?Choice Boxes?选项框 395 Chapter 9?Inheritance?继承 407 9.1?Creating Subclasses?创建子类 408 9.2?Overriding Methods?重写方法 419 9.3?Class Hierarchies?类层次结构 422 9.4?Visibility?可见性 427 9.5?Designing for Inheritance?继承关系的设计 430 9.6?Inheritance in JavaFX?JavaFX中的继承 432 9.7?Color and Date Pickers?颜色和日期选择器 434 9.8?Dialog Boxes?对话框 438 Chapter 10?Polymorphism?多态性 451 10.1?Late Binding?后绑定 452 10.2?Polymorphism via Inheritance?利用继承实现多态性 453 10.3?Polymorphism via Interfaces?利用接口实现多态性 466 10.4?Sorting?排序 468 10.5?Searching?搜索 477 10.6?Designing for Polymorphism?多态性设计 483 10.7?Properties?属性 485 10.8?Sliders?滑动条 491 10.9?Spinners?微调器 493 Chapter 11?Exceptions?异常 501 11.1?Exception Handling?异常处理 502 11.2?Uncaught Exceptions?未捕获的异常 503 11.3?The try-catch Statement?try-catch语句 504 11.4?Exception Propagation?异常的传递 509 11.5?The Exception Class Hierarchy?异常类层次结构 513 11.6?I/O Exceptions?I/O异常 517 11.7?Tool Tips and Disabling Controls?工具提示与禁用控件 521 11.8?Scroll Panes?滚动面板 525 11.9?Split Panes and List Views?分隔面板和列表视图 528 Chapter 12?Recursion?递归 537 12.1?Recursive Thinking?递归思想 538 12.2?Recursive Programming?递归编程 540 12.3?Using Recursion?递归的应用 544 12.4?Tiled Images?平铺图形 555 12.5?Fractals?分形 559 Chapter 13?Collections?集合 573 13.1?Collections and Data Structures?集合与数据结构 574 13.2?Dynamic Representations?数据结构的动态表示 575 13.3?Linear Collections?线性集合 583 13.4?Non-Linear Data Structures?非线性数据结构 587 13.5?The Java Collections API?Java集合类API 590 Appendix A Glossary?术语表 597 Appendix B Number Systems?数制系统 621 Appendix C The Unicode Character Set?Unicode字符集 629 Appendix D Java Operators?Java运算符 633 Appendix E Java Modifiers?Java修饰符 639 Appendix F Java Coding Guidelines?Java编码指南 643 Appendix G JavaFX Layout Panes?JavaFX布局面板 649 Appendix H JavaFX Scene Builder 659 Appendix I Regular Expressions?正则表达式 669 Appendix J Javadoc Documentation Generator?Javadoc文档生成器 671 Appendix K Java Syntax?Java语法 677 Appendix L Answers to Self-Review Questions?自测题答案 691

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个