Java程序设计对象和软件工程方法 (原书第2版)
作者 : David D. Riley
译者 : 苏钰涵 徐红梅 王 琦 等
丛书名 : 计算机科学丛书
出版日期 : 2007-02-01
ISBN : 7-111-19989-2
定价 : 58.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 432
开本 : 16开
原书名 : The Object of Java Introduction to Programming Using Software Engineering Principles
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书采用一种“以对象为中心”的教学方法,使学生深刻地领会用Java编程的强大能力。本版充分结合了Java 5.0的特性,使用Java的AWT和Swing类,为学生掌握必要的技能和技术提供了实践的机会,而这些技能和技术正是现代软件开发的基石。
  本书特点:
  ● 更加强调对象 从一开始就围绕着对象这个主题讲解。书中提供大量示例和练习,并阐述了面向对象编程如何应用于软件工程。
  ● 以软件工程为重点 将软件工程编程技巧贯穿到所讨论的每一个主题中。结合统一建模语言 (UML)、基于模式的编程以及前置条件和后置条件。
  ● 新的Java 5.0特性 Java的这个升级版本有很多优点,包括使用泛型、断言语句、枚举数据类型、Scanner类等等,本书涉及了这些内容,另外还对for循环语句做了深入讨论。
  ● Swing和AWT 本书第1版依赖于Java的一些“实用”外部类,本版仍保持这个特点,并有所改进,另外还简要地介绍带图形用户界面 (GUI) 的应用。
80余个完整的程序示例。

图书特色

图书前言

Java已成为现代软件开发的一个得力工具。因此,我们将这本书也精心设计为指导现代软件开发的一个工具。不论是Jave还是本书,二者都有着面向对象范式所赋予的强大能力,并适当地结合可靠的软件工程实践方法。本书的目标是介绍编程技术、可以为将来在计算机科学领域的学习打下坚实的基础。
  本书面向计算机科学专业的学生,可以作为编程导论课程(IEEE/ACM Curriculum 2001称这些课程为CS101或CS111)的教材。本书不要求读者以前写过计算机程序,重要的是要有一定程度的分析综合能力。只要学过三年的高中数学,就完全可以理解本书使用的记法。
  本版的新特点
  使用AMT和Swing
  本书第1版主要依赖于作者提供的一个图形类类库。在Java 5中,使用标准Java类库就能非常容易地展示有关内容。基于这个变化,学生们不必再花时间去学习非标准的软件。本书仍然保留第1版采用的基本方法;本版还是会大量使用外部类,另外简单地介绍涉及GUI的应用,不过现在使用的是AWT和Swing类。
  完全使用Jave 5
  本版充分结合Java 5的一些特性,在导论性质的编程课程中,这些特性极为重要。
  泛型(Generics):Java5的一个重要改进就是引入了泛型数据类型。现在包和列表容器可以适当地定义为Bag ItemType和SimpleList ItemType,而不是BagOfObject和SimpleListOfObject。这就能提升数据容器的适用性。并且能显著提高类型安全性。
  自动装箱(Autoboxing):本版会展示Java 5对自动装箱和自动拆箱的支持。我们还是会介绍包装器类,不过由于Java 5中引入了自动装箱等重要的新语言特性,所以在包装器类上我们不再过多赘述。
  枚举: 许多编程语言中都有枚举数据类型,现在Java也开始支持枚举数据类型。在讨论如何编写你自己的类时,我们会介绍这个新的语言特性。另外还会介绍内置的ordinal和name方法,许多代码示例中都会用到枚举类型。
  for循环:for循环已经得到改进,提供一种特殊版本来迭代处理集合。这种形式的循环是表述简单容器处理的一种更高级的方式。我们将针对列表和数组来讨论该版本的for语句。另外还会讨论这种特殊版本for语句的限制。
  assert语句:以assert语句形式提供可测试的断言,这是一个重大的语言改进。在此会讨论assert语句,另外第7章介绍逻辑和选择时还会讨论assert对调试有何作用。
  Scanner:java.util.Scanner是一个新增的类,它采用一种改进的类型安全方式,可以将文本形式的基本类型直接量转换为基本类型值。本书利用这个类来显示如何完成String、JTextField和文件的转换。使用Scanner可以更方便地处理基本类型的GUI输入。
  更多地注重以对象为中心
  本书的核心一直是面向对象。为了更清楚地反映这一点,第1章首先提供一些基本的例子,展示多个类的使用。这里我们没有举传统的“hello world”例子,而是分析一个模拟机器人小车的程序,这个程序更具面向对象特性。另外对第1版中的第2章和第3章也做了修改,阐述如何在适当的面向对象(OO)上下文中应用软件工程。
  改进正交性
  我们会竭尽所能让书中的示例类与Java标准一致。在此对文档稍有修改,从而能更好地用javadoc工具显示。包和列表类现在继承自标准Java接口,仍使用同样的hasNext、next、add和remove方法。前置条件和后置条件已经使用UML对象约束语言(Object Constraint Language)记法进行了重写。
  更多完整的程序
  要通过例子来学习编程。本书第1版的特点之一是其中包括70多个完整的程序。在本版中,完整的程序超过80个。其中新增的一些例子相当长,完全可以作为案例分析使用。
  面向对象和Java
  按James Gosling和Henry McGilton所说,“要想在日渐复杂的基于网络的环境中发挥作用,编程系统必须适应面向对象概念”。把重点放在面向对象上,这不仅要求要有一个“对象为先”的课程;还需要一种以对象为中心的方法。软件类、方法、继承和事件驱动代码在当今编程系统中应该像变量、循环和数组一样平常。以对象为中心的方法并不只是罗列对象术语,它寻求的目标是让软件开发人员能够采用面向对象思维。
  以对象为中心的方法的优势之一在于它能兼容原来的命令式和函数式范式。要使用面向对象编程(object-oriented programming,OOP),程序员仍然必须编写赋值指令、传递参数、从函数(非void方法)返回值,还要熟练掌握所有基本控制结构。这说明,学生从OOP转向其他编程范式时,不会像从其他编程范式转向OOP时那样困难。
  多年以来,我们一直在编程导论课程中使用OO方法,并积累了很多经验,本书的思想和方法就是基于这些经验得来的。最近,教师们已经开始使用Java编程语言。Java很适合入门课程,因为它采用一个合理的对象模型实现,而且不论是在学术界还是专业领域中Java都很常用。Java还有一个突出的好处,更使它增色不少:它采用类似于C的记法。这对于将来可能使用C、C++或C#的学生很有帮助。正如Gosling和McGilton所说,“Java编程语言的最初设计就是面向对象的”。
  强调软件工程
  就像完成好的作品一样,要想编写好的程序,需要有一定的技能,还要有一些准则。软件工程的指导原则和技术对于培养这种技能、建立有关准则至关重要。可以清楚地看到,本书自始至终都以软件工程为重点,特别是在阐述正确的软件工程技术时涵盖以下特点。
  软件工程提示
  各章分布有许多软件工程提示。这些软件工程提示提供了一系列软件开发人员“最佳实践”。软件工程提示可能建议一个语言构造采用什么格式来得到好的编程风格,也可能解释有经验的程序员如何解决一个常见的设计问题。
  契约式编程
  OOP充分展现了规范的重要性。方法的前置条件和后置条件以及类不变式对于表述代码的行为特别重要。我们会不断使用这些断言来描述例子,并定义示例类。契约式编程将在第2章介绍,并在后面经常使用。另外还讨论了逻辑表达式、循环不变式和特殊的断言记法。这种形式的类规范都以HTML格式提供。
  模式
  软件工程的设计模式原则提醒我们:软件开发技巧通常基于我们对常用结构的记忆。本书拓展了这种思想,在此包括经常遇到的代码表达式、指令和算法的模式以及作为编程模板的设计模式。本书强调这些模式是为了使读者能熟悉经常需要的解决方案,并了解如何使用以及何时使用。
  软件测试
  测试在所有好的软件工程模型中都是不可或缺的。我们专门用一些章节介绍测试,确保读者掌握基本的调试技能,并了解简单路径测试和黑盒测试。
  Java检查员
  软件工程研究得出一个结论:最有用的测试形式是非正式的桌面检查、代码审查和走查(walkthrough)。这些实践要求对“检查什么”、“审查什么”以及如何“走查”有基本的了解。每一章最后都有“Java检查员”一节来提供这些信息,这些小节不仅回顾各章的要求,还提供一些实用的解决策略(即“如何解决”)。
  UML
  图在面向对象设计和编程中起着关键的作用。本书穿插大量对象图来说明计算的运行时特性。还加入很多类图展示一个类的可见接口,并通过图来描述各个类之间的关系。另外,还提供了活动图显示控制流。
  为了遵循软件工程主题,本书严格采用统一建模语言(Unified Modeling Language,UML)作为绘图记法。通过使用UML图,可以为学生展示已经在软件开发行业成为标准的记法。书中使用UML的一个子集,这在附录E中做了总结。
  内容组织
  我们在CS1课程中讲授OOP,并从中得到许多教训。无可置疑,最重要的一个发现就是:要以适当的顺序组织内容,这一点相当重要。当前,编程课程的讲授时间往往很少;每一分钟都不能浪费。我们做了很多尝试,根据不同的体验,最后以最利于学习的顺序来组织本书内容。
  你可能会注意到,本书的目录很特别。由于我们采用以对象为中心的方法,这要求尽可能早地介绍关键的面向对象内容,以便在书中适当地应用。
  第1章首先对类和对象进行简要的概述,概要介绍将要讨论的要点。该章使用一个面向对象示例程序来展示一些基本的记法和软件开发工具(编辑器、编译器和虚拟机),使读者对软件开发的一般过程有一个简单的认识。这一章的内容完全可以用一个课时讲完。
  以对象为中心
  第2章首先介绍基本的面向对象构造:方法调用。该章展示如何在对象上执行方法,然后分析这些指令的简单序列。我们还介绍对象的声明、实例化和赋值,并提供一个有助于展示对象绑定的代码模式:交换算法。该章还谈到编写初始程序所需的所有Java工具。
  早期O-O策略
  本书只有第3章混合了多方面的内容,其中包括一些基本软件设计技巧,还介绍一些额外的语言功能。在该章中,读者会看到在OOP上下文中解决编程问题的一种原型策略。假设每个学生刚开始都要写一些程序,原型策略有助于回答“从哪里开始”之类的问题。第3章还讨论了其他一些基本的软件开发技巧,如选择合适的标识符名,以及使用输出指令(System.out.println)来帮助调试。
  方法
  方法调用是OOP的主要指令,在第1章和第2章引入,并在第4章详细讨论。第4章还介绍如何创建方法,包括参数传递、局部变量和非void方法等问题。
  基本类型
  只有当读者对前4章中的对象、类和方法等内容有了一定的认识,我们才在第5章转向基本数据类型。我们发现,稍晚一些讨论基本类型(如数值表达式)可以避免早期的分心。通过这种方法,使得读者在遭遇Java采用非面向对象方式处理数字等问题之前,能相当轻松地处理引用数据。稍晚介绍基本类型还有一个好处,可以把基本类型变量看作是面向对象环境中的异类(尽管是合理的异类)。以后不会再花时间介绍基本类型表达式,这非常有利于学生熟悉引用数据/对象。
  编写供应者类
  在编写利用其他类的客户代码和编写这些外部类的供应者端代码之间看来存在显著的认知差异。第6章就是要帮助读者划清这个界限。该章不仅指出有关的设计决策,如一个特定方法要放在哪个类中,而且分析了适当的信息隐藏和封装的重要性。
  控制结构
  为什么不在第7章之前介绍选择和循环呢?答案是,较晚讨论这些控制结构能更早地讨论面向对象主题,因此能更多地在课程中使用面向对象。由于较晚地介绍控制结构,之前会很明显看出需要大量使用if指令和while循环等控制结构,相应地学生们会急切地学习这些有用的内容。在面向对象模型中,控制结构不再是编程技巧中的核心部分。不过,选择和重复仍然是很重要的编程工具,我们发现这样安排可以使学生充分接触有关内容,掌握这些构造。
  较晚介绍选择和重复也是可能的,部分原因在于代码是事件驱动的。通过快速查看本书中的编程作业和示例,你就会相信,即使没有选择指令或循环,也完全有可能编写出有趣而且有难度的程序。
  采用事件驱动编程还有其他一些好处。事件驱动代码与OOP很自然地相辅相成。我们可能都已经习惯了按钮、菜单和滚动条的行为(依赖于事件驱动控制)。实际上,对于伴随着图形用户界面成长起来的人来说,程序控制模型可能很糟糕。
  继承
  面向对象工具和技术的核心内容分3个阶段介绍:
  1. 利用对象、类和方法(第1~4章)
  2. 编写供应者端代码(第6章)
  3. 使用继承(第8~9章)
  较早介绍继承可能很好,但是我们发现,从大概课程一半的时候开始介绍继承效果最好,最为成功。采用这种时间安排,就能有足够的机会在许多课程项目中使用继承。
  容器—包括数组
  第11章力图把容器类的问题与数组的特定概念(第12章)区别开。列表固有的顺序特性使之比直接访问容器(如数组)更易于使用。更重要的是,列表是用面向对象方法实现容器(数据结构)的一个更好的例子。由于Java在语言中集成了数组记法,所以数组看上去与其他对象有所不同。第11章还涵盖泛型、Object类、包装器类等内容,并且讨论了一种很适用于列表的排序算法(插入排序)。
  各章的顺序依赖关系
  尽管在我们学院按照本书的顺序组织教学很成功,但是可能还存在许多其他因素,使得需要对顺序进行调整。因此,我们尽了最大努力,力争将各章之间的依赖关系减至最小。图0-1给出了各章之间的依赖关系。图中从A画至B的箭头指示:第B章很大程度上依赖于第A章中介绍的内容。
  图0-1 各章的依赖关系
  本书力图尽量全面地涵盖所有内容。在理想世界中,如果能把所有15章都在一门课里介绍完,那是再好不过了。不过这个任务很艰巨,我们怀疑大多数课程都可能会少讲或不讲后面的部分或全部章节。
  对于想初步了解计算机硬件的人来说,本书提供了一个附录A。这个内容可以作为一个引言章节,或者可以作为课外阅读材料。之所以选择将这些内容放在附录中,是因为它不属于对象模型的范畴。
  应用或Applet—由你来选择
  本书中的程序都以一种灵活的方式编写,既可以作为Java应用执行,也可以作为Java applet执行。每个程序中都有一个名为Driver的类,这个类为程序定义了一个控制器对象。
  以下所示的run.java 类可以把各个程序用作为一个应用。
  如果你想把程序作为一个applet来运行,可以使用AppletRun.java 类。
关于应用和applet之间的差别,以及run.java与AppletRun.java之间的差别,有关细节与Java有关,在前面的介绍中不出现。因此,有关这些问题的全面讨论将在第15章介绍。
  AWT和Swing库
  对象由类构建,而类来自类库。因此,讨论以对象为中心的方法时,必然涉及软件库。本书使用J2SE 5.0的标准类库:AWT和Swing。
  通过使用这些类库,可以开发Java程序来显示动画、利用简单的列表数据结构,或者访问实际日历和时钟信息。不过,本书还使用大量的类来为学生编写的Java代码提供一个图形用户界面(graphical user interface,GUI)。
  为什么使用图形库
  从我的经验看,与GUI库相比,没有哪个类集合更能激起程序员新手的学习兴趣。这种动机如此强烈,以至于我们发现讲授AWT和Swing库只需要极少的课时(要知道课时是多么的珍贵)。在最初一到两个学时介绍有关的基础知识后,学生就能通过阅读这些类的规范很好地自学Java类。
  图形类在教学上还有一个好处,就是直观可见。GUI对象提供了一个肥沃的土壤,可以很容易地建立对象的例子,并展示对象的关系。
  使用GUI类的最后一个原因是,其他方法看上去都是让人厌倦的交互式终端流类型I/O,这些方法已经在CS1课程中用了不下30年。对于使用压缩盘和玩电子游戏的新生代来说,会发现这种终端I/O很别扭,很没有吸引力。
  打开黑箱
  Bertrand Meyer定义了一个概念:“逐步地打开黑箱”,并把这作为一种教学方法,首先使用预定义的组件(也就是黑箱),然后一点一点揭示构成这个黑箱所用的工具和技术。举一个黑箱的例子,本书首先使用一个run.java静态类(前面已经提到)来实例化一个初始Driver对象,从而避免过早地为静态方法分心。我们让读者先不去管这个run.java类,直到后面真正开始解释静态方法,并显示run.java 类的代码时才会要求了解有关内容。
  使用黑箱时,要求读者先要“认可”一个目标,为此在正文中会特别有一个“关闭的黑箱”小节,还会显示一个适当的图标。相应地,“打开黑箱”小节则指示了书中哪些位置上会揭示这些黑箱概念。
  补充材料
  所有读者都可以从http://www.aw.com/cssupport得到以下所有补充材料:
  ·本书中所用示例程序的源代码(超过80个程序)。
  ·对书中所分析的关键类/特性提供类图和规范(HTML形式)。
  ·教师可以通过填写书后的《教学支持说明》来了解如何访问这些补充材料:
  ·所有练习的一套完整答案。
  ·编程练习示例解决方案的源代码。
  ·对应各章内容的PowerPoint演示课件。
  致谢
  我非常感谢Barbara Barkauskas、Keith Burand和Kasilingam Periyasamy,感谢他们的信任、建设性的意见和无私的友谊。这些同事真的很棒,他们对这个项目信心十足(或者可能对其他教材有些失望),所以他们乐于采用本书第1版的手稿作为教材授课整整一年。这里要特别感谢Barb,因为她还答应作为本书的审校人员。她完全依照本书的内容讲授了这门课,因此能从特有的角度提供帮助。
  我还要感谢Addison-Wesley为本书本版和第1版所集合的一群精兵强将,这些审校人员来自不同项目,个个才能卓越。好的审校人员能探查内容、提出问题、给出建议并做出批评,这些学识渊博的计算机科学家们都做到了。

封底文字

本书采用一种“以对象为中心”的教学方法,使学生深刻地领会用Java编程的强大能力。本版充分结合了Java 5.0的特性,使用Java的AWT和Swing类,为学生掌握必要的技能和技术提供了实践的机会,而这些技能和技术正是现代软件开发的基石。
  本书特点:
  ● 更加强调对象 从一开始就围绕着对象这个主题讲解。书中提供大量示例和练习,并阐述了面向对象编程如何应用于软件工程。
  ● 以软件工程为重点 将软件工程编程技巧贯穿到所讨论的每一个主题中。结合统一建模语言 (UML)、基于模式的编程以及前置条件和后置条件。
  ● 新的Java 5.0特性 Java的这个升级版本有很多优点,包括使用泛型、断言语句、枚举数据类型、Scanner类等等,本书涉及了这些内容,另外还对for循环语句做了深入讨论。
  ● Swing和AWT 本书第1版依赖于Java的一些“实用”外部类,本版仍保持这个特点,并有所改进,另外还简要地介绍带图形用户界面 (GUI) 的应用。
80余个完整的程序示例。

图书序言

David D. Riley是美国威斯康星大学拉克罗斯分校计算机科学系的教授。他为不同层次的程序员讲授程序设计。他关注的领域包括面向对象软件开发、软件工程和计算机安全。他于艾奥瓦大学获得计算机科学博士学位,曾著有多部编程图书,包括《The Object of Data Abstraction and Structures Using Java》。

作者简介

David D. Riley:David D. Riley: David D. Riley是美国威斯康星大学拉克罗斯分校计算机科学系的教授。他为不同层次的程序员讲授程序设计。他关注的领域包括面向对象软件开发、软件工程和计算机安全。他于艾奥瓦大学获得计算机科学博士学位,曾著有多部编程图书,包括《The Object of Data Abstraction and Structures Using Java》。

译者简介

苏钰涵 徐红梅 王 琦 等:暂无简介

译者序

本书给我们的第一印象是这是一本关于Java的教材,但是等我们翻译完整本书之后,才领会到作者为什么会把它取名为The Object of Java,更确切地讲,作者是在利用Java谈对象,让读者乘着Java这艘飞船在面向对象的宇宙中遨游。
  从内容的组织上看,本书与一般Java书也有所不同。作者首先简单介绍对象和类的概念,又从总体讲解设计与实现的基本问题。接下来才谈到基本类型、方法、逻辑和选择等程序设计语言的基本要素,并在其中穿插介绍继承、多态等面向对象概念。也许我们已经习惯于“语法-简单例子-复杂应用”的介绍模式,看到这种组织方式,一方面有耳目一新的感觉,另一方面也不免有些疑惑:为什么这么安排呢?
  这个问题作者是靠事实来回答的,本书的手稿最初是作者所在学院一门计算机课程的教案,由于它的内容组织完全贴合教学,取得很大成功,促使本书第1版得以诞生;又由于第1版的畅销,加之Java新版本的出现,我们又有幸看到它的第2版,就是现在这本书。
  本书吸引我们的不光是内容上的合理取舍、结构的精巧组织,还在于作者采用饶有趣味的示例来加深读者的理解。另外从随处可见的“软件工程提示”、“关闭的黑箱”、“打开黑箱”,以及每章最后的“Java检查员”,都能看出作者将他的经验、智慧通过这样的点点滴滴呈现给我们,确实让人备觉珍贵。
  全书主要由苏钰涵、徐红梅、王琦翻译,其他参与翻译的人员还包括刘跃邦、王林绪、潘淼、王宇飞、王树春、韦群、林华君、赵蓓、刘立强、王志淋、蔡洪量、何跃强、丁小峰、苏金国、孙春娟、周兴汉、刘名臣、张练达等,全书由王林绪、潘淼等进行术语的审核,何跃强、丁小峰等提供技术问题支持,全体工作人员共同完成本书的翻译工作。本书最后由苏钰涵统稿。
  我们深深地感谢我们的家人和朋友。在翻译过程中,他们给予我们莫大的关心、支持和帮助。
  由于时间仓促,译者的水平有限,在翻译过程中难免会出现一些错误,恳请读者批评指正。

图书目录

译者序
前言
致学生
第1章  对象和类 1
1.1 对象无处不在 1
1.2 软件中的对象 1
1.3 软件类剖析 4
1.4 对象和类的区别 5
1.5 编辑、编译和运行 6
1.6 软件工程简介 8
1.7 面向对象软件开发示例 9
术语 10
练习 11
编程练习 12
第2章 Java对象 13
2.1 语法图 13
2.2 方法调用 15
2.3 指令序列 16
2.4 构造对象和对象赋值 16
2.5 编码模式和交换 19
2.6 集成到一个Java类中 20
2.7 契约式编程 23
2.8 注释 27
2.9 观察执行 29
2.10 定义算法—分而治之 30
2.11 选择标识符 34
2.12 第2个细化例子 36
2.13 调用有参数的方法 39
术语 41
练习 42
编程练习 45
第3章 设计与实现 47
3.1 标准类简介 47
3.2 导入声明 49
3.3 javax.swing.JFrame 51
3.4 java.awt.Label 54
3.5 非标准类(Rectangle、Oval和Line) 57
3.6 原型方法 62
3.7 调试:将代码注释掉和使用System.out.println 65
术语 69
练习 70
编程练习 72
第4章 方法 74
4.1 为什么需要子程序 74
4.2 私有无参数方法 76
4.3 使用参数 79
4.4 局部变量 84
4.5 非void方法 86
4.6 标准非void方法 89
4.7 事件处理简介 90
4.8 后置条件记法 94
4.9 java.awt.Container—设计例子 96
术语 101
练习 101
编程练习 104
第5章 基本类型数据 107
5.1 基本类型 107
5.2 基本整数数据类型 108
5.3 基本类型与引用类型的区别 112
5.4 实数(float和double类型) 113
5.5 再谈System.out.println 115
5.6 混合类型数值表达式 115
5.7 基本类型方法(包括Math) 117
5.8 常量(final) 119
5.9 数值表达式模式 120
5.10 char数据类型 121
5.11 设计示例—动态直方图 123
术语 126
练习 126
编程练习 128
第6章 供应者类 129
6.1 软件中的客户和供应者 129
6.2 另一个客户 130
6.3 供应者 134
6.4 作用域和生命期 138
6.5 类接口设计原则 141
6.6 读写访问分离 146
6.7 方法重载 148
6.8 this 149
6.9 枚举数据类型 151
6.10 String 153
6.11 JTextField* 156
术语 161
练习 162
编程练习 164
第7章 逻辑和选择 167
7.1 if 指令 167
7.2 关系表达式 171
7.3 布尔表达式 173
7.4 条件计算 177
7.5 谓词 177
7.6 蕴涵的使用 180
7.7 嵌套if 指令 181
7.8 多路选择 184
7.9 switch指令 186
7.10 软件测试 189
7.11 逻辑和程序设计* 190
7.12 再谈断言 192
术语 198
练习 198
编程练习 201
第8章 继承 204
8.1 扩展 204
8.2 类关系:contains_a和is_a 208
8.3 特殊化和扩展—javax.swing.
JComponent 213
8.4 保护作用域 218
8.5 继承用于事件处理 220
8.6 通过继承EventTimer实现动画* 226
8.7 有滑动条和文本域的设计示例* 229
8.8 小结 235
术语 236
练习 237
编程练习 240
第9章 多态 243
9.1 继承层次体系 243
9.2 类型相容性 246
9.3 子类型多态 249
9.4 抽象类 256
9.5 Object类 262
9.6 内容相等性和身份相等性 263
9.7 使用接口 264
术语 270
练习 270
编程练习 273
第10章 重复 277
10.1 while循环 277
10.2 计数循环 282
10.3 卫哨循环 284
10.4 循环设计注意事项 286
10.5 嵌套循环 288
10.6 do循环 290
10.7 for循环 292
10.8 循环不变式 295
10.9 循环和事件处理 299
10.10 测试和循环 299
术语 301
练习 301
编程练习 305
第11章 容器 307
11.1 容器 307
11.2 泛型容器 308
11.3 包装器类和自动装箱/拆箱 312
11.4 列表 314
11.5 列表遍历 318
11.6 线性搜索 323
11.7 插入排序 325
11.8 泛型排序* 328
术语 330
练习 330
编程练习 333
第12章 数组介绍 336
12.1 一维数组 336
12.2 避免索引越界 341
12.3 利用for循环顺序处理 342
12.4 将数组作为聚集处理 347
12.5 表 350
12.6 有引用元素的数组 352
12.7 数组和对象 353
12.8 排序—选择排序 354
12.9 二维数组 357
术语 360
练习 360
编程练习 363
第13章 文件输入和输出 367
13.1 文件 367
13.2 Java File类 369
13.3 I/O异常 371
13.4 输入和输出 373
13.5 DataInputStream和
DataOutputStream 377
13.6 文本文件 381
13.7 终端型I/O* 386
13.8 持久对象* 387
13.9 JFileChooser* 388
术语 391
练习 391
编程练习 394
第14章 递归 395
14.1 递归定义 395
14.2 从递归定义到方法 399
14.3 递归方法 401
14.4 递归执行 402
14.5 递归和重复 404
14.6 更复杂的递归 405
术语 409
练习 409
编程练习 410
第15章 应用和Applet 413
15.1 static变量 413
15.2 static方法 418
15.3 应用 419
15.4 Applet 421
15.5 创建包* 425
15.6 使用包 428
术语 429
练习 429
附录A 计算机系统介绍 435
附录B Java语法图 446
附录C Java操作优先级 466
附录D 库软件 467
附录E UML记法 485
附录F 使用窗口编程 490

教学资源推荐
作者: Calvin Lin;Lawrence Snyder
作者: 刘燕君,刘振安,孙忱
作者: (美)Y.Daniel Liang
作者: 陈作聪 苏静 王龙 等编著
参考读物推荐
作者: [美]马克斯·卡纳特-亚历山大(Max Kanat-Alexander) 著
作者: (美)Charles Ashbacher
作者: 李茂 编著
作者: 刘欣 李慧 等编著