作者:
[美] Bruce Eckel
译者: 孙卓 / 陈德伟 / 臧秀涛
出版社: 人民邮电出版社
出品方: 图灵教育
出版年: 2022-3-20
ISBN: 9787115585028
页数: 560
装帧: 精装
定价: 129.8
原作名: On Java 8
丛书: 图灵程序设计丛书·Java系列
译者: 孙卓 / 陈德伟 / 臧秀涛
出版社: 人民邮电出版社
出品方: 图灵教育
出版年: 2022-3-20
ISBN: 9787115585028
页数: 560
装帧: 精装
定价: 129.8
原作名: On Java 8
丛书: 图灵程序设计丛书·Java系列
内容简介 · · · · · ·
本书内容主要是对《On Java 中文版 基础卷》的拓展延伸,重点讲解Java的高级特性、并发、设计模式等相关进阶知识,对一些和开发密切相关的底层操作(如I/O系统、底层并发、数据压缩等)进行深入探讨,同时针对基础卷的重点章节进行了补充说明(如第3章增补了一些关于集合的高级特性)。在附录中,作者给出了67条关于低级程序设计和编写代码的建议,并分享了自己成为程序员的一些经验之谈。
本书适合有一定项目开发经验的Java程序员阅读。
On Java 中文版 进阶卷的创作者
· · · · · ·
-
Bruce Eckel 作者 -
陈德伟 译者
作者简介 · · · · · ·
Bruce Eckel ,C++标准委员会的创始成员之一,知名技术顾问 ,专注于编程语言和软件系统设计方面的研究,常活跃于世界各大顶级技术研讨会。他自1986年以来,累计出版Thinking in C++、Thinking in Java、On Java 8等十余部经典计算机著作,曾多次荣获Jolt 最佳图书奖(“被誉为软件业界的奥斯卡”),其代表作 Thinking in Java被译为中、日、俄、意、波兰、韩等十几种语言,在世界范围内产生广泛影响。
目录 · · · · · ·
第1章 枚举类型
1.1 枚举类型的基本特性 / 001
静态导入枚举类型 / 002
1.2 在枚举类型中增加自定义方 法 / 003
重载枚举类型中的方法 / 004
1.3 在switch语句中使用枚举 / 005
· · · · · · (更多)
1.1 枚举类型的基本特性 / 001
静态导入枚举类型 / 002
1.2 在枚举类型中增加自定义方 法 / 003
重载枚举类型中的方法 / 004
1.3 在switch语句中使用枚举 / 005
· · · · · · (更多)
第1章 枚举类型
1.1 枚举类型的基本特性 / 001
静态导入枚举类型 / 002
1.2 在枚举类型中增加自定义方 法 / 003
重载枚举类型中的方法 / 004
1.3 在switch语句中使用枚举 / 005
1.4 values()方法的神秘之处 / 006
1.5 实现,而不是继承 / 009
1.6 随机选择 / 010
1.7 使用接口来组织枚举 / 011
1.8 用EnumSet来代替标识 / 015
1.9 使用EnumMap / 017
1.10 常量特定方法 / 018
1.10.1 用枚举实现职责链模 式 / 023
1.10.2 用枚举实现状态机 / 027
1.11 多路分发 / 032
1.11.1 使用枚举类型分发 / 034
1.11.2 使用常量特定方法 / 036
1.11.3 使用EnumMap分发 / 038
1.11.4 使用二维数组 / 039
1.12 支持模式匹配的新特性 / 041
1.13 新特性:switch中的箭头语法 / 041
1.14 新特性:switch中的case null / 042
1.15 新特性:将switch作为表达 式 / 044
1.16 新特性:智能转型 / 046
1.17 新特性:模式匹配 / 048
1.17.1 违反里氏替换原则 / 049
1.17.2 守卫 / 053
1.17.3 支配性 / 055
1.17.4 覆盖范围 / 057
1.18 总结 / 058
第2章_对象的传递和返回
2.1 传递引用 / 061
引用别名 / 061
2.2 创建本地副本 / 063
2.2.1 值传递 / 063
2.2.2 克隆对象 / 064
2.2.3 为类增加可克隆能力 / 065
2.2.4 成功的克隆 / 067
2.2.5 Object.clone()的效果 / 068
2.2.6 克隆组合对象 / 070
2.2.7 深拷贝ArrayList / 073
2.2.8 通过序列化进行深拷贝 / 074
2.2.9 在继承层次结构中增加可克隆 性并向下覆盖 / 076
2.2.10 为什么用这种奇怪的 设计 / 077
2.3 控制可克隆性 / 078
复制构造器 / 082
2.4 不可变类 / 086
2.4.1 创建不可变类 / 088
2.4.2 不可变性的缺点 / 089
2.4.3 String 很特殊 / 091
2.5 总结 / 091
第3章 集合主题
3.1 样例数据 / 093
3.2 List 的行为 / 099
3.3 Set 的行为 / 102
3.4 在 Map 上使用函数式操作 / 104
3.5 选择 Map 的部分元素 / 105
3.6 填充集合 / 107
3.6.1 使用 Suppliers 来填充 Collection / 108
3.6.2 使用 Suppliers 来填充 Map / 109
3.7 使用享元自定义 Collection 和 Map / 112
3.8 Collection 的功能 / 123
3.9 可选的操作 / 125 不支持的操作 / 127
3.10 Set 与存储顺序 / 129 SortedSet / 132
3.11 Queue / 134
3.11.1 优先级队列 / 135
3.11.2 Deque / 136
3.12 理解 Map / 137
3.12.1 性能 / 139
3.12.2 SortedMap / 141
3.12.3 LinkedHashMap / 143
3.13 工具函数 / 144
3.13.1 List 上的排序和 查找 / 147
3.13.2 创建不可修改的 Collection 或 Map / 148
3.13.3 同步 Collection 或 Map / 150
快速失败 / 150
3.14 持有引用 / 151
WeakHashMap / 154
3.15 Java 1.0/1.1的集合类 / 155
3.15.1 Vector 和Enumeration / 155
3.15.2 Hashtable / 156
3.15.3 Stack / 157
3.15.4 BitSet / 158
3.16 总结 / 160
第4章 注解
4.1 基本语法 / 163
4.1.1 定义注解 / 164
4.1.2 元注解 / 165
4.2 编写注解处理器 / 166
4.2.1 注解元素 / 167
4.2.2 默认值的限制 / 168
4.2.3 生成外部文件 / 168
4.2.4 注解不支持继承 / 172
4.2.5 实现处理器 / 172
4.3 用 javac 处理注解 / 174
4.3.1 最简单的处理器 / 175
4.3.2 更复杂的处理器 / 178
4.4 基于注解的单元测试 / 182
4.4.1 在 @Unit 中使用泛型 / 190
4.4.2 实现 @Unit / 192
4.5 总结 / 202
第5章 并发编程
5.1 令人迷惑的术语 / 204
并发的新定义 / 206
5.2 并发的超能力 / 207
5.3 并发为速度而生 / 209
5.4 Java并发四定律 / 211
5.4.1 不要使用并发 / 211
5.4.2 一切都不可信,一切都很 重要 / 212
5.4.3 能运行并不代表没有 问题 / 212
5.4.4 你终究要理解并发 / 213
5.5 残酷的事实 / 214
5.6 本章剩余部分 / 216
5.7 并行流 / 218
5.7.1 parallel() 并非灵丹妙 药 / 219
5.7.2 parallel() 和 limit() 的 作用 / 224
5.7.3 并行流只是看起来很简 单 / 228
5.8 创建和运行任务 / 228
5.8.1 Task 和 Executor / 228
5.8.2 使用更多的线程 / 232
5.8.3 生成结果 / 234
5.8.4 作为任务的lambda与方法引 用 / 236
5.9 终止长时间运行的任务 / 237
5.10 CompletableFuture / 240
5.10.1 基本用法 / 241
5.10.2 其他操作 / 244
5.10.3 合并多个 Completable- Future / 247
5.10.4 模拟场景应用 / 251
5.10.5 异常 / 253
5.11 死锁 / 259
5.12 构造器并不是线程安全的 / 264
5.13 工作量、复杂性、成本 / 268
5.14 总结 / 273
5.14.1 缺点 / 274
5.14.2 Java核心设计的失败之 处 / 275
5.14.3 其他的库 / 275
5.14.4 设想一种为并发而设计的 语言 / 276
5.14.5 延伸阅读 / 276
第6章_底层并发
6.1 什么是线程? / 277
6.1.1 最佳线程数 / 279
6.1.2 我可以创建多少线程 / 280
6.2 捕获异常 / 282
6.3 共享资源 / 286
6.3.1 资源竞争 / 286
6.3.2 解决资源竞争 / 290
6.3.3 将 EvenProducer 同步化 / 292
6.4 volatile 关键字 / 293
6.4.1 字分裂 / 293
6.4.2 可见性 / 294
6.4.3 (指令)重排序和先行发 生 / 295
6.4.4 何时使用 volatile / 296
6.5 原子性 / 296
6.5.1 Josh的序列号 / 300
6.5.2 原子类 / 303
6.6 临界区 / 304
6.6.1 在其他对象上进行同步 / 307
6.6.2 使用显式 Lock 对象 / 308
6.7 库组件 / 310
6.7.1 延迟队列 DelayQueue / 311
6.7.2 优先级阻塞队列 Priority-
6.7.3 无锁集合 / 316
6.8 总结 / 317
第7章_Java I/O系统
7.1 I/O流 / 319
7.1.1 各种 InputStream 类型 / 321
7.1.2 各种 OutputStream 类型 / 321
7.1.3 添加属性和有用的接口 / 322
7.1.4 各种 Reader 和 Writer / 324
7.1.5 自成一家的 Random- AccessFile / 327
7.1.6 I/O流的典型用法 / 328
7.1.7 小结 / 335
7.2 标准I/O / 335
7.2.1 从标准输入中读取 / 336
7.2.2 将 System.out 转换为 PrintWriter / 336
7.2.3 标准I/O重定向 / 337
7.2.4 进程控制 / 338
7.3 新I/O系统 / 340
7.3.1 字节缓冲区 ByteBuffer / 340
7.3.2 转换数据 / 344
7.3.3 获取基本类型 / 347
7.3.4 视图缓冲区 / 348
7.3.5 用缓冲区操纵数据 / 352
7.3.6 内存映射文件 / 357
7.3.7 文件加锁 / 361
第8章_设计模式
8.1 设计模式的概念 / 364
8.2 单例模式 / 366
8.3 设计模式的分类 / 370
8.4 模板方法 / 370
8.5 封装实现 / 371
8.5.1 代理模式 / 372
8.5.2 状态模式 / 373
8.5.3 状态机模式 / 376
8.6 工厂模式:封装对象的创建 / 377
8.6.1 动态工厂模式 / 380
8.6.2 多态工厂模式 / 381
8.6.3 抽象工厂模式 / 382
8.7 函数对象模式 / 384
8.7.1 命令模式 / 385
8.7.2 策略模式 / 386
8.7.3 职责链模式 / 388
8.8 改变接口 / 391
8.8.1 适配器模式 / 391
8.8.2 外观模式 / 392
8.9 解释器模式:运行时的灵活 性 / 394
8.10 回调 / 394
8.10.1 观察者模式 / 394
8.10.2 示例:观察花朵 / 395
8.10.3 一个可视化的观察者示 例 / 398
8.11 多路分发 / 401
8.12 模式重构 / 405
8.12.1 Trash 和它的子类 / 405
8.12.2 信使对象 / 410
8.12.3 使工厂通用化 / 411
8.12.4 从文件解析 Trash / 412
8.12.5 用 DynaFactory 实现回 收 / 415
8.12.6 将用法抽象化 / 416
8.12.7 用多路分发重新设计 / 420
8.12.8 访问者模式 / 427
8.12.9 反射是有害的? / 431
8.13 总结 / 435
附录A_编程指南
附录B Javadoc
附录C 理解equals()和hashCode()
附录D 数据压缩
附录E 对象序列化
附录F 静态类型检查的利与弊
· · · · · · (收起)
1.1 枚举类型的基本特性 / 001
静态导入枚举类型 / 002
1.2 在枚举类型中增加自定义方 法 / 003
重载枚举类型中的方法 / 004
1.3 在switch语句中使用枚举 / 005
1.4 values()方法的神秘之处 / 006
1.5 实现,而不是继承 / 009
1.6 随机选择 / 010
1.7 使用接口来组织枚举 / 011
1.8 用EnumSet来代替标识 / 015
1.9 使用EnumMap / 017
1.10 常量特定方法 / 018
1.10.1 用枚举实现职责链模 式 / 023
1.10.2 用枚举实现状态机 / 027
1.11 多路分发 / 032
1.11.1 使用枚举类型分发 / 034
1.11.2 使用常量特定方法 / 036
1.11.3 使用EnumMap分发 / 038
1.11.4 使用二维数组 / 039
1.12 支持模式匹配的新特性 / 041
1.13 新特性:switch中的箭头语法 / 041
1.14 新特性:switch中的case null / 042
1.15 新特性:将switch作为表达 式 / 044
1.16 新特性:智能转型 / 046
1.17 新特性:模式匹配 / 048
1.17.1 违反里氏替换原则 / 049
1.17.2 守卫 / 053
1.17.3 支配性 / 055
1.17.4 覆盖范围 / 057
1.18 总结 / 058
第2章_对象的传递和返回
2.1 传递引用 / 061
引用别名 / 061
2.2 创建本地副本 / 063
2.2.1 值传递 / 063
2.2.2 克隆对象 / 064
2.2.3 为类增加可克隆能力 / 065
2.2.4 成功的克隆 / 067
2.2.5 Object.clone()的效果 / 068
2.2.6 克隆组合对象 / 070
2.2.7 深拷贝ArrayList / 073
2.2.8 通过序列化进行深拷贝 / 074
2.2.9 在继承层次结构中增加可克隆 性并向下覆盖 / 076
2.2.10 为什么用这种奇怪的 设计 / 077
2.3 控制可克隆性 / 078
复制构造器 / 082
2.4 不可变类 / 086
2.4.1 创建不可变类 / 088
2.4.2 不可变性的缺点 / 089
2.4.3 String 很特殊 / 091
2.5 总结 / 091
第3章 集合主题
3.1 样例数据 / 093
3.2 List 的行为 / 099
3.3 Set 的行为 / 102
3.4 在 Map 上使用函数式操作 / 104
3.5 选择 Map 的部分元素 / 105
3.6 填充集合 / 107
3.6.1 使用 Suppliers 来填充 Collection / 108
3.6.2 使用 Suppliers 来填充 Map / 109
3.7 使用享元自定义 Collection 和 Map / 112
3.8 Collection 的功能 / 123
3.9 可选的操作 / 125 不支持的操作 / 127
3.10 Set 与存储顺序 / 129 SortedSet / 132
3.11 Queue / 134
3.11.1 优先级队列 / 135
3.11.2 Deque / 136
3.12 理解 Map / 137
3.12.1 性能 / 139
3.12.2 SortedMap / 141
3.12.3 LinkedHashMap / 143
3.13 工具函数 / 144
3.13.1 List 上的排序和 查找 / 147
3.13.2 创建不可修改的 Collection 或 Map / 148
3.13.3 同步 Collection 或 Map / 150
快速失败 / 150
3.14 持有引用 / 151
WeakHashMap / 154
3.15 Java 1.0/1.1的集合类 / 155
3.15.1 Vector 和Enumeration / 155
3.15.2 Hashtable / 156
3.15.3 Stack / 157
3.15.4 BitSet / 158
3.16 总结 / 160
第4章 注解
4.1 基本语法 / 163
4.1.1 定义注解 / 164
4.1.2 元注解 / 165
4.2 编写注解处理器 / 166
4.2.1 注解元素 / 167
4.2.2 默认值的限制 / 168
4.2.3 生成外部文件 / 168
4.2.4 注解不支持继承 / 172
4.2.5 实现处理器 / 172
4.3 用 javac 处理注解 / 174
4.3.1 最简单的处理器 / 175
4.3.2 更复杂的处理器 / 178
4.4 基于注解的单元测试 / 182
4.4.1 在 @Unit 中使用泛型 / 190
4.4.2 实现 @Unit / 192
4.5 总结 / 202
第5章 并发编程
5.1 令人迷惑的术语 / 204
并发的新定义 / 206
5.2 并发的超能力 / 207
5.3 并发为速度而生 / 209
5.4 Java并发四定律 / 211
5.4.1 不要使用并发 / 211
5.4.2 一切都不可信,一切都很 重要 / 212
5.4.3 能运行并不代表没有 问题 / 212
5.4.4 你终究要理解并发 / 213
5.5 残酷的事实 / 214
5.6 本章剩余部分 / 216
5.7 并行流 / 218
5.7.1 parallel() 并非灵丹妙 药 / 219
5.7.2 parallel() 和 limit() 的 作用 / 224
5.7.3 并行流只是看起来很简 单 / 228
5.8 创建和运行任务 / 228
5.8.1 Task 和 Executor / 228
5.8.2 使用更多的线程 / 232
5.8.3 生成结果 / 234
5.8.4 作为任务的lambda与方法引 用 / 236
5.9 终止长时间运行的任务 / 237
5.10 CompletableFuture / 240
5.10.1 基本用法 / 241
5.10.2 其他操作 / 244
5.10.3 合并多个 Completable- Future / 247
5.10.4 模拟场景应用 / 251
5.10.5 异常 / 253
5.11 死锁 / 259
5.12 构造器并不是线程安全的 / 264
5.13 工作量、复杂性、成本 / 268
5.14 总结 / 273
5.14.1 缺点 / 274
5.14.2 Java核心设计的失败之 处 / 275
5.14.3 其他的库 / 275
5.14.4 设想一种为并发而设计的 语言 / 276
5.14.5 延伸阅读 / 276
第6章_底层并发
6.1 什么是线程? / 277
6.1.1 最佳线程数 / 279
6.1.2 我可以创建多少线程 / 280
6.2 捕获异常 / 282
6.3 共享资源 / 286
6.3.1 资源竞争 / 286
6.3.2 解决资源竞争 / 290
6.3.3 将 EvenProducer 同步化 / 292
6.4 volatile 关键字 / 293
6.4.1 字分裂 / 293
6.4.2 可见性 / 294
6.4.3 (指令)重排序和先行发 生 / 295
6.4.4 何时使用 volatile / 296
6.5 原子性 / 296
6.5.1 Josh的序列号 / 300
6.5.2 原子类 / 303
6.6 临界区 / 304
6.6.1 在其他对象上进行同步 / 307
6.6.2 使用显式 Lock 对象 / 308
6.7 库组件 / 310
6.7.1 延迟队列 DelayQueue / 311
6.7.2 优先级阻塞队列 Priority-
6.7.3 无锁集合 / 316
6.8 总结 / 317
第7章_Java I/O系统
7.1 I/O流 / 319
7.1.1 各种 InputStream 类型 / 321
7.1.2 各种 OutputStream 类型 / 321
7.1.3 添加属性和有用的接口 / 322
7.1.4 各种 Reader 和 Writer / 324
7.1.5 自成一家的 Random- AccessFile / 327
7.1.6 I/O流的典型用法 / 328
7.1.7 小结 / 335
7.2 标准I/O / 335
7.2.1 从标准输入中读取 / 336
7.2.2 将 System.out 转换为 PrintWriter / 336
7.2.3 标准I/O重定向 / 337
7.2.4 进程控制 / 338
7.3 新I/O系统 / 340
7.3.1 字节缓冲区 ByteBuffer / 340
7.3.2 转换数据 / 344
7.3.3 获取基本类型 / 347
7.3.4 视图缓冲区 / 348
7.3.5 用缓冲区操纵数据 / 352
7.3.6 内存映射文件 / 357
7.3.7 文件加锁 / 361
第8章_设计模式
8.1 设计模式的概念 / 364
8.2 单例模式 / 366
8.3 设计模式的分类 / 370
8.4 模板方法 / 370
8.5 封装实现 / 371
8.5.1 代理模式 / 372
8.5.2 状态模式 / 373
8.5.3 状态机模式 / 376
8.6 工厂模式:封装对象的创建 / 377
8.6.1 动态工厂模式 / 380
8.6.2 多态工厂模式 / 381
8.6.3 抽象工厂模式 / 382
8.7 函数对象模式 / 384
8.7.1 命令模式 / 385
8.7.2 策略模式 / 386
8.7.3 职责链模式 / 388
8.8 改变接口 / 391
8.8.1 适配器模式 / 391
8.8.2 外观模式 / 392
8.9 解释器模式:运行时的灵活 性 / 394
8.10 回调 / 394
8.10.1 观察者模式 / 394
8.10.2 示例:观察花朵 / 395
8.10.3 一个可视化的观察者示 例 / 398
8.11 多路分发 / 401
8.12 模式重构 / 405
8.12.1 Trash 和它的子类 / 405
8.12.2 信使对象 / 410
8.12.3 使工厂通用化 / 411
8.12.4 从文件解析 Trash / 412
8.12.5 用 DynaFactory 实现回 收 / 415
8.12.6 将用法抽象化 / 416
8.12.7 用多路分发重新设计 / 420
8.12.8 访问者模式 / 427
8.12.9 反射是有害的? / 431
8.13 总结 / 435
附录A_编程指南
附录B Javadoc
附录C 理解equals()和hashCode()
附录D 数据压缩
附录E 对象序列化
附录F 静态类型检查的利与弊
· · · · · · (收起)
丛书信息
· · · · · ·
图灵程序设计丛书·Java系列(共60册),
这套丛书还有
《Scala程序设计》《Java轻松学》《明解Java》《On Java 中文版 基础卷》《Java EE 6权威指南》
等
。
喜欢读"On Java 中文版 进阶卷"的人也喜欢的电子书 · · · · · ·
支持 Web、iPhone、iPad、Android 阅读器
喜欢读"On Java 中文版 进阶卷"的人也喜欢 · · · · · ·
-
- Java程序员修炼之道 7.4
-
- Python深度学习 (第2版) 9.4
-
- 面向对象分析与设计 9.2
-
- 重构(第2版) 9.1
-
- 分布式系统应用设计 6.8
-
- 发布!(第2版) 7.8
-
- 用Go语言自制编译器 9.2
-
- 量子计算公开课 8.3
-
- 程序员面试金典(第6版) 9.5
On Java 中文版 进阶卷的书评 · · · · · · ( 全部 3 条 )
《On Java中文版 进阶卷》
《On Java》这本书我是从去年开始读的,因为本科时接触过java语言,所以学习起来并不是特别难。从基础卷到进阶卷,我感觉就像在游戏中打怪升级一样,能力需要一级一级提高。这套书给我最大的感受是真的是一本最大范围介绍java语言的书,基本所有的知识点和进阶的技术都涉及到了...
(展开)
> 更多书评 3篇
论坛 · · · · · ·
在这本书的论坛里发言以下书单推荐 · · · · · · ( 全部 )
- IT 三级 Java程序设计语言、框架技术(实用性) 1.1.1.1.2 (ajian005)
- Java 技术栈经典书籍 (镁铝合金)
- 术业-专攻 (hierro)
- Java技术书单 (OverFlow)
- 编程 (小槐)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有455人想读,手里有一本闲着?
订阅关于On Java 中文版 进阶卷的评论:
feed: rss 2.0

1 有用 墨鱼 2024-06-07 08:44:47 福建
并发这块不够深入,作者也推荐看其他书籍补充
0 有用 Arsonist 2025-10-26 17:07:31 上海
只读了最后的经验部分
0 有用 Yano 2022-09-15 08:52:58 北京
https://github.com/LjyYano/Thinking_in_Java_MindMapping
0 有用 Adrian Wang 2022-12-26 13:59:27 上海
内容充实,点面俱到,代码段真难看😂
0 有用 情满四合院 2022-08-09 22:28:33
图灵社区就没有差的书,谢谢