Java语言导学(原书第5版)
作者 : [美]沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 索娅·坎南(Sowmya Kannan) 雷蒙德·盖拉多(Raymond Gallardo) 著
译者 : 董笑菊 薛建新 吴帆 译
丛书名 : 计算机科学丛书
出版日期 : 2015-07-01
ISBN : 978-7-111-50392-7
定价 : 79.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 462
开本 : 16
原书名 : The Java Tutorial: A Short Course on the Basics
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书是Oracle公司官方Java教程的最新版,基于最新的Java SE 7。书中主要介绍了面向对象编程的概念、语言基础、类和对象、接口和继承、泛型、包、数字和字符串、异常、基本I/O、集合、并发、正则表达式等内容,涵盖了NIO.2、新的Fork/Join框架等Java SE 7的新特性,更新了泛型、Java Web Start和applet等的相关内容。此外,附录还介绍了如何准备Java编程语言认证考试。

本书由Oracle公司资深技术文档撰写人编写,并经过了Java开发团队细心审读,内容全面详实、准确清晰,文字简洁易懂,可读性强。

本书层次清晰、由浅入深、各章相对独立,既可供初学者通读学习,也可供有经验的程序员巩固提高或作为平时参考。

图书特色

本书由Oracle公司Java语言和平台开发团队资深技术文档撰写人基于Java SE 7版本编写,并经过了众多世界级Java专家细心审校,有力地保证了权威性和准确性,内容全面翔实、准确清晰,文字简洁易懂、可读性强,被视为Java的核心教程。
书中主要介绍了面向对象编程的概念、语言基础、类和对象、接口和继承、泛型、包、数字和字符串、异常、基本I/O、集合等内容,涵盖了NIO.2、新的Fork/Join框架等Java SE 7的新特性,更新了泛型、Java Web Start和applet等的相关内容。每章的后面都有问题和练习,附录中还给出Java编程语言认证考试的相关内容。

沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 是一位技术作家,先前就职于Sun公司,Sun公司并入Oracle后就职于Oracle公司。她曾编写过《The Java Tutorial, Fourth Edition》和《The JFC Swing Tutorial, Second Edition》。她毕业于加州大学伯克利分校,并获得计算机科学学士学位,具有30年的程序员、开发支持工程师和技术作家经历。
索娅·坎南(Sowmya Kannan) 以前就职于Sun公司,Sun公司并入Oracle后成为Oracle 公司技术作家,目前是Java SE文档团队的管理员。她有超过15年从事设计、开发和文档化Java Platform、基于Java的中间件、Web应用程序的工作经历。
雷蒙德·盖拉多(Raymond Gallardo) Oracle公司的技术作家,曾担任过高校教师和IBM技术作家。他拥有多伦多大学计算机和英语双学士学位,纽约城市大学创意写作硕士学位。

图书前言

自2010年年初Oracle公司收购Sun公司以来,Java语言迎来了激动人心的时代。正如Java Community Process(JCP)计划的活动所印证的,Java语言将不断发展。本书基于Java SE 7版本并引用该版本的API。
相比本书第4版(针对的是Java版本6),第5版引入了一些新的特性,如关于NIO.2的内容、新的文件I/O API和将遗留代码迁移到这些新API的相关信息。部署部分扩展成第18章和第19章。Fork/Join特性部分添加到第12章。项目Coin的开发也已添加到合适的章节,包括新的try-with-resources语句、单个异常处理器捕获多种类型异常的能力、二进制字符串的支持,以及引入简洁泛型代码的diamond语法。
除这些新特性外,本书的前面章节也进行了重写,增加了一些新的信息。例如,更新第6章、第16章和第17章的内容,替换附录中Java认证考试的内容。
如果你准备参加Java SE 7认证考试,本书可提供一定的帮助。附录中列出三个级别的考试,详细介绍每个级别考试覆盖的项目,并指出书中涉及相关信息的章节及有价值的参考资料。注意,这只是参加认证考试要准备的众多内容之一。
所有内容都由Oracle Java engineering的成员审校过,以确保书中信息都是正确和最新的。本书也被置于Oracle网站的在线教程内,其网址如下:http://docs.oracle.com/javase/tutorial。
本书内容被视为Java的核心教程,是初学者和中级程序员的必学知识。只要掌握这些内容就可以研究网站上Java平台文档的其余部分。如果你有兴趣开发复杂的富互联网应用(RIA),可以查看最前沿的Java图形用户界面(GUI)工具包JavaFX。
正如发布的Java SE 7 update 5所述,下载JDK时可以自动获取JavaFX软件开发包(SDK)。要获取更多信息可查看JavaFX文档,其网址如下: http://docs.oracle.com/javafx。
和以前的版本一样,本书的目的是编写一个易于阅读的实用程序员指南,以协助读者学习使用Java提供的丰富的环境构建应用程序、applet和组件。让我们继续学习编程吧!
读者对象
本书同时面向新手和有经验的程序员。
新手通读本书(包括第1章中编译和运行第一个程序的每一步指令)将有最大的收获。
有经验的过程式语言程序员(如C语言)可以从面向对象的概念和Java程序语言的特性开始学习。
有经验的程序员可以直接学习高级主题,如泛型、并发和部署等。
本书内容适用于不同层次的程序员学习。
如何使用本书
本书可直接从头读到尾或忽略某些主题跳到另一个主题。这些信息的组织有一定的逻辑顺序,且尽可能忽略一些参考文献。
本书例子都在JDK 7 版本中编译。读者要下载该版本或更新的版本来编译和运行实例。
本书对引用的一些材料提供了在线帮助(如可下载的实例、问题和练习的答案、JDK 7手册和API规范),其链接在文中以脚注形式给出,例如:7/docs/api/java/lang/Class.html和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 engineering团队不知疲倦地检查本书的技术内容,本书将不能面世。本书第5版的推出,要特别感谢Alan Bateman、Alex Buckley、Calvin Cheung、Maurizio Cimadamore、Joe Darcy、Andy Herrick、Stuart Marks、Igor Nekrestyanov、Thomas Ng、Nam Nguyen和Daniel Smith。
Jordan Douglas和Dawn Tyler快速高效地创建了本书中专业的插图。Devika Gollapudi为书中的截屏图提供了有价值的帮助。
编辑Deborah Owens和Susan Shepard仔细完整地对书稿进行了编辑加工。
感谢团队成员Bhavesh Patel、Devika Gollapudi和Santhosh La的支持。
最后要感谢Alan Sommerer、Barbara Ramsey、Sophia Mikulinsky和Sowmya Kannan等管理人员的支持。

上架指导

计算机\程序设计

封底文字

Java语言导学第5版由Oracle公司Java语言和平台开发团队资深技术文档撰写人基于Java SE 7版本编写,并经过了众多世界级Java专家细心审校,有力地保证了权威性和准确性,内容全面翔实、准确清晰,文字简洁易懂、可读性强,被视为Java的核心教程。
书中主要介绍了面向对象编程的概念、语言基础、类和对象、接口和继承、泛型、包、数字和字符串、异常、基本I/O、集合等内容,涵盖了NIO.2、新的Fork/Join框架等Java SE 7的新特性,更新了泛型、Java Web Start和applet等的相关内容。每章的后面都有问题和练习,附录中还给出Java编程语言认证考试的相关内容。

作者简介

[美]沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 索娅·坎南(Sowmya Kannan) 雷蒙德·盖拉多(Raymond Gallardo) 著:沙伦?比奥卡?扎卡沃(Sharon Biocca Zakhour)是一位技术作家,先前就职于Sun公司,Sun并入Oracle后就职于Oracle。她曾编写过《The Java Tutorial, Fourth Edition》和《The JFC Swing Tutorial, Second Edition》。她毕业于加州大学伯克利分校,并获得计算机科学学士学位,具有30年的程序员、开发支持工程师和技术作家经历。
索娅?坎南(Sowmya Kannan)以前就职于Sun公司,Sun公司并入Oracle后成为Oracle 公司技术作家,目前是Java SE文档团队的管理员。她有超过15年从事设计、开发和文档化Java Platform、基于Java的中间件、Web应用程序的工作经历。
雷蒙德?盖拉多(Raymond Gallardo)Oracle公司的技术作家,曾担任过高校教师和IBM技术作家。他拥有多伦多大学计算机和英语双学士学位,纽约城市大学创意写作硕士学位。

译者简介

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

译者序

2013年第一次与朱劼编辑接触谈到翻译这本书的时候,我们觉得翻译难度很大。因为这本书的译文已经出版到第4版,如果更新不多,这一版就会变得可有可无;而且读者很可能会与较早版本的译文质量进行比较,稍有差池就会被诟病。经过一个多月的接洽,我们最终接下这本书的翻译任务,因为我们发现本书内容很有特点。
原书第5版写于Oracle公司收购Sun公司后,是根据Java SE 7版本及其API编写的,因此它是Oracle和Java Community Process的结合体,对原书第4版有很大改进,包括:介绍了Java的一些新特性,如NIO.2的内容、新的文件I/O API和将遗留代码迁移到这些新API的相关信息等;将实际项目Coin的开发内容插入相应章节,包括try-with-resources语句、单个异常处理器捕获多种类型异常的能力等;将原有的有关部署的内容扩展成第18章和第19章;介绍了泛型中的diamond语法等。第5版重写了第6、16、17章的内容,更新了附录中关于Java认证考试的内容,还更新了书中涉及的大部分实例。另外,第5版与以前的版本一样,也提供在线帮助,具体网址会在前言部分提到。
我们在开始翻译之前,在网上查看了一些关于不同译著的评论,总结出译文被诟病的两个方面:多直译,少意译,译文表述不符合中文的表述习惯;专业术语前后不一致。因此翻译这一版时在尊重技术和原文的基础上,尽可能关注这两个方面,对于发现的原书第5版中的错误,也在译稿中做了修正。
机缘巧合,在我们完成并交付这本书的译稿初稿时,被告知本书计划在2015年Java 20周年庆档期出版,出版社希望我们尽快完成译文的审校工作以配合出版。我们很高兴这一版中译本赶上Java的这一盛事,也希望此译本能给读者带来新的收获。
参与本书翻译的老师有:上海交通大学计算机科学与工程系董笑菊博士(翻译第7~12章)、上海第二工业大学工学部计算机应用工程系薛建新博士(翻译第1~6章和附录)、上海交通大学计算机科学与技术系吴帆博士(翻译第13~19章)。虽然我们已经对译稿进行仔细校对和整合,使译文尽可能符合中文习惯和保持术语的一致性,但鉴于水平有限且工作量大,译文一定还存在许多不足之处,在此敬请各位同行专家和广大读者批评指正,欢迎大家将相关意见、建议以及发现的错误发送到邮箱:basics@sjtu.edu.cn。感谢机械工业出版社,尤其是朱劼和李艺编辑,没有她们的信任、耐心与支持,整个翻译工作不可能完成。

2015年1月
译者于上海

图书目录

出版者的话
译者序
前言
第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 !” ·········9
1.2.3 在Solaris 和Linux 中开发“Hello World !” ·······12
1.3 “Hello World !”实例程序剖析 ····14
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 章 面向对象的编程概念 ··············20
2.1 对象 ···············20
2.2 类 ···················22
2.3 继承 ···············23
2.4 接口 ···············23
2.5 包 ···················24
2.6 问题和练习:面向对象的编程概念················24
第3 章 语言基础···················26
3.1 变量 ···············26
3.1.1 命名 ··········27
3.1.2 基本数据类型 ···········27
3.1.3 数组 ··········30
3.1.4 小结 ··········33
3.1.5 问题和练习:变量 ····················34
3.2 运算符 ············34
3.2.1 赋值运算符、算术运算符和一元运算符 ··············35
3.2.2 等式运算符、关系运算符和条件运算符 ··············37
3.2.3 位运算符和移位运算符 ············39
3.2.4 小结 ··········39
3.2.5 问题和练习:运算符 ················40
3.3 表达式、语句和块 ·········41
3.3.1 表达式 ······41
3.3.2 语句 ··········42
3.3.3 块 ··············42
3.3.4 问题和练习:表达式、语句和块·················43
3.4 控制流语句 ····················43
3.4.1 if-then 语句和if-then-else语句··············43
3.4.2 switch 语句 ···············44
3.4.3 while 语句和do-while 语句 ······48
3.4.4 for 语句·····49
3.4.5 分支语句 ··················50
3.4.6 小结 ··········52
3.4.7 问题和练习:控制流语句 ········53
第4 章 类和对象···················54
4.1 类 ···················54
4.1.1 声明类 ······55
4.1.2 声明成员变量 ···········56
4.1.3 定义方法 ··················57
4.1.4 构建构造器 ···············58
4.1.5 将消息传给方法或构造器 ········59
4.2 对象 ···············62
4.2.1 创建对象 ··················63
4.2.2 使用对象 ··················65
4.3 类的更多细节·················67
4.3.1 从方法返回值 ···········67
4.3.2 使用this 关键字 ·······68
4.3.3 控制对类成员的访问 ················69
4.3.4 实例和类成员 ···········70
4.3.5 初始化字段 ···············73
4.3.6 小结 ··········74
4.3.7 问题和练习:类 ·······75
4.3.8 问题和练习:对象 ····················76
4.4 嵌套类 ············76
4.4.1 为什么使用嵌套类 ····················77
4.4.2 静态嵌套类 ···············77
4.4.3 内部类 ······77
4.4.4 内部类实例 ···············78
4.4.5 小结 ··········79
4.4.6 问题和练习:嵌套类 ················79
4.5 枚举类型 ········80
4.5.1 问题和练习:枚举类型 ············82
4.6 注解 ···············82
4.6.1 文档 ··········82
4.6.2 编译器使用的注解 ····················83
4.6.3 注解的处理 ···············84
4.6.4 问题和练习:注解 ····················85
第5 章 接口与继承 ··············86
5.1 接口 ···············86
5.1.1 Java 语言的接口 ·······86
5.1.2 将接口用作API ········87
5.1.3 接口和多重继承 ·······87
5.1.4 定义接口 ··················87
5.1.5 实现接口 ··················88
5.1.6 将接口用作类型 ·······89
5.1.7 重写接口 ··················90
5.1.8 小结 ··········90
5.1.9 问题和练习:接口 ····················91
5.2 继承 ···············91
5.2.1 Java 平台中类的层次结构 ········91
5.2.2 继承实例 ··················92
5.2.3 子类能做什么 ···········93
5.2.4 超类的私有成员 ·······93
5.2.5 转换对象 ··················93
5.2.6 覆盖和屏蔽方法 ·······94
5.2.7 多态性 ······95
5.2.8 屏蔽字段 ··················97
5.2.9 使用super 关键字 ·····97
5.2.10 将对象用作超类 ·····98
5.2.11 编写final 类和方法 ··············101
5.2.12 抽象方法和类 ·······101
5.2.13 小结 ······103
5.2.14 问题和练习:继承 ················103
第6 章 泛型 ·····105
6.1 为什么用泛型···············105
6.2 泛型类型 ······106
6.2.1 一个简单的Box 类 ·················106
6.2.2 Box 类的泛型版本 ··················106
6.2.3 类型参数命名约定 ··················107
6.2.4 泛型类型的调用和实例化 ······107
6.2.5 钻石运算符 ·············107
6.2.6 多个类型参数 ·········108
6.2.7 参数化类型 ·············108
6.2.8 原生类型 ················108
6.3 泛型方法 ······ 110
6.4 受限类型形式参数 ······· 110
6.4.1 多重限制 ················ 111
6.4.2 泛型方法和受限类型形式参数············· 112
6.5 泛型、继承和子类型 ··················· 112
6.5.1 泛型类和子类型 ····· 113
6.6 类型推导 ······ 114
6.6.1 类型推导和泛型方法 ·············· 114
6.6.2 类型推导和泛型类的实例化 ··············· 115
6.6.3 类型推导与泛型类和非泛型类的泛型构造函数 ··········· 115
6.7 通配符 ······ 116
6.7.1 上界通配符 ············· 116
6.7.2 无界通配符 ············· 117
6.7.3 下界通配符 ············· 118
6.7.4 通配符和子类型 ····· 118
6.7.5 通配符匹配和辅助方法 ·········· 119
6.7.6 通配符使用指南 ·····121
6.8 类型擦除 ······122
6.8.1 泛型类型的擦除 ·····122
6.8.2 泛型方法的擦除 ·····123
6.8.3 类型擦除效果和桥方法 ··········124
6.8.4 不可具体化类型 ·····125
6.9 泛型的局限性···············128
6.9.1 不能用基本数据类型实例化泛型类型 ················128
6.9.2 不能创建类型参数实例 ··········128
6.9.3 不能声明类型为“类型参数”的静态字段 ·····128
6.9.4 对参数化类型不能用类型转换或instanceof 运算符 ·······129
6.9.5 不能创建参数化类型数组 ······129
6.9.6 不能创建、捕获或抛出参数化类型的对象 ·········130
6.9.7 每次重载时其形式参数类型都被擦为相同的原生类型的方法不能重载 ·········130
6.10 问题和练习:泛型 ·····130
第7 章 程序包 ·····133
7.1 程序包的创建···············134
7.2 程序包的命名···············135
7.2.1 命名约定 ················135
7.3 程序包成员的使用 ·······136
7.3.1 用完全限定名指代程序包成员········136
7.3.2 导入包成员 ·············136
7.3.3 导入整个程序包 ·····136
7.3.4 包的表面层次结构 ··················137
7.3.5 命名歧义性 ·············137
7.3.6 静态import 语句 ····················137
7.4 源文件和类文件的管理 ················138
7.4.1 设置CLASSPATH 系统变量········139
7.5 小结 ·············140
7.6 问题和练习:创建和使用包 ········140
第8 章 数字和字符串 ········141
8.1 数字 ·············141
8.1.1 Number 类 ··············141
8.1.2 格式化数字打印输出 ··············143
8.1.3 其他数学运算方法 ··················146
8.1.4 自动装箱和拆箱 ·····149
8.1.5 小结 ········150
8.1.6 问题和练习:数字 ··················151
8.2 字符 ·············151
8.2.1 转义字符 ················152
8.3 字符串 ··········153
8.3.1 创建字符串 ·············153
8.3.2 字符串长度 ·············153
8.3.3 字符串连接 ·············154
8.3.4 创建格式字符串 ·····155
8.3.5 数字和字符串之间的转换 ······155
8.3.6 操作字符串中的字符 ··············157
8.3.7 比较字符串和字符串的子串··················160
8.3.8 StringBuilder 类 ······161
8.3.9 小结 ········164
8.3.10 问题和练习:字符和字符串 ······165
第9 章 异常 ·········166
9.1 什么是异常 ··················166
9.2 捕获或指明规定 ···········167
9.2.1 三类异常 ················167
9.2.2 绕过捕获或指明 ·····168
9.3 捕获和处理异常 ···········168
9.3.1 try 块 ······169
9.3.2 catch 块 ···················169
9.3.3 finally 块 ·················170
9.3.4 try-with-resources 语句 ···········171
9.3.5 汇总 ········174
9.4 指明一个方法抛出的异常 ············176
9.5 如何抛出异常···············176
9.5.1 throw 语句 ··············177
9.5.2 Throwable 类及其子类 ···········177
9.5.3 Error 类 ···················178
9.5.4 Exception 类 ···········178
9.5.5 链式异常 ················178
9.5.6 创建异常类 ·············179
9.6 未检查异常:争议 ·······180
9.7 异常的优点 ··················180
9.7.1 优点1:把错误处理代码和“正规”代码分离开 ·······181
9.7.2 优点2:根据调用栈上传错误 ···182
9.7.3 优点3:对错误类型进行分组和加以区分 ···········183
9.8 小结 ·············184
9.9 问题和练习:异常 ·······184
第10 章 基本I/O 和NIO.2 ···············186
10.1 I/O 流 ·········186
10.1.1 字节流 ··················187
10.1.2 字符流 ··················188
10.1.3 缓冲流 ··················190
10.1.4 扫描和格式化 ·······191
10.1.5 命令行I/O ············195
10.1.6 数据流 ··················197
10.1.7 对象流 ··················198
10.2 文件I/O(以NIO.2 为特征) ·······199
10.2.1 什么是路径(以及其他文件系统情况) ···············200
10.2.2 Path 类 ··················201
10.2.3 文件操作 ···············206
10.2.4 检查文件或目录 ···················209
10.2.5 删除文件或目录 ···················210
10.2.6 复制文件或目录 ···················210
10.2.7 移动文件或目录 ··················· 211
10.2.8 管理元数据(文件和文件存储属性) ············· 211
10.2.9 读取、写入和创建文件 ········216
10.2.10 随机存取文件 ····················221
10.2.11 创建和读取目录 ··················222
10.2.12 符号链接或其他方式的链接····················224
10.2.13 遍历文件树 ·········226
10.2.14 查找文件 ·············229
10.2.15 监视目录的变化 ·················232
10.2.16 其他有用的方法 ·················236
10.2.17 遗留文件的 I/O 代码 ··········237
10.3 小结············239
10.4 问题和练习:基本I/O 和   NIO.2 ·········239
第11 章 集合 ·······240
11.1 集合简介 ····················240
11.1.1 集合框架是什么····················241
11.1.2 Java 集合框架的好处 ············241
11.2 接口 ············241
11.2.1 Collection 接口 ·····243
11.2.2 遍历集合 ···············244
11.2.3 Collection 接口的批量操作 ···244
11.2.4 Collection 接口的数组操作 ···245
11.2.5 Set 接口 ················245
11.2.6 List 接口 ···············248
11.2.7 Queue 接口 ···········255
11.2.8 Map 接口 ··············257
11.2.9 对象排序 ···············262
11.2.10 SortedSet 接口 ····················267
11.2.11 SortedMap 接口 ··················269
11.2.12 小结 ····················270
11.2.13 问题和练习:接口 ··············270
11.3 实现 ············271
11.3.1 Set 实现 ················273
11.3.2 List 实现 ···············274
11.3.3 Map 实现 ··············274
11.3.4 Queue 实现 ···········276
11.3.5 封装实现 ···············277
11.3.6 简单实现 ···············278
11.3.7 小结 ······279
11.3.8 问题和练习:实现 ················280
11.4 算法 ············280
11.4.1 排序 ······280
11.4.2 混排 ······282
11.4.3 常规数据操作 ·······282
11.4.4 查询 ······282
11.4.5 组合 ······283
11.4.6 查找极值 ···············283
11.5 自定义集合实现 ·········283
11.5.1 编写实现的原因····················283
11.5.2 如何编写自定义实现 ············284
11.6 互操作性 ····················285
11.6.1 兼容性 ··················285
11.6.2 API 设计 ···············287
第12 章 并发 ······289
12.1 进程和线程 ················289
12.1.1 进程 ······289
12.1.2 线程 ······290
12.2 线程对象 ····················290
12.2.1 定义和启动一个线程 ············290
12.2.2 使用sleep 方法暂停执行 ······291
12.2.3 中断 ······292
12.2.4 联合 ······293
12.2.5 SimpleThreads 实例 ··············293
12.3 同步············294
12.3.1 线程冲突 ···············294
12.3.2 内存一致性错误 ···················295
12.3.3 同步方法 ···············296
12.3.4 内部锁和同步 ·······297
12.3.5 原子访问 ···············298
12.4 活性············298
12.4.1 死锁 ······299
12.4.2 饥饿和活锁 ···········299
12.5 保护块 ········300
12.6 不可变对象 ················303
12.6.1 同步类实例 ···········303
12.6.2 定义不可变对象的一种策略 ···304
12.7 高级并发对象 ·············305
12.7.1 锁对象 ··················305
12.7.2 执行器 ··················307
12.7.3 并发集合 ··············· 311
12.7.4 原子变量 ··············· 311
12.7.5 并发随机数 ···········312
12.8 问题和练习:并发 ·····313
第13 章 正则表达式 ··········314
13.1 简介············315
13.1.1 什么是正则表达式 ················315
13.1.2 包中的正则表达式如何表示······315
13.2 测试工具 ····················315
13.3 字符串文字 ················316
13.3.1 元字符 ··················317
13.4 字符类 ········317
13.4.1 简单类 ··················318
13.5 预定义字符类 ·············320
13.6 量词············322
13.6.1 零长度匹配 ···········323
13.6.2 捕捉组和拥有量词的字符类 ··················325
13.6.3 贪婪型、勉强型和占有型量词之间的区别 ··············325
13.7 捕捉组 ········326
13.7.1 编号 ······326
13.7.2 反向引用 ···············327
13.8 边界匹配器 ················327
13.9 模式类方法 ················329
13.9.1 使用标记创建模式 ················329
13.9.2 嵌套标记表达式 ···················330
13.9.3 使用matches (String,CharSequence) 方法 ·············331
13.9.4 使用split (String) 方法 ·········331
13.9.5 其他实用方法 ·······332
13.9.6 java.lang.String 中模式方法的等价 ··············332
13.10 匹配类方法 ··············332
13.10.1 索引方法 ·············332
13.10.2 学习方法 ·············333
13.10.3 替换方法 ·············333
13.10.4 使用start 和end 方法 ·········333
13.10.5 使用matches 和lookingAt方法 ····················334
13.10.6 使用replaceFirst (String)和replaceAll (String) ··········335
13.10.7 使用appendReplacement(StringBuffer, String) 和appendTail (StringBuffer) ···336
13.10.8 Matcher 方法在java.lang.String中的等价 ··········336
13.11 模式语法异常类方法 ················336
13.12 Unicode 支持 ············338
13.12.1 匹配特定代码点 ·················338
13.12.2 Unicode 字符属性 ···············338
13.13 附加资源 ··················338
13.14 问题和练习:正则表达式 ········339
第14 章 平台环境 ··············340
14.1 配置工具 ····················340
14.1.1 属性 ······340
14.1.2 命令行参数 ···········343
14.1.3 环境变量 ···············344
14.1.4 其他配置工具 ·······345
14.2 系统工具 ····················345
14.2.1 命令行I/O 对象 ····················345
14.2.2 系统属性 ···············346
14.2.3 安全管理器 ···········348
14.2.4 系统的其他方法 ···················349
14.3 路径和类路径 ·············349
14.3.1 更新PATH 环境变量(Microsoft Windows) ···········349
14.3.2 更新PATH 变量(Solaris 和Linux) ··················351
14.3.3 检查CLASSPATH 变量(所有平台) ··········351
14.4 问题和练习:平台环境 ··············352
第15 章 JAR 文件··············353
15.1 JAR 文件使用入门 ·····353
15.1.1 创建JAR 文件 ······354
15.1.2 查看JAR 文件内容 ···············356
15.1.3 抽取JAR 文件内容 ···············357
15.1.4 更新JAR 文件 ······358
15.1.5 运行打包为JAR 的软件 ·······359
15.2 清单文件使用入门 ·····360
15.2.1 理解默认的清单文件 ············361
15.2.2 修改清单文件 ·······361
15.2.3 设置应用程序的入口点 ········362
15.2.4 将类文件加入JAR 文件的类路径 ··················363
15.2.5 设置包版本信息 ···················363
15.2.6 用JAR 文件封装包 ···············364
15.2.7 封装JAR 文件 ······365
15.3 JAR 文件的签名和验证 ·············365
15.3.1 理解签名和验证 ···················365
15.3.2 对JAR 文件签名 ··················367
15.3.3 验证签名的JAR 文件 ···········369
15.4 使用JAR 相关API ····················369
15.4.1 实例:JarRunner 应用 ··········369
15.5 问题:JAR 文件 ·········373
第16 章 Java Web Start ··················374
16.1 开发Java Web Start 应用程序 ····375
16.1.1 创建顶层JPanel 类 ···············375
16.1.2 创建应用程序 ·······376
16.1.3 从最后部署机制中分离出核心方法的好处 ··········376
16.1.4 获取资源 ···············376
16.2 部署Java Web Start 应用 ···········377
16.2.1 设置Web 服务器 ··················378
16.3 显示自定义的加载进度指示器···378
16.3.1 开发自定义的加载进度指示器 ·············378
16.3.2 为Java Web Start 应用指定自定义的加载进度指示器 ····380
16.4 运行Java Web Start 应用 ···········381
16.4.1 通过浏览器运行Java Web Start 应用 ··············381
16.4.2 通过Java Cache Viewer 运行Java Web Start 应用 ······381
16.4.3 从桌面运行Java Web Start 应用 ······381
16.5 Java Web Start 与安全 ················382
16.5.1 动态下载HTTPS 认证 ··········382
16.6 Java Web Start 常见问题 ············382
16.7 问题和练习:Java Web Start ······383
第17 章 applet ···················384
17.1 开始使用applet ··········384
17.1.1 定义Applet 类的子类 ···········385
17.1.2 Milestones 方法 ···············385
17.1.3 applet 的生命周期 ················386
17.1.4 applet 执行环境 ····················387
17.1.5 开发applet ············388
17.1.6 部署applet ············390
17.2 applet 更多功能 ··········392
17.2.1 查找和加载数据文件 ············392
17.2.2 定义和使用applet 参数 ······392
17.2.3 显示简短的状态字符串 ········394
17.2.4 在浏览器中显示文档 ············395
17.2.5 从applet 调用JavaScript代码 ······396
17.2.6 从JavaScript 代码中调用applet 方法 ············397
17.2.7 通过事件句柄处理初始化状态 ······400
17.2.8 操纵applet 网页的DOM ······401
17.3 显示自定义的加载进度指示器···402
17.3.1 开发自定义的加载进度指示器 ···············402
17.3.2 为applet 指定加载进度指示器 ··············405
17.3.3 将加载进度指示器和applet 用户界面结合 ··········405
17.3.4 将诊断写入标准输出和错误流 ···············405
17.3.5 开发可拖动的applet ·············406
17.3.6 和其他applet 交互 ················408
17.3.7 与服务器端应用交互 ············409
17.3.8 applet 能做什么和不能做什么 ··················410
17.4 applet 常见问题及解决方案 ······· 411
17.5 问题和练习:applet ···················412
第18 章  Java 富互联网应用系统 ·······413
18.1 设置可信参数和安全属性 ··········413
18.1.1 系统属性 ···············414
18.2 JNLP API ···················415
18.2.1 通过JNLP API 获取客户端 ···416
18.3 cookie ·········418
18.3.1 cookie 的类型 ·······419
18.3.2 RIA 中的cookie 支持 ···········419
18.3.3 获取cookie ···········419
18.4 自定义加载体验 ·········420
18.5 RIA 中的安全 ·············421
18.6  问题和练习:Java 富互联网应用系统 ········421
第19 章 深入理解部署 ······423
19.1 部署工具 ····················423
19.1.1 部署工具脚本所在位置 ········423
19.1.2 部署applet ············424
19.1.3 部署Java Web Start 应用 ······427
19.1.4 检查客户端的JRE 软件版本 ······428
19.2 Java 网络加载协议 ·····429
19.2.1 JNLP 文件结构 ·····429
19.3 部署的最佳实践 ·········433
19.3.1 减少下载时间 ·······433
19.3.2 避免不必要的更新检查 ········435
19.3.3 只有必要时才签名JAR文件 ······436
19.3.4 确保JRE 软件存在 ···············436
19.4 问题和练习:深入理解部署 ······437
附录 Java 程序语言认证考试复习大纲 ·····438

教学资源推荐
作者: (美)Harold Abelson,Gerald Jay Sussman,Julie Sussman
作者: 陈家骏 郑滔 编著
作者: (美)Harvey M.Deitel,Paul J.Deitel
参考读物推荐
作者: [美] 比尔·瓦格纳(Bill Wagner) 著
作者: Eric Jendrock; Jennifer Ball; Debbie Carson; Ian Evans; Scott Fordin; Kim Haase
作者: 李光琳