Benjamin J. Evans是jClarity公司的联合创始人,伦敦Java用户组的组织者,JCP执行委员会委员。Java Champion和JavaOne Rockstar荣誉得主。与人合著有《Java程序员修炼之道》。他经常就Java平台、性能、并发和相关主题 发表公开演讲。
David Flanagan是Mozilla的高级前端软件工程师,著有《JavaScript权威指南》《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 介绍集合API 208
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 流API 229
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 在Java 8 中处理日期和时间 245
9.3.1 介绍Java 8 的日期和时间API 245
9.3.2 查询 248
9.3.3 调节器 249
9.3.4 过时的日期和时间API 250
9.4 小结 251
第10 章 处理文件和I/O 252
10.1 Java 处理I/O 的经典方式 252
10.1.1 文件 253
10.1.2 流 254
10.1.3 Reader 和Writer 类 255
10.1.4 再次介绍TWR 256
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/O 263
10.4.1 基于Future 接口的方式 264
10.4.2 基于回调的方式 264
10.4.3 监视服务和目录搜索 265
10.5 网络 266
10.5.1 HTTP 266
10.5.2 TCP 268
10.5.3 IP 270
第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 章 Nashorn 289
12.1 介绍Nashorn 289
12.1.1 在JVM 中运行Java 之外的语言 289
12.1.2 目的 290
12.2 在Nashorn 中执行JavaScript 代码 290
12.2.1 在命令行中运行 291
12.2.2 使用Nashorn shell 291
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 javac 307
13.1.2 java 309
13.1.3 jar 310
13.1.4 javadoc 312
13.1.5 jdeps 313
13.1.6 jps 314
13.1.7 jstat 315
13.1.8 jstatd 315
13.1.9 jinfo 316
13.1.10 jstack 317
13.1.11 jmap 317
13.1.12 javap 318
13.2 VisualVM 318
13.3 Java 8 配置 324
13.3.1 目的 324
13.3.2 紧凑配置 325
13.4 小结 328
作者简介 329
封面介绍 329
· · · · · · (
收起)