Java语言导学(原书第6版)
作者 : [美]雷蒙德?盖拉多( Raymond Gallardo) 斯科特?霍梅尔(Scott Hommel) 索亚?坎南(Sowmya Kannan) 琼尼•戈登(Joni Gordon) 沙伦?比奥卡?扎卡沃(Sharon Biocca Zakhour) 著
译者 : 董笑菊 薛建新 吴帆 译
丛书名 : 计算机科学丛书
出版日期 : 2017-07-10
ISBN : 978-7-111-57330-2
定价 : 99.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 558
开本 : 16
原书名 : The Java Tutorial: A Short Course on the Basics,Sixth Edition
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书由Oracle公司Java语言和平台开发团队资深技术文档撰写人基于Java SE 8版本编写,并引用该版本的应用编程接口(API),经过了众多世界级Java专家细心审校,有力地保证了权威性和准确性,内容全面翔实,文字简洁易懂,可读性强,被视为Java的核心教程。
书中主要介绍了面向对象编程的概念、语言基础、类和对象、注解、接口和继承、泛型、包、数字和字符串、异常、基本I/O和NIO.2、集合、并发、正则表达式、平台环境、在JAR文件中打包程序、Java Web Start、applet、Java富互联网应用系统、日期/时间API等内容,涵盖了Lambda表达式、类型注解、默认方法、聚合操作、日期/时间API等Java SE 8的新特性,更新了限制恶意小程序的攻击和RIA等相关内容。每章的后面都有问题和练习,附录中还给出Java编程语言认证考试的相关内容。

图书特色

本书是由Oracle公司官方出品的Java核心教程,几位作者均为Java语言和平台开发团队资深技术文档撰写人,内容随Java版本的更新而不断完善,并经过了众多世界级Java专家细心审校,保证了本书内容的全面性、权威性和准确性。
本书基于Java SE 8版本编写,主要介绍了面向对象编程的概念、语言基础、类和对象、接口和继承、泛型、包、数字和字符串、异常、基本I/O、集合等内容。与上一版相比,新版本根据Java SE 8对内容进行了大量修订,增加了对相关新特性的介绍。新增的主要内容包括lambda表达式、类型注解、可插拔类型系统、聚合操作、默认方法、日期和时间API等。
本书是在Java SE 8版本发布后第一时间完成的教程,语言凝练,简洁易懂,适合各种层次的Java语言学习者阅读:
新手可以通过通读本书(包括第1章“快速入门”中编译和运行第一个程序的每一步指令)来全面了解Java语言并掌握相关的编程知识。
有经验的过程式语言(如C语言)程序员可以从面向对象的概念和Java程序语言的特性开始学习。
有经验的程序员可以直接学习高级主题,如泛型、并发和部署等。
本书是一本易于阅读的实用程序员指南,以协助读者学习使用Java提供的丰富的环境构建应用程序、applet和组件,是Java程序员学习Java SE 8版本的权威资料。如果读者准备Java SE 8认证考试,本书也可提供一定的帮助。附录中列出三个级别的考试介绍以及每个级别考试覆盖的项目,并给出书中涉及相关信息的章节及有价值的参考资料。此外,本书还提供了丰富的网上资源,帮助读者掌握Java的知识,并提升编程能力。

图书前言

自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代。正如Java Community Process计划的活动所印证的,Java语言将不断发展。本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API。
相比本书第5版(针对的是Java版本7),第6版有一些新特点:
Lambda表达式使得功能可作为方法参数使用,代码作为数据使用。Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁。4.4.8节介绍该专题。
联合使用类型注解和可插拔类型系统可改善类型检测,重复注解使得同样的注解可应用于声明和类型使用。5.4节和5.5节介绍相关专题。
默认方法是接口中实现的方法。使用默认方法,可将新功能添加到接口中,并确保与这些接口的老版本代码兼容。6.1.7节介绍该专题。
聚合操作可在元素流上执行功能型操作,特别是集合上的批量操作,如串行或并行的map-reduce转换。12.3节介绍该专题。
在限制恶意程序和RIA攻击方面有了一些改进。详情可参考第16章、19.5节和19.6节、20.4节等新增或修订章节。
日期/时间API可用于表示日期和时间并处理日期和时间值。这些API支持国际标准日历系统和其他常见的全球日历。新增的第21章介绍该专题。
如果读者准备参加Java SE 8认证考试,本书可提供一定的帮助。附录中列出三个级别的考试,详细介绍每个级别考试覆盖的内容,并指出书中涉及相关信息的章节及有价值的参考资料。注意,这只是参加认证考试要准备的众多内容之一。检查在线教程,下载最新的认证目标和参考教程的相关章节。
所有材料都经过Oracle Java工程组的成员审校,以确保书中信息都是正确和最新的。本书也被置于Oracle网站的在线教程内,其网址如下:
http://docs.oracle.com/javase/tutorial
本书内容被视为Java的核心教程,是初学者和中级程序员的必学知识。只要掌握这些内容,就可以研究网站上Java平台文档的其余部分。如果你有兴趣开发复杂的富互联网应用(RIA),可以查看JDK中的Java图形用户界面(GUI)工具包JavaFX。相关专题参考第22章。
和以前的版本一样,本书的目的是编写一个易于阅读的实用程序员指南,以协助读者学习使用Java提供的丰富环境来构建应用程序、applet和组件。让我们继续学习编程吧!
读者对象
本书同时面向新手和有经验的程序员。
新手通读本书(包括第1章中编译和运行第一个程序的每一步指令)收获会很大。
有经验的过程式语言(如C语言)程序员可以从面向对象的概念和Java程序语言的特性开始学习。
有经验的程序员可以直接学习高级主题,如泛型、并发和部署等。
本书内容适用于不同层次的程序员学习。
如何使用本书
本书可直接从头读到尾或忽略某些主题跳到另一个主题。这些信息的组织有一定的逻辑顺序,并尽可能避免引用前文。
本书例子都在JDK 8中编译。读者需要下载该版本或更新的版本以编译和运行实例。
本书对引用的一些材料提供了在线帮助(如可下载的实例、问题和习题的答案、JDK 8手册和API规范)。
相关链接在文中以脚注形式给出,例如:
8/docs/api/java/lang/Class.html

tutorial/java/generics/examples/BoxDemo.java
Oracle网站上Java文档主页的地址如下:
http://docs.oracle.com/javase/
访问脚注中给出的在线文件时,需要将脚注中的URL链接在Java文档主页之后,例如:
http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

http://docs.oracle.com/javase/tutorial/java/generics/examples/BoxDemo.java
Java教程也提供了两种格式的电子书:
移动电子书文件,适用于Kindle。
ePub电子书文件,适用于iPad、Nook和其他支持ePub格式的设备。
每本电子书包含唯一的路径,对应本书的相关章节。读者可通过Java教程主页上的链接“In Book Form”下载电子书:
http://docs.oracle.com/javase/tutorial/index.html
欢迎读者给我们反馈,请通过下述教程反馈页面联系我们:
http://docs.oracle.com/javase/feedback.html
致谢
如果没有Oracle Java工程组不知疲倦地检查本书的技术内容,本书将不能面世。本书第6版的推出,要特别感谢Alan Bateman、Alex Buckley、Stephen Colebourne、Joe Darcy、Jeff Dinkins、Mike Duigou、Brian Goetz、Andy Herrick、Stuart Marks、Thomas Ng、Roger Riggs、Leif Samuelsson和Daniel Smith。
Jordan Douglas和Dawn Tyler快速高效地制作了书中的专业插图。
Janet Blowney、Deborah Owens和Susan Shepard仔细完整地对书稿进行了编辑加工。
感谢团队成员Devika Gollapudi、Ram Goyal和Alexey Zhebel的支持。
最后(但同样重要)要感谢Sowmya Kannan、Sophia Mikulinsky、Alan Sommerer和Barbara Ramsey等管理人员的支持。

上架指导

计算机\程序设计

封底文字

本书是由Oracle公司官方出品的Java的核心教程,几位作者均为Java语言和平台开发团队资深技术文档撰写人,内容随Java版本的更新而不断完善,并经过了众多世界级Java专家细心审校,保证了本书内容的全面性、权威性和准确性。
本书基于Java SE 8版本编写,主要介绍了面向对象编程的概念、语言基础、类和对象、接口和继承、泛型、包、数字和字符串、异常、基本I/O、集合等内容。与上一版相比,新版本根据Java SE 8对内容进行了大量修订,增加了对相关新特性的介绍。新增的主要内容包括lambda表达式、类型注解、可插拔类型系统、聚合操作、默认方法、日期和时间API等。
本书是在Java SE 8版本发布后第一时间完成的教程,语言凝练,简洁易懂,适合各种层次的Java语言学习者阅读:
?新手可以通过通读本书(包括第1章“快速入门”中编译和运行第一个程序的每一步指令)来全面了解Java语言并掌握相关的编程知识。
?有经验的过程式语言(如C语言)程序员可以从面向对象的概念和Java程序语言的特性开始学习。
?有经验的程序员可以直接学习高级主题,如泛型、并发和部署等。
本书的目的是编写一个易于阅读的实用程序员指南,以协助读者学习使用Java提供的丰富的环境构建应用程序、applet和组件,是Java程序员学习Java SE 8版本的权威资料。如果读者准备Java SE 8认证考试,本书也可提供一定的帮助。附录中列出三个级别的考试介绍以及每个级别考试覆盖的项目,并给出书中涉及相关信息的章节及有价值的参考资料。此外,本书还提供了丰富的网上资源,帮助读者掌握Java的知识和编程能力。

作者简介

[美]雷蒙德?盖拉多( Raymond Gallardo) 斯科特?霍梅尔(Scott Hommel) 索亚?坎南(Sowmya Kannan) 琼尼•戈登(Joni Gordon) 沙伦?比奥卡?扎卡沃(Sharon Biocca Zakhour) 著:
雷蒙德•盖拉多(Raymond Gallardo) Oracle公司高级技术文档工程师,曾担任过高校教师和IBM技术作家。他拥有多伦多大学计算机和英语双学士学位,纽约城市大学创意写作硕士学位。
斯科特•霍梅尔(Scott Hommel) Oracle公司高级技术文档工程师,负责Java SE文档工作。过去十多年,他编写了大量Java SE和相关技术的教程、技术文章和核心文档。
索娅•坎南(Sowmya Kannan) 在Oracle公司Java SE技术文档编写团队承担多项工作,包括规划、编写、与开发团队沟通等。她有超过15年从事设计、开发和文档化Java平台、基于Java的中间件、Web应用程序的工作经历。
琼尼•戈登(Joni Gordon) Oracle公司首席技术文档工程师。她为Java SE和JavaFX的技术文档编写做出了杰出贡献。她有超过15年技术文档工程师的经历,技术背景是企业应用软件开发。
沙伦•比奥卡•扎卡沃(Sharon Biocca Zakhour) 曾担任Oracle公司和Sun公司首席技术文档工程师,先前就职于Sun公司,Sun并入Oracle后就职于Oracle。她曾编写过《The Java Tutorial, Fourth Edition》和《The JFC Swing Tutorial, Second Edition》。她毕业于加州大学伯克利分校,获得计算机科学学士学位,具有30多年的程序员、开发支持工程师和技术文档工程师经历。

译者简介

董笑菊 薛建新 吴帆 译:暂无简介

译者序

2015年3月,我们完成了《The Java Tutorial, Fifth Edition》的全部翻译和校正工作。非常幸运,原书第5版译文赶在Java 25周年庆的档期出版。更为欣慰的是,我们的翻译质量得到了市场和出版社的肯定——原书第5版译文出版5个月后,朱劼编辑再次联系我们参与原书第6版的修订和翻译工作。
原书第6版由Oracle公司的资深技术作家根据Java SE 8版本及其API编写而成,是Java SE 8发布后不久就完成的相关教程,也是初级和中级Java程序员学习Java SE 8和进行Java考试认证的权威资料。截至出版时,Java SE 8程序员II级考试OCP Java SE 8程序员认证的考试大纲尚未发布。
相对于原书第5版,第6版不仅在例子上有较大调整,而且新增许多Java SE 8的新特性,如在面向对象程序语言中引入函数式程序语言的组件,给出日期和时间的综合模型等。第6版根据Java SE 8对内容进行大量修订,并增加章节介绍这些新特性。新增的主要内容包括Lambda表达式、类型注解、可插拔类型系统、聚合操作、默认方法、日期和时间API等。另外,章节内容也进行了调整,各章都修订了不少内容,这里不一一列举,详情可查阅目录。
翻译第5版之前,我们曾经调查过对不同译著的评论,总结出译文被诟病的两个方面:多直译,少意译,译文表述不符合中文的表述习惯;专业术语前后不一致。和原书第5版的翻译原则一样,翻译第6版时,我们在尊重技术和原文的基础上,尽可能关注这两个方面。对于发现的原书第5版的错误,也在译稿中做了修正。
本书翻译是在原书第5版译文基础上完成的,参加本书翻译的老师有:上海交通大学计算机科学与工程系董笑菊博士(第8~13章)、上海第二工业大学计算机与信息工程学院薛建新博士(第1~7、21、22章以及附录)、上海交通大学计算机科学与工程系吴帆博士(第14~20章)。虽然我们已经对译稿进行仔细校对和整合,使得译文尽可能符合中文习惯和保持术语的一致性,但鉴于水平有限且工作量大,译文一定还存在许多不足之处。在此敬请各位同行专家学者和广大读者批评指正,欢迎大家将相关意见、建议以及发现的错误发送到邮箱basics@sjtu.edu.cn。感谢机械工业出版社,尤其是朱劼和唐晓琳编辑,没有她们的信任与支持,整个翻译工作是不可能完成的。

译者
2017.5

图书目录

出版者的话
译者序
前言
第1章 快速入门 1
1.1 关于Java技术 1
1.1.1 Java程序语言 1
1.1.2 Java平台 2
1.1.3 Java技术的功能 3
1.1.4 Java技术的优势 3
1.2 “Hello World!”实例程序 4
1.2.1 用NetBeans IDE开发“Hello World!” 4
1.2.2 在Microsoft Windows中开发“Hello World!” 10
1.2.3 在Solaris和Linux中开发“Hello World!” 13
1.3 “Hello World!”实例程序剖析 15
1.3.1 源码注释 15
1.3.2 HelloWorldApp类定义 15
1.3.3 main方法 16
1.4 常见问题(及其解决方案) 16
1.4.1 编译器问题 16
1.4.2 运行时问题 18
1.5 问题和练习:快速入门 19
第2章 面向对象的编程概念 21
2.1 对象 21
2.2 类 22
2.3 继承 23
2.4 接口 24
2.5 包 25
2.6 问题和练习:面向对象的编程概念 25
第3章 语言基础 27
3.1 变量 27
3.1.1 命名 28
3.1.2 基本数据类型 28
3.1.3 数组 32
3.1.4 小结 35
3.1.5 问题和练习:变量 36
3.2 运算符 36
3.2.1 赋值运算符、算术运算符和一元运算符 37
3.2.2 等式运算符、关系运算符和条件运算符 40
3.2.3 位运算符和移位运算符 42
3.2.4 小结 42
3.2.5 问题和练习:运算符 43
3.3 表达式、语句和块 44
3.3.1 表达式 44
3.3.2 语句 45
3.3.3 块 45
3.3.4 问题和练习:表达式、语句和块 46
3.4 控制流语句 46
3.4.1 if-then语句和if-then-else语句 46
3.4.2 switch语句 47
3.4.3 while语句和do-while语句 51
3.4.4 for语句 52
3.4.5 分支语句 53
3.4.6 小结 56
3.4.7 问题和练习:控制流语句 56
第4章 类和对象 58
4.1 类 58
4.1.1 声明类 59
4.1.2 声明成员变量 60
4.1.3 定义方法 61
4.1.4 构建构造器 62
4.1.5 将消息传给方法或构造器 63
4.2 对象 66
4.2.1 创建对象 67
4.2.2 使用对象 69
4.3 类的更多细节 71
4.3.1 从方法返回值 71
4.3.2 使用this关键字 73
4.3.3 控制对类成员的访问 74
4.3.4 类成员 75
4.3.5 初始化字段 78
4.3.6 小结 79
4.3.7 问题和练习:类 79
4.3.8 问题和练习:对象 80
4.4 嵌套类 81
4.4.1 为什么使用嵌套类 81
4.4.2 静态嵌套类 82
4.4.3 内部类 82
4.4.4 覆盖 82
4.4.5 序列化 83
4.4.6 内部类实例 83
4.4.7 局部类和匿名类 85
4.4.8 Lambda表达式 92
4.4.9 何时使用嵌套类、局部类、匿名类和Lambda表达式 105
4.4.10 问题和练习:嵌套类 105
4.5 枚举类型 106
4.5.1 问题和练习:枚举类型 108
第5章 注解 109
5.1 注解基础知识 109
5.1.1 注解的格式 109
5.1.2 注解的使用场景 110
5.2 声明注解类型 110
5.3 预定义注解类型 111
5.3.1 Java语言使用的注解类型 111
5.3.2 应用于其他注解的注解 112
5.4 类型注解和可插拔类型系统 113
5.5 重复注解 114
5.5.1 声明重复注解类型 114
5.5.2 声明容器注解类型 115
5.5.3 检索注解 115
5.5.4 设计时的注意事项 115
5.6 问题和练习:注解 115
第6章 接口与继承 117
6.1 接口 117
6.1.1 Java语言的接口 117
6.1.2 将接口用作API 118
6.1.3 定义接口 118
6.1.4 实现接口 119
6.1.5 将接口用作类型 120
6.1.6 进化接口 121
6.1.7 默认方法 122
6.1.8 小结 129
6.1.9 问题和练习:接口 129
6.2 继承 130
6.2.1 Java平台中类的层次结构 130
6.2.2 继承实例 131
6.2.3 子类能做什么 132
6.2.4 超类的私有成员 132
6.2.5 转换对象 132
6.2.6 状态、实现和类型的多重继承 133
6.2.7 覆盖和屏蔽方法 133
6.2.8 多态性 136
6.2.9 屏蔽字段 138
6.2.10 使用super关键字 138
6.2.11 将对象用作超类 140
6.2.12 编写final类和方法 142
6.2.13 抽象方法和类 143
6.2.14 小结 145
6.2.15 问题和练习:继承 145
第7章 泛型 147
7.1 为什么用泛型 147
7.2 泛型类型 147
7.2.1 一个简单的Box类 148
7.2.2 Box类的泛型版本 148
7.2.3 类型参数命名约定 148
7.2.4 泛型类型的调用和实例化 149
7.2.5 钻石运算符 149
7.2.6 多个类型参数 149
7.2.7 参数化类型 150
7.2.8 原生类型 150
7.3 泛型方法 151
7.4 受限类型形式参数 152
7.4.1 多重限制 153
7.4.2 泛型方法和受限类型形式参数 154
7.5 泛型、继承和子类型 154
7.5.1 泛型类和子类型 155
7.6 类型推导 156
7.6.1 类型推导和泛型方法 156
7.6.2 类型推导和泛型类的实例化 157
7.6.3 类型推导与泛型类和非泛型类的泛型构造函数 157
7.6.4 目标类型 158
7.7 通配符 159
7.7.1 上界通配符 159
7.7.2 无界通配符 160
7.7.3 下界通配符 160
7.7.4 通配符和子类型 161
7.7.5 通配符匹配和辅助方法 162
7.7.6 通配符使用指南 164
7.8 类型擦除 165
7.8.1 泛型类型的擦除 165
7.8.2 泛型方法的擦除 166
7.8.3 类型擦除效果和桥方法 167
7.8.4 不可具体化类型和可变参数方法 168
7.9 泛型的局限性 170
7.9.1 不能用基本数据类型实例化泛型类型 170
7.9.2 不能创建类型参数实例 171
7.9.3 不能声明类型为“类型参数”的静态字段 171
7.9.4 对参数化类型不能用类型转换或instanceof运算符 172
7.9.5 不能创建参数化类型数组 172
7.9.6 不能创建、捕获或抛出参数化类型的对象 172
7.9.7 每次重载时其形式参数类型都被擦除为相同的原生类型的方法不能重载 173
7.10 问题和练习:泛型 173
第8章 程序包 175
8.1 程序包的创建和使用 175
8.1.1 程序包的创建 176
8.1.2 程序包的命名 177
8.1.3 程序包成员的使用 177
8.1.4 源文件和类文件的管理 180
8.1.5 小结 182
8.2 问题和练习:创建和使用包 182
第9章 数字和字符串 183
9.1 数字 183
9.1.1 Number类 183
9.1.2 格式化数字打印输出 184
9.1.3 其他数学运算方法 188
9.1.4 自动装箱和拆箱 191
9.1.5 小结 193
9.1.6 问题和练习:数字 193
9.2 字符 194
9.2.1 转义字符 194
9.3 字符串 195
9.3.1 创建字符串 195
9.3.2 字符串长度 196
9.3.3 字符串连接 196
9.3.4 创建格式字符串 197
9.3.5 数字和字符串之间的转换 197
9.3.6 操作字符串中的字符 199
9.3.7 比较字符串和字符串的子串 202
9.3.8 StringBuilder类 203
9.3.9 小结 207
9.3.10 问题和练习:字符和字符串 207
第10章 异常 209
10.1 什么是异常 209
10.2 捕获或指明规定 210
10.2.1 三类异常 210
10.2.2 绕过捕获或指明 210
10.3 捕获和处理异常 211
10.3.1 try块 211
10.3.2 catch块 212
10.3.3 finally块 213
10.3.4 try-with-resources语句 214
10.3.5 汇总 216
10.4 指明一个方法抛出的异常 218
10.5 如何抛出异常 219
10.5.1 throw语句 219
10.5.2 Throwable类及其子类 220
10.5.3 Error类 220
10.5.4 Exception类 220
10.5.5 链式异常 220
10.5.6 创建异常类 221
10.6 未检查异常:争议 222
10.7 异常的优点 223
10.7.1 优点1:把错误处理代码和“正规”代码分离开 223
10.7.2 优点2:根据调用栈上传错误 224
10.7.3 优点3:对错误类型进行分组并加以区分 226
10.8 小结 226
10.9 问题和练习:异常 227
第11章 基本I/O和NIO.2 229
11.1 I/O流 229
11.1.1 字节流 230
11.1.2 字符流 231
11.1.3 缓冲流 233
11.1.4 扫描和格式化 234
11.1.5 命令行I/O 238
11.1.6 数据流 240
11.1.7 对象流 241
11.2 文件I/O(以NIO.2为特征) 243
11.2.1 什么是路径(以及其他文件系统情况) 243
11.2.2 Path类 245
11.2.3 文件操作 250
11.2.4 检查文件或目录 253
11.2.5 删除文件或目录 254
11.2.6 复制文件或目录 254
11.2.7 移动文件或目录 255
11.2.8 管理元数据(文件和文件存储属性) 255
11.2.9 读取、写入和创建文件 261
11.2.10 随机访问文件 266
11.2.11 创建和读取目录 267
11.2.12 符号链接或其他方式的链接 270
11.2.13 遍历文件树 272
11.2.14 查找文件 275
11.2.15 监视目录的变化 278
11.2.16 其他有用的方法 283
11.2.17 遗留文件的I/O代码 284
11.3 小结 286
11.4 问题和练习:基本I/O 286
第12章 集合 287
12.1 集合简介 287
12.1.1 集合框架是什么 287
12.1.2 Java集合框架的好处 288
12.2 接口 288
12.2.1 Collection接口 290
12.2.2 遍历集合 291
12.2.3 Collection接口的批量操作 292
12.2.4 Collection接口的数组操作 293
12.2.5 Set接口 293
12.2.6 List接口 296
12.2.7 Queue接口 302
12.2.8 Deque接口 303
12.2.9 Map接口 304
12.2.10 对象排序 310
12.2.11 SortedSet接口 315
12.2.12 SortedMap接口 317
12.2.13 小结 318
12.2.14 问题和练习:接口 318
12.3 聚合操作 319
12.3.1 管道和流 320
12.3.2 聚合操作和迭代器之间的差异 321
12.3.3 归约 321
12.3.4 并行 325
12.3.5 副作用 328
12.3.6 问题和练习:聚合操作 330
12.4 实现 331
12.4.1 Set实现 333
12.4.2 List实现 334
12.4.3 Map实现 335
12.4.4 Queue实现 336
12.4.5 Deque实现 337
12.4.6 封装实现 338
12.4.7 简单实现 340
12.4.8 小结 341
12.4.9 问题和练习:实现 341
12.5 算法 342
12.5.1 排序 342
12.5.2 混排 344
12.5.3 常规数据操作 344
12.5.4 查询 344
12.5.5 组合 345
12.5.6 查找极值 345
12.6 自定义集合实现 345
12.6.1 编写实现的原因 345
12.6.2 如何编写自定义实现 346
12.7 互操作性 347
12.7.1 兼容性 347
12.7.2 API设计 349
第13章 并发 351
13.1 进程和线程 351
13.1.1 进程 351
13.1.2 线程 351
13.2 线程对象 352
13.2.1 定义和启动一个线程 352
13.2.2 使用sleep方法暂停执行 353
13.2.3 中断 353
13.2.4 联合 354
13.2.5 SimpleThreads实例 355
13.3 同步 356
13.3.1 线程冲突 356
13.3.2 内存一致性错误 357
13.3.3 同步方法 358
13.3.4 内部锁和同步 359
13.3.5 原子访问 360
13.4 活性 361
13.4.1 死锁 361
13.4.2 饥饿和活锁 362
13.5 保护块 362
13.6 不可变对象 365
13.6.1 同步类实例 365
13.6.2 定义不可变对象的策略 367
13.7 高级并发对象 368
13.7.1 锁对象 368
13.7.2 执行器 370
13.7.3 并发集合 374
13.7.4 原子变量 375
13.7.5 并发随机数 376
13.8 问题和练习:并发 376
第14章 正则表达式 378
14.1 简介 378
14.1.1 正则表达式 378
14.1.2 正则表达式的表示方法 378
14.2 测试工具 379
14.3 字符串文字 380
14.3.1 元字符 380
14.4 字符类 381
14.4.1 简单类 381
14.5 预定义字符类 384
14.6 量词 386
14.6.1 零长度匹配 387
14.6.2 捕捉组和带量词的字符类 389
14.6.3 贪婪型、勉强型和占有型量词之间的区别 390
14.7 捕捉组 390
14.7.1 编号 390
14.7.2 反向引用 391
14.8 边界匹配器 391
14.9 Pattern类方法 393
14.9.1 使用标记创建模式 393
14.9.2 嵌套标记表达式 394
14.9.3 使用matches(String,CharSequence)方法 395
14.9.4 使用split(String)方法 395
14.9.5 其他实用方法 396
14.9.6 java.lang.String中Pattern方法的等价方法 396
14.10 Matcher类方法 397
14.10.1 索引方法 397
14.10.2 学习方法 397
14.10.3 替换方法 397
14.10.4 使用start方法和end方法 398
14.10.5 使用matches方法和lookingAt方法 399
14.10.6 使用replaceFirst(St-ring)方法和replace-All(String)方法 399
14.10.7 使用appendReplacement(StringBuffer,String)方法和appendTail(Str-ingBuffer)方法 400
14.10.8 java.lang.String中Matcher方法的等价方法 401
14.11 PatternSyntaxExcep-tion类方法 401
14.12 Unicode支持 403
14.12.1 匹配特定代码点 403
14.12.2 Unicode字符属性 403
14.13 问题和练习:正则表达式 404
第15章 平台环境 405
15.1 配置工具 405
15.1.1 属性 405
15.1.2 命令行参数 408
15.1.3 环境变量 409
15.1.4 其他配置工具 410
15.2 系统工具 410
15.2.1 命令行I/O对象 410
15.2.2 系统属性 410
15.2.3 安全管理器 413
15.2.4 系统的其他方法 414
15.3 PATH和CLASSPATH环境变量 414
15.3.1 更新PATH环境变量(Microsoft Windows) 414
15.3.2 更新PATH环境变量(Solaris、Linux和OS X) 416
15.3.3 检查CLASSPATH环境变量(所有平台) 416
15.4 问题和练习:平台环境 417
第16章 JAR文件 418
16.1 JAR文件使用入门 418
16.1.1 创建JAR文件 419
16.1.2 查看JAR文件内容 421
16.1.3 抽取JAR文件内容 422
16.1.4 更新JAR文件 423
16.1.5 运行打包为JAR的软件 424
16.2 清单文件使用入门 426
16.2.1 理解默认的清单文件 426
16.2.2 修改清单文件 426
16.2.3 设置应用程序的入口点 427
16.2.4 将类文件加入JAR文件的类路径 428
16.2.5 设置包版本信息 429
16.2.6 用JAR文件封装包 430
16.2.7 使用清单属性增强安全性 430
16.3 JAR文件的签名和验证 431
16.3.1 理解签名和验证 431
16.3.2 对JAR文件签名 433
16.3.3 验证签名的JAR文件 435
16.4 使用JAR相关API 435
16.4.1 实例:JarRunner应用 436
16.4.2 JarClassLoader类 436
16.4.3 JarRunner类 438
16.5 问题和练习:JAR文件 439
第17章 Java Web Start 440
17.1 开发Java Web Start应用 440
17.1.1 创建顶层JPanel类 441
17.1.2 创建应用 441
17.1.3 从最后部署机制中分离出核心方法的好处 442
17.1.4 获取资源 442
17.2 部署Java Web Start应用 442
17.2.1 设置Web服务器 445
17.3 显示自定义的加载进度指示器 445
17.3.1 开发自定义的加载进度指示器 445
17.3.2 为Java Web Start应用指定自定义的加载进度指示器 447
17.4 运行Java Web Start应用 447
17.4.1 通过浏览器运行Java Web Start应用 448
17.4.2 通过Java Cache Viewer运行Java Web Start应用 448
17.4.3 从桌面运行Java Web Start应用 448
17.5 Java Web Start与安全 448
17.5.1 动态下载HTTPS认证 449
17.6 Java Web Start常见问题 449
17.7 问题和练习:Java Web Start 450
第18章 applet 451
18.1 开始使用applet 451
18.1.1 定义Applet类的子类 452
18.1.2 里程碑方法 452
18.1.3 applet的生命周期 452
18.1.4 applet的执行环境 454
18.1.5 开发applet 454
18.1.6 部署applet 457
18.2 applet的更多功能 459
18.2.1 查找和加载数据文件 459
18.2.2 定义和使用applet参数 460
18.2.3 显示简短的状态字符串 462
18.2.4 在浏览器中显示文档 462
18.2.5 从applet调用JavaScript代码 464
18.2.6 从JavaScript代码中调用applet方法 465
18.2.7 通过事件句柄处理初始化状态 468
18.2.8 操纵applet网页的DOM 469
18.2.9 显示自定义的加载进度指示器 471
18.2.10 将诊断写入标准输出和错误流 474
18.2.11 开发可拖动的applet 475
18.2.12 和其他applet交互 477
18.2.13 与服务器端应用交互 478
18.2.14 applet能做什么和不能做什么 480
18.3 applet常见问题及解决方案 481
18.4 问题和练习:applet 482
第19章 Java富互联网应用系统 483
19.1 设置可信参数和安全属性 483
19.1.1 系统属性 484
19.2 JNLP API 485
19.2.1 通过JNLP API访问客户端 486
19.3 cookie 489
19.3.1 cookie的类型 489
19.3.2 RIA中的cookie支持 489
19.3.3 获取cookie 489
19.4 自定义加载体验 491
19.5 RIA的安全 491
19.6 安全RIA手册 492
19.6.1 遵循安全编程指导 492
19.6.2 使用最新版JRE测试 492
19.6.3 加入清单属性 492
19.6.4 使用已签署的JNLP文件 492
19.6.5 签署JAR文件并加盖时间戳 493
19.6.6 使用HTTPS协议 493
19.6.7 避免本地RIA 493
19.7 问题和练习:Java富互联网应用系统 493
第20章 深入理解部署 495
20.1 RIA的用户接纳 495
20.2 部署工具 496
20.2.1 部署工具脚本所在位置 496
20.2.2 部署applet 496
20.2.3 部署Java Web Start应用 499
20.2.4 检查客户端的JRE软件版本 501
20.3 Java网络加载协议 501
20.3.1 JNLP文件结构 501
20.4 部署的最佳实践 505
20.4.1 减少下载时间 505
20.4.2 避免不必要的更新检查 506
20.4.3 确保JRE软件存在 508
20.5 问题和练习:深入理解部署 509
第21章 日期/时间API 510
21.1 日期/时间API概述 510
21.2 日期/时间API设计原则 510
21.2.1 明确性 510
21.2.2 流式 510
21.2.3 不可变性 511
21.2.4 可扩展性 511
21.3 日期/时间程序包 511
21.4 方法命名约定 511
21.5 标准日历 512
21.6 日期/时间类概述 512
21.7 DayOfWeek和Month枚举器 513
21.7.1 DayOfWeek枚举器 513
21.7.2 Month枚举器 513
21.8 日期类 515
21.8.1 LocalDate 515
21.8.2 YearMonth 515
21.8.3 MonthDay 516
21.8.4 Year 516
21.9 日期和时间类 516
21.9.1 LocalTime 516
21.9.2 LocalDateTime 517
21.10 时区和时区偏移类 517
21.10.1 Zoneld和ZoneOff-set 517
21.10.2 日期/时间类 518
21.11 Instant类 520
21.12 解析和格式化 521
21.12.1 解析 522
21.12.2 格式化 522
21.13 时间程序包 523
21.13.1 Temporal和Temporal-Accessor 523
21.13.2 ChronoField和IsoFields 524
21.13.3 ChronoUnit 524
21.13.4 时间调节器 524
21.13.5 时间查询 526
21.14 周期和持续时间 527
21.14.1 Duration 528
21.14.2 ChronoUnit 528
21.14.3 Period 528
21.15 时钟 529
21.16 非ISO日期的转换 530
21.16.1 转换成非ISO日期 530
21.16.2 转换成ISO日期 531
21.17 遗留的日期/时间代码 532
21.17.1 与遗留代码的互操作 532
21.17.2 将java.util日期和时间功能映射给java.time 533
21.17.3 日期和时间的格式化 534
21.18 小结 534
21.19 问题和练习:日期/时间API 535
第22章 JavaFX简介 536
附录 Java程序语言认证考试复习大纲 537

教学资源推荐
作者: H.H.Tan,T.B.D'Orazio,S.H.Or,Marian M.Y.Choy著
作者: [美]艾伦 A. A. 多诺万(Alan A. A. Donovan)布莱恩 W. 柯尼汉(Brian W. Kernighan)著
作者: 郑阿奇