首页>参考读物>计算机科学与技术>软件与程序设计

Java 7程序设计入门经典
作者 : (美)Herbert Schildt; Dale Skrien 著
译者 : 肖智清 译
丛书名 : 华章程序员书库
出版日期 : 2013-07-22
ISBN : 978-7-111-43069-8
定价 : 139.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 981
开本 : 16
原书名 : Java Programming: A Comprehensive Introduction
原出版社: McGraw-Hill
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书是一本面向java编程初学者的书籍,不需要读者有太多的计算机基础知识。本书专门为使用Java的编程入门课程编写的。本书以一个合乎逻辑的方法来演示的核心主题,采用循序渐进的方式,从基础内容到更高级的素材,在适当时候介绍对象。本书分为三部分:第一部分涵盖了Java语言和编程的基本元素,同时介绍面向对象的设计;第二部分介绍了使用Swing的 GUI(图形用户界面)编程;第三部分探讨Java API(应用程序编程接口)库的主要方面,包括集合框架和并发API。通过学习本书内容,读者可以具备初步的java开发能力。

图书特色

这是一本公认的经典Java语言教程和Java语言自学参考书。
本书以较强的逻辑性,对Java技术的三大核心主题进行了系统而详细的讲解,从最基本的语法知识,逐步深入到一些高级的主题。全书分为三部分:第一部分系统介绍Java语言的组成元素和编程基础,还包括面向对象设计的相关知识;第二部分讲解如何用Swing进行GUI编程;第三部分详细讲解Java API库的关键部分,其中包括集合框架和并发API。

本书特色:
作者权威。两位作者在软件开发领域有数十年经验,而且是畅销书作家,他们撰写的程序设计类书籍,在全球累计销售数百万册。
技术新颖。根据Java 7撰写,系统讲解Java 7的新特性。
内容全面。不仅介绍Java语言及其编程的核心要素,还讲解Swing GUI编程和Java API库这两大重要主题。
示例丰富。本书中的大量习题不仅便于阐明程序元素的使用方法,还有助于检验读者对知识点的掌握程度。部分习题在书后给出了参考答案。
适合教学。本书不仅包括“自我测验”版块,便于对重要概念进行巩固,而且包含“专家解答”版块,为当前涉及的主题提供相关的信息或者有趣的注释。


作者简介
Herbert Schildt
世界知名程序设计大师,是C、C++、Java和C#编程语言方面的权威,也是Windows编程方面的专家。拥有伊利诺伊大学的计算机科学硕士学位。畅销书作家,他的编程书籍销量已经超过300万册,并被翻译成多种语言在世界范围内广为流传。

Dale Skrien
美国科尔比学院计算机科学系教授,研究方向为算法图形理论、面向对象程序设计 。拥有30多年丰富的教学经验,讲授过数学、计算机科学以及Java课程。他出版过教科书《面向对象设计原理与模式(Java版)》。

图书前言

本书通过Java语言来讲解编程的基础知识。该书假设读者之前没有任何编程经验。本书首先介绍最基本的知识,例如,如何编译和运行Java程序;接着,讨论关键字、运算符和一些形成Java语言的构造。本书还会涉及Java的应用编程接口(Application Programming Interface,API)库。其中,包括Swing框架,它可以用来创建具有图形用户界面(Graphical User Interface,GUI)的程序。还包括集合框架,它可以用来存储对象集合。简而言之,本书旨在对Java进行全面的介绍。与其他计算机语言一样,Java会随着时间演化。在本书编写时,最新的版本是Java 7(JDK 7)。本书将使用这个版本。但是,大部分的内容也适用于其他Java版本,如版本6。
开门见山的讲授方法
  本书使用了“开门见山的”讲授方法。这意味着本书将以一种连贯的顺序介绍各个主题,使注意力能够集中在当前的主题上。这种方法简化了讲授过程,使其流水化了。对于那些需要从主要讲授流程中分离的情况,我们会试图以一种尽量连贯的方式来讲授。这种方法的目的在于能够清楚地显示Java各部分之间的关系,而不是将各部分当作没有关系的特性。
  为了能够更好地组织内容,本书分为三部分:第一部分描述定义Java语言的元素和编程的核心元素。首先对Java进行概览,然后介绍数据类型、运算符和控制语句的基本概念。接着逐渐介绍该语言更复杂的特性,如类、方法、继承、接口、包、异常、多线程和泛型。因为许多Java程序都将输入输出作为其中的一部分,所以第一部分还介绍输入/输出。因为applet是典型的Java应用程序,所以也介绍applet的基础知识。第一部分以介绍面向对象设计的章节结束。
  在第一部分中,“开门见山的”讲授方法将持续关注Java语言的元素和编程基础。每个新的章节都建立在前一章节的基础之上,并尽量不从主要的话题中撇开。例如,用Swing进行GUI编程的讨论在第二部分中处理,而不是与基本概念的讨论混在一起。通过这样的处理,第一部分的介绍将紧紧根植于Java和编程的关键问题。
  第二部分介绍Swing。它首先对用Swing进行GUI编程进行概览,包括了组件、事件、布局管理器的基本概念。后续章节依序对一些Swing组件、菜单、对话框、绘图等进行介绍。这种“开门见山的”讲授方法能够帮助读者更好地将新学到的特性融入Swing框架的整个版图中。
  第三部分探究Java API库的部分内容。因为API库非常庞大,所以本书不可能将其全部囊括。我们将只关心库中每个Java程序员都应该熟悉的那些部分。这里会覆盖java.lang包和java.util包的大部分内容,还会特别关注集合框架。同时,我们还对网络进行概述,介绍并发API,包括Fork/Join框架。这些内容将以“开门见山的”方式介绍,使读者能够对一些核心的库元素奠定坚实的基础。
以恰到好处的时机介绍对象
  对于一本编程书,其中的第一个疑问是,它在介绍面向对象编程的概念时是较早地引入“对象”这个概念,还是较晚地引入“对象”这个概念。当然,对其是“早”还是“晚”的评价具有一定的主观性,这两种评价都不能确切地描述本书的组织方式。我们的方法可以形容为较早地介绍,但是又不太早。我们的目标是在合适的时机介绍对象。在学习完该语言的关键特性后,就介绍对象。
  在本书中,前三章重点介绍Java语言的基本知识,例如语法、数据类型、运算符和控制语句。我们相信,因为这些元素形成了该语言、甚至整个编程的基础,所以掌握这些元素必须放在第一步。换句话说,如果不理解这些元素,就很难编写有意义的程序。我们认为,只有在学习程序的基本元素后,读者才能够学习对象。
  在本书概述基础知识后,第4章介绍了对象。从此,面向对象的特性、技术和概念就融入到后续的章节中。另外,这里对对象的介绍非常谨慎,是逐层深入的。这能帮助读者掌握上下文中的每个新细节,而不会觉得过于困难。
教学功能
  本书包括许多教学元素,来方便学习,巩固知识。这些特性帮助读者正确定位关键技术要点,感知他们的进展,验证学到的所有概念。
  本章要点:每章开篇都有一个列表,来指明该章要展示的关键技术和概念。
  专家解答:在本书中有多处“专家解答”栏目。它们使用问答形式,为当前涉及的主题提供相关的信息或有趣的注释。在不影响正文连贯性的情况下,它们提供了补充信息。
  牛刀小试:每章会包括一个或多个“牛刀小试”环节。它们提供例子的操作步骤,让你了解程序的开发过程,演示与该章主题相关的Java特性。一般情况下,它会是一个较长的例子,以一个更实际的环境演示特性。
  自我测验:在每章中都会有“自我测验”,来测试读者对前一节的理解程度。这些问题的答案在页脚处。
  章后习题:在每章最后都会有习题,题型包括简答、填空、判断正误和编程题。部分习题的答案在附录C中。
ACM建议
  ACM Curricula Recommendation的2008版本(http://www.acm.org/education/curricula/ComputerScience2008.pdf)推荐所有的计算机科学学生都必须至少熟练掌握一门编程语言,对面向对象编程和事件驱动编程有一定的理解。我们相信本书的读者会获得其期望的知识和技能。本书不仅涵盖利用Java语言对编程进行介绍,还包括一些高级的Java特性、Swing框架和一些重要的API包。
  本书第一部分覆盖了ACM建议中“编程基础”(Programming Fundamental,PF)部分的大部分主题(除了关于信息安全基础和编程安全的知识)。第一部分中的第16章介绍面向对象设计,第一部分覆盖“PL/面向对象编程”和“SE/软件设计”知识单元的很多主题。本书第二部分介绍基于Swing的GUI编程,涉及“HC/GUI编程”知识单元的一些主题。第三部分包括与并发有关的主题,还有其他的主题。实际上,本书在第12章和第27章对多线程和并发进行了介绍,这是因为并发已经逐渐成为计算机科学学科中相关的内容。ACM课程建议也提到了这一点。
在线资源
  学生可以在本书的配套网站:www.mhhe.com/schildt1e上获得正文中程序的所有源代码。该网站还为Java课程教师提供了许多有用的资源。
  对章后习题的参考答案。
  教学手册,包括建议的课程计划和特定主题的教学建议。
  补充习题,它们可以用来制作小测验和考试。
  PowerPoint幻灯片,可以作为课堂教学的大纲。
  请联系你的McGraw-Hill代表获得访问这些资源的信息。
  其他的教学资源包括:
  在网站www.CourseSmart.com上的资源是一个电子书文本。在CourseSmart网站上,可以大大减小打印纸质教科书的开支,减小对环境的影响,能够访问强大的Web学习工具。你可以在线浏览CourseSmart电子书,或将其下载到计算机。电子书允许读者全文搜索,添加高亮或笔记,在读者间分享笔记。CourseSmart是最大的电子书商之一。请访问www.CourseSmart.com网站了解更多知识,并试读样章。
  在该网站上,你可以创建与教学内容匹配的教学资源。使用McGraw-Hill CreateTM,你可以很容易地重组各章节,将内容与其他内容资源进行组合,快速上传你写的内容(例如课程安排或教案)。在Create中,你可以搜索上千本顶尖的McGraw-Hill教科书,找到你需要的资源,也可以合理编排书的内容以与教学风格相匹配,甚至还可以允许你自定义书的外观,选择封面、添加你的名字、学校和课程信息。订购Create书,你还会在3~5个工作日内收到额外的纸质预览版,或在几分钟内通过电子邮箱收到电子预览版(eComp)。请即刻访问www.mcgrawhillcreate.com并注册,体验McGraw-Hill GreateTM的强大威力,让你可以以自己的方式进行教学。
致谢
  我们想感谢McGraw-Hill出版社的下列工作人员。如果没有他们,本书就不能出版。他们使得本书的编写成为一件趣事。
  编辑部主任:Michael Lange
  全球发行人员:Raghu Srinivasan
  高级市场经理:Curt Reynolds
  策划编辑:Robin Reed
  策划编辑:Kathryn Neubauer
  高级项目经理:Lisa Bruflodt
  设计助理:Rose Kernan
  生产编辑:Rose Kernan
  我们也感谢下面的审校者,他们提供了许多有用的意见。我们非常重视他们的意见。
  Bill Barge(Trine大学)
  Chris Bennett(Maine-Farmington大学)
  Augusto Casas(St Thomas Aquinas大学)
  I-ping Chu(DePaul大学)
  Vasil Hntyshin(Rowan大学)
  Rodney Hoffman(Occidental大学)
  David Kamper Sr.(Northeastern Illinois大学)
  BJ Tjaden(Anne Arundel Community大学)
  Richard Weiss(Evergreen State大学)
  James Braman(Towson大学)
  Steve Cooper(Stanford大学)
  Michael Main(Colorado大学Boulder分校)
  Jay McCarthy(Brigham Young大学)
  Robert Moll(Massachusetts大学Amherst分校)
  Jagadeesh Nandigam(Grand Valley State大学)
  Gurpur Prabhu(Iowa State大学)
  Daisy Sang(California State Polytechnic大学)
  Mark Sherriff(Virginia大学)
  Joslyn Smith(Florida International大学)
  James Yong(Manitoba大学)
  最后,也是最重要的,我们还要感谢我们的家人在本书准备工作中的支持。

上架指导

计算机\程序设计

封底文字

这是一本公认的经典Java语言教程书和Java语言自学参考书。
本书以较强的逻辑性,对Java技术的三大核心主题进行了系统而详细的讲解,从最基本的语法知识,逐步深入到一些高级的主题。全书可以分为三部分:第一部分系统介绍了Java语言的组成元素和编程基础,还包括面向对象设计的相关知识;第二部分讲解了如何用Swing进行GUI编程;第三部分详细讲解了Java API库的关键部分,其中包括集合框架和并发API。
本书特色:
 作者权威。两位作者在软件开发领域有数十年经验,在世界上享有盛名,而且是畅销书作家,他们撰写的程序设计类书籍,在全球累计销售数百万册。
 技术新颖。根据最新的Java 7撰写,系统讲解了Java 7的新特性。
 内容全面。不仅介绍了Java语言及其编程的核心要素,而且还讲解了Swing GUI编程,以及Java API库这两大Java程序员应该掌握的重要主题。
 示例丰富。提供了丰富的示例和习题。本书提供了大量习题以阐明程序元素的使用方法。本书还提供了习题来检验读者对知识点的掌握程度。部分习题在书后给出了参考答案。
 适合教学。本书不仅包括“自我测验”版块,对核心概念进行了巩固,并立即对读者学到的关键概念提供反馈,而且还包含“专家解答”版块,为当前涉及的主题提供相关的信息或者有趣的注释。

作者简介

(美)Herbert Schildt; Dale Skrien 著:暂无简介

译者简介

肖智清 译:暂无简介

译者序

Java是当今应用最广泛的程序设计语言。根据当今影响最大的编程语言排行榜——TIOBE世界编程语言排行榜,在十多年来的绝大多数的时间里,Java在所有编程语言中排行第一。同时,Java作为第一种真正意义上的面向对象语言,已经成为学习高级程序设计语言的必然选择。同时,Java在当今世界中的应用十分广泛:在不同手机中使用的Java小游戏(J2ME)全部都是由Java编写的;对于Google推出的Android手机操作系统,其软件开发工具包(Software Development Kit,SDK)提供的编程接口也使用Java语言;还有大量基于JSP技术的服务器代码也用Java开发;甚至“勇气”号火星车的操纵代码也是用Java编成的。学习Java在理论和实践上都有重大意义。在此向读者推荐将Java作为第一门要学习的编程语言。
  本书是编程畅销书作者Herbert Schildt与资深Java讲师Dale Skrien的最新力作。为了让广大中文读者能够更快更好地学习Java知识,机械工业出版社重金引入了本书。本书涉及Java语言的许多最新特性,包括但不限于:
  多重捕获;
  更精确的重新抛出;
  带资源的try语句;
  自动资源管理与AutoCloseable接口;
  在switch语句中使用字符串;
  使用下划线对数字进行分隔表达;
  在创建泛型实例时使用菱形运算符进行类型推断;
  Fork/Join框架;
  Phaser类;
  泛型Swing组件。
  本书使用文本编辑器与命令行结合的方式开发Java程序。文本编辑器包括Windows系统上可用的Notepad++、在Linux/UNIX系统上可用的emacs等。另外,还可以使用集成开发环境(如Eclipse)来进行Java开发。其中,Notepad++、emacs、Eclipse都是开源软件,在相关许可范围内可免费使用。Oracle公司在线提供了完整而庞大的Java API文档(英文版),并提供了环境配置与入门教程(英文版)。如果在将来的编程中涉及了本书没有提到的内容,可以参阅这些在线文档。
  适合阅读本书的读者有:
  没有任何编程经验的读者。
  各大专院校与相关培训机构的学生与授课教师;备考计算机二级Java的学生。
  学过C/C++/Java程序设计课程,想全面掌握并熟练应用Java编程的人员。
  有志于成为Java程序员,希望谋取Java编程岗位的求职者。
  正在从事Java相关开发(如J2ME游戏开发、Android应用开发)的开发人员。
  本书由清华大学肖智清翻译。在翻译过程中,译者将以帮助读者掌握编程知识为根本宗旨,力求保证术语的准确和语言的通顺,兼顾“信、达、雅”。但是限于译者水平,加上时间仓促,书中难免存在错误和不足。恳请广大读者和同行批评指正。译者的电子邮箱是:xzq.xiaozhiqing@gmail.com。
  在这里,要感谢为本书的出版做出贡献的所有工作人员。其中,机械工业出版社的谢晓芳编辑是本书的责任编辑,她对本书进行了全面细致的审校,并提出了许多建设性意见。同时还要感谢机械工业出版社的其他编辑为提升本书质量做出的贡献。与他们合作是一个愉快的过程。最后,还要感谢我的亲友,特别是我的爸爸和妈妈,他们在本书翻译期间给予了我大量支持。
  感谢您选择本书。祝您学习快乐!

肖智清

图书目录

译者序
前言
第一部分 Java语言
第1章 Java编程基础2
1.1 计算基础3
1.1.1 计算机的硬件组成3
1.1.2 位、字节和二进制4
1.1.3 操作系统5
1.2 程序5
1.3 编程语言6
1.4 Java语言7
1.4.1 Java的起源7
1.4.2 Java对互联网的贡献9
1.4.3 Java applet9
1.4.4 安全性9
1.4.5 可移植性9
1.4.6 Java的解决方案:字节码10
1.4.7 Java的演进10
1.5 面向对象编程的关键特性11
1.5.1 封装12
1.5.2 多态12
1.5.3 继承13
1.6 Java开发工具包13
1.7 第一个简单的程序14
1.7.1 输入程序15
1.7.2 编译程序15
1.7.3 运行程序15
1.7.4 逐行解析第一个简单的程序16
1.8 处理语法错误18
1.9 第二个简单的程序18
1.10 另一种数据类型20
1.11 两种控制语句23
1.11.1 if语句23
1.11.2 for循环25
1.12 创建代码块26
1.13 分号和语句的位置27
1.14 关于缩进28
1.15 Java关键字30
1.16 Java中的标识符30
1.17 Java类库31
1.18 习题32
第2章 数据类型和运算符34
2.1 为什么数据类型很重要34
2.2 Java的基本数据类型34
2.2.1 整数35
2.2.2 浮点类型36
2.2.3 字符37
2.2.4 布尔类型38
2.3 字面量40
2.3.1 十六进制、八进制和二进制字面量41
2.3.2 转义字符序列41
2.3.3 字符串字面量42
2.4 深入解析变量43
2.4.1 初始化变量43
2.4.2 动态初始化44
2.5 变量的作用域和生命周期44
2.6 运算符47
2.7 算术运算符47
2.8 关系运算符和逻辑运算符49
2.9 具有“短路”功能的逻辑运算符50
2.10 赋值运算符52
2.11 速记赋值运算符53
2.12 赋值中的类型转换53
2.13 使用强制类型转换55
2.14 运算符的优先级56
2.15 表达式58
2.15.1 表达式中的类型转换58
2.15.2 空白和圆括号60
2.16 习题60
第3章 程序控制语句63
3.1 从键盘输入字符63
3.2 if语句65
3.3 嵌套的if语句66
3.4 if-else-if梯队67
3.5 switch语句68
3.6 嵌套的switch语句71
3.7 for循环74
3.8 for循环中的一些特殊情况76
3.8.1 缺少部分76
3.8.2 无限循环77
3.8.3 没有循环体的循环78
3.9 在for语句内部声明循环控制变量78
3.10 增强的for循环79
3.11 while循环80
3.12 do-while循环81
3.13 使用break语句退出循环86
3.14 像使用goto语句一样使用break语句88
3.15 使用continue语句91
3.16 嵌套的循环96
3.17 习题97
第4章 类、对象和方法初探100
4.1 类的基础知识100
4.1.1 类的一般形式101
4.1.2 定义类101
4.2 如何创建对象104
4.3 变量引用和赋值语句105
4.4 方法106
4.5 从方法返回108
4.6 返回值109
4.7 使用形参111
4.8 构造函数119
4.9 含有形参的构造函数120
4.10 new运算符再探123
4.11 垃圾回收和终结器123
4.12 使用this关键字126
4.13 习题128
第5章 更多数据类型和运算符131
5.1 数组131
5.2 多维数组136
5.2.1 二维数组136
5.2.2 不规则数组137
5.2.3 三维或多维数组139
5.2.4 初始化多维数组139
5.3 其他声明数组的语法140
5.4 对数组的引用赋值141
5.5 使用成员length142
5.6 for-each风格的for循环149
5.6.1 遍历多维数组152
5.6.2 应用增强for循环153
5.7 字符串154
5.7.1 构造字符串154
5.7.2 操作字符串155
5.7.3 字符串数组156
5.7.4 字符串是不可改变的157
5.7.5 使用字符串控制switch语句158
5.8 使用命令行参数159
5.9 按位运算161
5.9.1 按位与、按位或、按位异或、按位非运算符161
5.9.2 移位运算符165
5.9.3 位速记赋值运算符167
5.10 问号运算符170
5.11 习题171
第6章 深入解析类和方法174
6.1 控制对类成员的访问174
6.2 向方法传递对象180
6.3 如何传递实参181
6.4 返回对象183
6.5 重载方法185
6.6 重载构造函数189
6.7 递归195
6.8 理解关键字static199
6.8.1 静态变量199
6.8.2 静态方法201
6.8.3 静态代码块203
6.9 嵌套类和内部类207
6.10 长度可变的实参vararg210
6.10.1 vararg基础210
6.10.2 重载varargs方法213
6.10.3 vararg和二义性214
6.11 习题215
第7章 继承220
7.1 继承基础220
7.2 成员访问和继承223
7.3 构造函数和继承226
7.4 用super关键字调用超类的构造函数227
7.5 用super关键字访问超类成员232
7.6 创建多层层次结构235
7.7 执行构造函数的时机238
7.8 超类引用与子类对象239
7.9 方法重写244
7.10 用重写方法支持多态246
7.11 为什么要重写方法248
7.12 使用抽象类252
7.13 使用final关键字256
7.13.1 用final关键字防止方法重写256
7.13.2 用final关键字防止继承257
7.13.3 对数据成员使用final关键字257
7.14 Object类258
7.15 习题259
第8章 接口261
8.1 接口的基础知识261
8.2 创建接口262
8.3 实现接口263
8.4 使用接口引用266
8.5 实现多个接口268
8.6 接口中的常量276
8.7 可扩展的接口277
8.8 嵌套的接口278
8.9 关于接口的最后思考279
8.10 习题279
第9章 包281
9.1 包的基础知识281
9.1.1 定义包282
9.1.2 寻找包与环境变量CLASSPATH282
9.1.3 一个短小的包例子283
9.2 包与成员访问284
9.2.1 一个包访问的例子285
9.2.2 受保护的成员287
9.3 导入包289
9.4 静态导入293
9.5 习题295
第10章 异常处理298
10.1 异常层次结构298
10.2 异常处理基础299
10.2.1 使用关键字try和catch299
10.2.2 一个简单的异常处理例子300
10.3 未捕获异常的后果302
10.4 异常可以优雅地处理错误303
10.5 使用多个catch子句305
10.6 捕获子类异常306
10.7 嵌套的try块307
10.8 抛出异常309
10.9 进一步解读Throwable类311
10.10 使用finally块312
10.11 使用throws关键字314
10.12 Java的内置异常315
10.13 JDK 7中新添加的异常特性317
10.14 创建异常子类319
10.15 习题325
第11章 使用输入/输出329
11.1 Java的输入/输出是建立在流上的330
11.2 字节流和字符流330
11.3 字节流类330
11.4 字符流类331
11.5 预定义的流331
11.6 使用字节流332
11.6.1 读控制台输入333
11.6.2 写控制台输出334
11.7 使用字节流读写文件335
11.7.1 从文件中输入335
11.7.2 写文件339
11.8 自动关闭文件340
11.9 读写二进制数据343
11.10 随机访问文件347
11.11 使用Java字符流350
11.11.1 用控制台获得字符流输入351
11.11.2 使用字符流进行控制台输出353
11.12 使用字符流进行文件输入/输出354
11.12.1 使用FileWriter类355
11.12.2 使用FileReader类356
11.12.3 File类357
11.12.4 获得文件属性357
11.12.5 获得目录列表359
11.12.6 使用FilenameFilter接口360
11.12.7 listFiles()方法361
11.12.8 多种文件实用方法361
11.13 使用Java的类型包装器来转换数值字符串363
11.14 习题371
第12章 多线程编程375
12.1 多线程基础375
12.2 Thread类和Runnable接口376
12.3 创建线程376
12.4 创建多个线程384
12.5 判定线程终止的时间386
12.6 线程的优先级389
12.7 同步390
12.8 使用同步方法390
12.9 synchronized语句393
12.10 使用方法notify()、wait()和notifyAll()进行线程通信396
12.11 线程挂起、恢复和终止402
12.12 习题406
第13章 枚举、自动装箱和注解410
13.1 枚举410
13.2 Java的枚举是类类型413
13.3 values()方法和valueOf()方法413
13.4 构造函数、方法、实例变量和枚举415
13.5 从Enum类继承枚举416
13.6 自动装箱423
13.6.1 类型包装器和装箱424
13.6.2 自动装箱基础425
13.6.3 装箱与方法426
13.6.4 表达式中的自动装箱和自动拆箱427
13.6.5 警告429
13.7 注解(元数据)430
13.7.1 创建和使用注解430
13.7.2 内置注解431
13.8 习题432
第14章 泛型436
14.1 泛型基础436
14.1.1 一个简单的泛型例子437
14.1.2 泛型只能用于对象440
14.1.3 基于不同类型实参的不同泛型类型440
14.1.4 有两个类型形参的泛型类441
14.1.5 泛型类的一般形式442
14.2 有界的类型443
14.3 使用有通配符的实参446
14.4 有界的通配符449
14.5 泛型方法452
14.6 泛型构造函数454
14.7 泛型的类层次结构454
14.8 泛型接口458
14.9 原始类型和遗留代码464
14.10 带有菱形运算符的类型推断467
14.11 清除468
14.12 二义性错误469
14.13 泛型的一些限制470
14.13.1 不能实例化类型形参470
14.13.2 对静态成员的限制470
14.13.3 泛型数组的限制470
14.13.4 泛型异常的限制471
14.14 习题472
第15章 applet与剩余的Java关键字475
15.1 applet基础475
15.2 applet的完整骨架478
15.3 applet的初始化和终止479
15.4 applet架构的关键点480
15.5 请求重绘480
15.6 使用状态窗口485
15.7 向applet传递形参486
15.8 剩余的Java关键字488
15.8.1 修饰符volatile488
15.8.2 修饰符transient488
15.8.3 关键字instanceof488
15.8.4 关键字strictfp489
15.8.5 关键字assert489
15.8.6 原生方法489
15.9 习题491
第16章 面向对象设计介绍493
16.1 优雅的软件及其重要性493
16.2 优雅的方法496
16.2.1 命名约定497
16.2.2 方法的内聚497
16.2.3 形式良好的对象499
16.2.4 内部文档500
16.2.5 外部文档501
16.3 优雅的类503
16.3.1 类的内聚和专家模式503
16.3.2 避免重复505
16.3.3 完整的接口507
16.3.4 设计时要考虑变化507
16.3.5 最少知识原则510
16.4 继承与委托的比较511
16.4.1 UML类图512
16.4.2 从代码重用的角度看513
16.4.3 is-a关系514
16.4.4 类似的行为516
16.4.5 多态518
16.4.6 继承的代价519
16.5 设计模式521
16.5.1 适配者模式522
16.5.2 观察者模式525
16.6 习题529
第二部分 利用Swing工具箱进行GUI编程
第17章 Swing基础534
17.1 Swing的起源和设计理念534
17.2 组件和容器536
17.2.1 组件536
17.2.2 容器537
17.2.3 顶级容器窗格537
17.3 布局管理器538
17.4 第一个简单的Swing程序539
17.5 事件处理544
17.5.1 事件544
17.5.2 事件源544
17.5.3 事件侦听器545
17.5.4 事件类和侦听器接口545
17.5.5 适配器类546
17.6 使用按钮547
17.7 JTextField类介绍554
17.8 使用匿名内部类来处理事件564
17.9 习题565
第18章 探索Swing控件567
18.1 JLabel类和ImageIcon类567
18.2 Swing按钮570
18.2.1 处理动作事件571
18.2.2 处理项事件571
18.2.3 JButton类572
18.2.4 JToggleButton类574
18.2.5 复选框576
18.2.6 单选按钮579
18.3 JTextField类581
18.4 JScrollPane类590
18.5 JList类597
18.6 JComboBox类601
18.7 树603
18.8 JTable类606
18.9 模型简介609
18.10 习题609
第19章 使用菜单612
19.1 菜单基础612
19.2 JMenuBar类、JMenu类和JMenuItem类概览613
19.2.1 JMenuBar类613
19.2.2 JMenu类614
19.2.3 JMenuItem类615
19.3 创建主菜单616
19.4 为菜单项添加助记键和快捷键620
19.5 为菜单项添加图像和工具提示622
19.6 使用JRadioButtonMenuItem类和JCheckBoxMenuItem类629
19.7 习题632
第20章 对话框634
20.1 JOptionPane类634
20.2 showMessageDialog()方法636
20.3 showConfirmDialog()方法640
20.4 showInputDialog()方法644
20.5 showOptionDialog()方法648
20.6 JDialog类652
20.7 创建无模式的对话框656
20.8 用JFileChooser类选择文件657
20.9 习题667
第21章 线程、applet和绘图670
21.1 Swing中的多线程670
21.2 使用Timer类676
21.3 创建Swing的applet681
21.4 绘图689
21.4.1 绘图基础689
21.4.2 图形上下文689
21.4.3 计算可绘图区域690
21.4.4 请求绘图691
21.4.5 绘图的例子691
21.5 习题695
第三部分 畅游Java API库
第22章 处理字符串698
22.1 字符串的基础知识698
22.2 字符串的构造函数699
22.3 三个与字符串有关的语言特性701
22.3.1 字符串字面量701
22.3.2 字符串拼接702
22.3.3 字符串与其他数据类型拼接702
22.3.4 重写toString()方法703
22.4 length()方法707
22.5 获得字符串中的字符708
22.5.1 charAt()方法708
22.5.2 getChars()方法708
22.5.3 toCharArray()方法709
22.6 字符串比较710
22.6.1 equals()方法和equalsIgnoreCase()方法710
22.6.2 equals()方法与“==”运算符的比较711
22.6.3 regionMatches()方法712
22.6.4 startsWith()方法和endsWith()方法712
22.6.5 compareTo()方法和compareToIgnoreCase()方法713
22.7 使用indexOf()方法和lastIndexOf()方法715
22.8 获得修改的字符串716
22.8.1 substring()方法716
22.8.2 replace()方法718
22.8.3 trim()方法719
22.9 改变字符串中字符的大小写720
22.10 StringBuffer类和StringBuilder类722
22.11 习题723
第23章 探索java.lang包725
23.1 基本类型包装器726
23.1.1 Number类726
23.1.2 Double类和Float类726
23.1.3 Byte类、Short类、Integer类和Long类728
23.1.4 Character类731
23.1.5 Boolean类734
23.1.6 自动装箱和类型包装器734
23.2 Math类735
23.3 Process类738
23.4 ProcessBuilder类738
23.5 Runtime类740
23.6 System类742
23.6.1 使用currentTimeMillis()方法测量程序执行的时间743
23.6.2 使用arraycopy()方法744
23.6.3 获得属性值744
23.6.4 重定向标准输入流和标准输出流745
23.7 Object类746
23.8 Class类747
23.9 Enum类749
23.10 与线程有关的类和Runnable接口749
23.11 其他类749
23.12 java.lang包中的接口750
23.12.1 Comparable接口750
23.12.2 Appendable接口752
23.12.3 Iterable接口752
23.12.4 Readable接口753
23.12.5 CharSequence接口753
23.12.6 AutoCloseable接口753
23.13 习题754
第24章 探索java.util包756
24.1 Locale类757
24.2 使用日期和时间760
24.2.1 Date类760
24.2.2 Calendar类和GregorianCalendar类761
24.3 用Formatter类格式化输出766
24.3.1 Formatter类的构造函数766
24.3.2 格式化基础768
24.3.3 格式化字符串和字符769
24.3.4 格式化数字769
24.3.5 格式化日期和时间770
24.3.6 说明符%n和说明符%%772
24.3.7 指定最小的域宽度772
24.3.8 指定精度773
24.3.9 使用格式标志774
24.3.10 大写字母选项776
24.3.11 使用实参索引777
24.3.12 为不同的地区设置格式化778
24.3.13 关闭Formatter对象778
24.4 格式化和printf()方法781
24.5 Scanner类783
24.5.1 Scanner类的构造函数783
24.5.2 Scanner类的基础知识783
24.5.3 Scanner类的例子785
24.5.4 Scanner类的其他特性789
24.6 Random类790
24.7 使用Observable类和Observer接口792
24.8 Timer类和TimerTask类795
24.9 其他混杂的应用类和接口797
24.10 习题798
第25章 使用集合框架中的数据结构800
25.1 数据结构概览800
25.1.1 栈和队列801
25.1.2 链表801
25.1.3 树802
25.1.4 散列表803
25.1.5 选择数据结构803
25.2 集合概览804
25.3 集合接口805
25.3.1 Collection接口806
25.3.2 List接口807
25.3.3 Set接口808
25.3.4 SortedSet接口809
25.3.5 NavigableSet接口809
25.3.6 Queue接口810
25.3.7 Deque接口811
25.4 集合类813
25.4.1 ArrayList类814
25.4.2 LinkedList类817
25.4.3 HashSet类820
25.4.4 TreeSet类822
25.4.5 LinkedHashSet类824
25.4.6 ArrayDeque类825
25.4.7 PriorityQueue类827
25.5 通过迭代器访问集合828
25.5.1 使用迭代器829
25.5.2 用for-each风格的循环代替迭代器831
25.6 使用映射832
25.6.1 映射接口832
25.6.2 映射类835
25.7 比较器840
25.8 集合算法842
25.9 Arrays类845
25.10 遗留类和遗留接口846
25.10.1 Enumeration接口846
25.10.2 Vector类846
25.10.3 Stack类846
25.10.4 Dictionary类846
25.10.5 Hashtable类846
25.10.6 Properties类847
25.11 习题847
第26章 使用java.net包进行网络编程849
26.1 网络基础849
26.2 网络类和网络接口850
26.3 InetAddress类851
26.4 Socket类853
26.5 URL类856
26.6 URLConnection类858
26.7 HttpURLConnection类862
26.8 数据报865
26.8.1 DatagramSocket类865
26.8.2 DatagramPacket类865
26.8.3 数据报的例子866
26.9 习题869
第27章 并发实用工具870
27.1 并发API包871
27.1.1 java.util.concurrent包871
27.1.2 java.util.concurrent.atomic包872
27.1.3 java.util.concurrent.locks包872
27.2 使用同步对象872
27.2.1 Semaphore类872
27.2.2 CountDownLatch类876
27.2.3 CyclicBarrier类878
27.2.4 Exchanger类881
27.2.5 Phaser类883
27.3 使用执行器890
27.4 使用Callable接口和Future接口892
27.5 TimeUnit枚举895
27.6 并发集合896
27.7 锁897
27.8 原子操作900
27.9 通过Fork/Join框架并行编程900
27.10 主要的Fork/Join类901
27.10.1 ForkJoinTask类901
27.10.2 RecursiveAction类902
27.10.3 RecursiveTask类902
27.10.4 ForkJoinPool类903
27.11 分治策略904
27.11.1 第一个简单的Fork/Join示例904
27.11.2 理解并行度的影响906
27.11.3 使用RecursiveTask类的一个例子910
27.11.4 异步执行任务912
27.12 并发实用工具与Java的传统方法的比较912
27.13 习题913
附录A 使用Java文档注释915
附录B 正则表达式介绍921
附录C 部分习题的参考答案928

教学资源推荐
作者: 谢满德 凌云 陈志贤 刘文强 张国萍 编著
作者: 曹青 邱李华 郭志强
参考读物推荐
作者: 蒋鑫 著
作者: Michael Wong  IBM XL编译器中国开发团队 著
作者: (美)Christopher Moyer 著
作者: 李健 种惠芳 著