编辑推荐

  《Java技术手册(第6版)》旨在帮助有经验的Java程序员充分使用Java7和Java8的功能,但也可供Java开发新手学习。书中提供了大量示例,演示了如何充分利用现代API和开发过程中的**实践。这一版进行了全面更新。第1部分快速准确地介绍了Java编程语言和Java平台。第2部分讨论了核心概念和API,展示了如何在Java环境中解决实际的编程任务。

  通过学习《Java技术手册(第6版)》,你将能够:

  掌握全新的语言细节,包括Java8的变化

  使用基本的Java句法学习面向对象编程

  研究泛型、枚举、注解和lambda表达式

  理解面向对象设计中使用的基本技术

  学习并发和内存管理,以及二者间错综复杂的关系

  使用Java集合,处理常用的数据格式

  深入研究Java全新的I/OAPI,包括异步通道

  使用Nashorn在Java虚拟机中执行JavaScript代码

  熟悉OpenJDK中的开发工具

内容简介

  《Java技术手册(第6版)》为《Java技术手册》的升级版,涵盖全新的Java7和Java8。第1部分介绍Java编程语言和Java平台,主要内容有Java环境、Java基本句法、Java面向对象编程、Java类型系统、Java的面向对象设计、Java实现内存管理和并发编程的方式。第2部分通过大量示例来阐述如何在Java环境中完成实际的编程任务,主要内容有编程和文档约定,使用Java集合和数组,处理常见的数据格式,处理文件和I/O,类加载、反射和方法句柄,Nashorn,以及平台工具和配置。

作者简介

  BenjaminJ.Evans,是jClarity公司的联合创始人,伦敦Java用户组的组织者,JCP执行委员会委员。JavaChampion和JavaOneRockstar荣誉得主。与人合著有《Java程序员修炼之道》。他经常就Java平台、性能、并发和相关主题发表公开演讲。


  DavidFlanagan,是Mozilla的高级前端软件工程师,著有《JavaScriptquanwei指南》《Ruby编程语言》等。博客地址是:davidflanagan.com。

目录

序xv
前言xvi
第一部分 Java介绍
第1章 Java环境介绍2
1.1 Java语言、JVM和生态系统2
1.1.1 Java语言是什么3
1.1.2 JVM是什么4
1.1.3 Java生态系统是什么5
1.2 Java和JVM简史6
1.3 Java程序的生命周期7
1.4 Java的安全性9
1.5 Java和其他语言比较9
1.5.1 Java和C语言比较9
1.5.2 Java和C++比较10
1.5.3 Java和PHP比较10
1.5.4 Java和JavaScript比较10
1.6 回应对Java的一些批评10
1.6.1 过度复杂10
1.6.2 变化慢11
1.6.3 性能问题12
1.6.4 不安全12
1.6.5 太注重企业12
第2章 Java基本句法13
2.1 Java程序概览14
2.2 词法结构14
2.2.1 Unicode字符集14
2.2.2 区分大小写与空白14
2.2.3 注释15
2.2.4 保留字16
2.2.5 标识符16
2.2.6 字面量17
2.2.7 标点符号17
2.3 基本数据类型17
2.3.1 布尔类型18
2.3.2 字符类型18
2.3.3 整数类型20
2.3.4 浮点数类型21
2.3.5 基本类型之间的转换22
2.4 表达式和运算符24
2.4.1 运算符概述25
2.4.2 算术运算符28
2.4.3 字符串连接运算符30
2.4.4 递增和递减运算符30
2.4.5 比较运算符31
2.4.6 逻辑运算符32
2.4.7 位运算符和位移运算符33
2.4.8 赋值运算符35
2.4.9 条件运算符36
2.4.10 instanceof操作符36
2.4.11 特殊运算符37
2.5 语句38
2.5.1 表达式语句39
2.5.2 复合语句39
2.5.3 空语句39
2.5.4 标注语句40
2.5.5 局部变量声明语句40
2.5.6 if/else语句41
2.5.7 switch语句43
2.5.8 while语句45
2.5.9 do语句45
2.5.10 for语句46
2.5.11 遍历语句47
2.5.12 break语句48
2.5.13 continue语句49
2.5.14 return语句49
2.5.15 synchronized语句50
2.5.16 throw语句50
2.5.17 try/catch/finally语句51
2.5.18 处理资源的try语句53
2.5.19 assert语句54
2.6 方法55
2.6.1 定义方法55
2.6.2 方法修饰符57
2.6.3 已检异常和未检异常59
2.6.4 变长参数列表60
2.7 介绍类和对象61
2.7.1 定义类62
2.7.2 创建对象62
2.7.3 使用对象63
2.7.4 对象字面量63
2.7.5 lambda表达式64
2.8 数组65
2.8.1 数组的类型65
2.8.2 创建和初始化数组67
2.8.3 使用数组68
2.8.4 多维数组70
2.9 引用类型72
2.9.1 引用类型与基本类型比较72
2.9.2 处理对象和引用副本73
2.9.3 比较对象74
2.9.4 装包和拆包转换75
2.10 包和Java命名空间76
2.10.1 声明包76
2.10.2 全局唯一的包名77
2.10.3 导入类型77
2.10.4 导入静态成员79
2.11 Java文件的结构80
2.12 定义并运行Java程序81
2.13 小结82
第3章 Java面向对象编程83
3.1 类简介83
3.1.1 面向对象的基本概念83
3.1.2 其他引用类型84
3.1.3 定义类的句法85
3.2 字段和方法85
3.2.1 声明字段的句法86
3.2.2 类字段87
3.2.3 类方法88
3.2.4 实例字段89
3.2.5 实例方法89
3.2.6 this引用的工作方式90
3.3 创建和初始化对象91
3.3.1 定义构造方法91
3.3.2 定义多个构造方法92
3.3.3 在一个构造方法中调用另一个构造方法92
3.3.4 字段的默认值和初始化程序93
3.4 子类和继承95
3.4.1 扩展类95
3.4.2 超类、对象和类层次结构97
3.4.3 子类的构造方法98
3.4.4 构造方法链和默认构造方法98
3.4.5 遮盖超类的字段100
3.4.6 覆盖超类的方法101
3.5 数据隐藏和封装104
3.5.1 访问控制105
3.5.2 数据访问器方法110
3.6 抽象类和方法111
3.7 修饰符总结115
第4章 Java类型系统117
4.1 接口118
4.1.1 定义接口118
4.1.2 扩展接口119
4.1.3 实现接口119
4.1.4 实现多个接口121
4.1.5 默认方法121
4.1.6 标记接口123
4.2 Java泛型123
4.2.1 介绍泛型124
4.2.2 泛型和类型参数125
4.2.3 菱形句法126
4.2.4 类型擦除126
4.2.5 通配符127
4.2.6 编译时和运行时类型131
4.3 枚举和注解131
4.3.1 枚举131
4.3.2 注解133
4.3.3 自定义注解134
4.3.4 类型注解135
4.4 嵌套类型135
4.4.1 静态成员类型136
4.4.2 非静态成员类138
4.4.3 局部类141
4.4.4 词法作用域和局部变量144
4.4.5 匿名类145
4.4.6 嵌套类型的运作方式147
4.5 lambda表达式148
4.5.1 转换lambda表达式150
4.5.2 方法引用150
4.5.3 函数式编程151
4.6 小结152
第5章 Java的面向对象设计154
5.1 Java的值154
5.2 java.lang.Object类的重要方法155
5.2.1 toString()方法157
5.2.2 equals()方法157
5.2.3 hashCode()方法158
5.2.4 Comparable::compareTo()方法158
5.2.5 clone()方法159
5.3 面向对象设计要略159
5.3.1 常量159
5.3.2 用接口还是抽象类160
5.3.3 实例方法还是类方法161
5.3.4 合成还是继承163
5.3.5 字段继承和访问器165
5.3.6 单例167
5.4 异常和异常处理168
5.5 Java编程的安全性170
第6章 Java实现内存管理和并发编程的方式172
6.1 Java内存管理的基本概念172
6.1.1 Java中的内存泄露173
6.1.2 标记清除算法简介173
6.1.3 基本标记清除算法174
6.2 JVM优化垃圾回收的方式175
6.3 HotSpot堆178
6.3.1 回收老年代178
6.3.2 其他回收程序179
6.4 终结机制180
6.5 Java对并发编程的支持181
6.5.1 线程的生命周期182
6.5.2 可见性和可变性184
6.5.3 互斥和状态保护185
6.5.4 volatile关键字187
6.5.5 Thread类中有用的方法188
6.6 使用线程190
6.7 小结192
第二部分 使用Java平台
第7章 编程和文档约定194
7.1 命名和大小写约定194
7.2 实用的命名方式196
7.3 Java文档注释197
7.3.1 文档注释的结构198
7.3.2 文档注释标签198
7.3.3 行内文档注释标签201
7.3.4 文档注释中的交叉引用203
7.3.5 包的文档注释204
7.4 可移植程序的约定205
第8章 使用Java集合208
8.1 介绍集合API208
8.1.1 Collection接口209
8.1.2 Set接口211
8.1.3 List接口213
8.1.4 Map接口217
8.1.5 Queue接口和BlockingQueue接口220
8.1.6 实用方法222
8.1.7 数组和辅助方法224
8.2 在Java集合框架中使用lambda表达式225
8.2.1 函数式方式226
8.2.2 流API229
8.3 小结232
第9章 处理常见的数据格式233
9.1 文本233
9.1.1 字符串的特殊句法233
9.1.2 字符串的不可变性235
9.1.3 正则表达式237
9.2 数字和数学运算240
9.2.1 Java表示整数类型的方式240
9.2.2 Java中的浮点数241
9.2.3 Java的数学函数标准库243
9.3 在Java8中处理日期和时间245
9.3.1 介绍Java8的日期和时间API245
9.3.2 查询248
9.3.3 调节器249
9.3.4 过时的日期和时间API250
9.4 小结251
第10章 处理文件和I/O252
10.1 Java处理I/O的经典方式252
10.1.1 文件253
10.1.2 流254
10.1.3 Reader和Writer类255
10.1.4 再次介绍TWR256
10.1.5 I/O经典处理方式的问题257
10.2 Java处理I/O的现代方式257
10.2.1 文件258
10.2.2 路径259
10.3 NIO中的通道和缓冲区261
10.3.1 ByteBuffer对象261
10.3.2 映射字节缓冲区263
10.4 异步I/O263
10.4.1 基于Future接口的方式264
10.4.2 基于回调的方式264
10.4.3 监视服务和目录搜索265
10.5 网络266
10.5.1 HTTP266
10.5.2 TCP268
10.5.3 IP270
第11章 类加载、反射和方法句柄271
11.1 类文件、类对象和元数据271
11.1.1 类对象示例271
11.1.2 类对象和元数据272
11.2 类加载的各个阶段273
11.2.1 加载273
11.2.2 验证274
11.2.3 准备和解析274
11.2.4 初始化275
11.3 安全的编程和类加载276
11.4 应用类加载知识277
11.5 反射280
11.5.1 什么时候使用反射280
11.5.2 如何使用反射280
11.6 动态代理284
11.7 方法句柄285
11.7.1 MethodType对象285
11.7.2 方法查找286
11.7.3 调用方法句柄287
第12章 Nashorn289
12.1 介绍Nashorn289
12.1.1 在JVM中运行Java之外的语言289
12.1.2 目的290
12.2 在Nashorn中执行JavaScript代码290
12.2.1 在命令行中运行291
12.2.2 使用Nashornshell291
12.2.3 在jjs中编写脚本293
12.3 Nashorn和javax.script包297
12.4 Nashorn的高级用法299
12.4.1 在Nashorn中调用Java代码299
12.4.2 Nashorn对JavaScript语言所做的扩展302
12.4.3 实现细节303
12.5 小结304
第13章 平台工具和配置306
13.1 命令行工具306
13.1.1 javac307
13.1.2 java309
13.1.3 jar310
13.1.4 javadoc312
13.1.5 jdeps313
13.1.6 jps314
13.1.7 jstat315
13.1.8 jstatd315
13.1.9 jinfo316
13.1.10 jstack317
13.1.11 jmap317
13.1.12 javap318
13.2 VisualVM318
13.3 Java8配置324
13.3.1 目的324
13.3.2 紧凑配置325
13.4 小结328
作者简介329
封面介绍329

前言/序言

  这是一本Java案头参考书,适合放在键盘旁,编程时随时翻阅。《Java技术手册(第6版)》第一部分快速准确地介绍Java编程语言和Java平台的核心运行时概念。第二部分通过重要的核心API示例来解释关键概念。《Java技术手册(第6版)》虽然涵盖Java8,但考虑到有些行业还没有开始使用,所以只要有需要,我们就会特别注明Java8(部分是Java7)引入的功能。《Java技术手册(第6版)》全面使用Java8句法,以前可能使用匿名嵌套类的地方会换用lambda表达式。

  第6版的变化

  《Java技术手册(第6版)》第5版涵盖Java5,而这一版涵盖Java8。《Java技术手册(第6版)》第5版大约在十年前出版,在那之后,Java语言和程序员的工作环境都发生了重大变化。因此,这一版内容变化很大。其中一个重要的变化是,不再像前几版那样对平台的核心API进行详尽的介绍。

  其中一个原因是,在纸质书中印出数量巨大的核心API是不切实际的。而一个更有说服力的原因是,随时可连的快速互联网不断普及,几乎所有Java程序员工作时都会连接互联网。详细的API文档参考更适合放在网上,而不是印在书中。

  相应地,这一版删掉了占据第5版三分之二篇幅的API参考,剩下的内容才符合“概要型”手册的要求。当代Java开发者不仅需要了解句法和API,当Java环境成熟后,并发、面向对象设计、内存管理和Java类型系统这些话题都变得重要了,主流开发者都要了解。

  我们在这一版中试图反映出Java生态系统这些年的变化,因此很大程度上摒弃了前几版的写作方式。具体而言,我们基本不会详细说明某个Java特性是在哪个版本中引入的,因为大多数Java开发者只关心最新版。


其他推荐