编辑推荐

适读人群:广大Java工程师与想系统性学习Java知识的读者群体

JavaSE9引入诸多重要特性,这些特性影响Java平台中心的核心技术和API。许多旧的Java习惯用法不再需要,而新的特性,例如模块化,可以让程序更高效。但是掌握这些变化并不容易,你需要提供更快、更便捷的《写给大忙人的JavaSE9核心技术》。

■使用模块简化复杂系统的开发。

■迁移应用以适应模块化的JavaAPI和第三方模块。

■使用新的JShell“读取-评估-打印”循环(REPL)随时测试你的代码。

■使用lambda表达式更简洁地表示行为。

■使用StreamAPI将数据管理流水线化并优化。

■基于协作任务使用现代并发编程。

■充分使用集合、输入\输出、正则表达式以及进程类改进的多个API。

内容简介

写给大忙人的Java SE 9核心技术》是经典著作《Java核心技术》(CoreJava)作者CayS.Horstmann的全新力作,书中以关键的核心技术为着眼点,以全局高度提炼语言精髓,以高浓度、高含金量的方式对JavaSE9的新特性进行细致讲解。作者将其沉浸于Java多年的真知灼见蕴藏于书中,既扎实覆盖Java编程的基础知识,又独具匠心地从Java9及其重要的新特性之一――模块发端,带领读者一路探索和实践Java的诸多新特性,诸如JShell、集合类工厂方法、改进的StreamAPI、私有接口、HTTP/2、并发编程中的增强部分、全新的时间/日期API,以及脚本语言在Java中的使用。“Impatient”系列图书风格鲜明,除悉数出自大师之手外,更以文笔轻松、易读易懂、富含生动且可用于实践的示例程序(下载源代码后可直接运行)而见长。这种亲身实践的讲授模式,非常便于读者加深对技术的理解和掌握。初学者可用来参考入门;有开发经验者也可用来巩固编程核心知识,与时俱进地把握技术发展现状与未来趋势。《写给大忙人的Java SE 9核心技术》适合有一定Java开发经验的工程师或者架构师阅读,也可以作为Java新特性的参考手册。

作者简介

CayS.Horstmann,是名著《CoreJava》的主要作者,同时也是《写给大忙人的JavaSE8》(JavaSE8fortheReallyImpatient)与《快学Scala》(Scalafortheimpatient)两《写给大忙人的Java SE 9核心技术》的作者。作为圣荷西州立大学计算机科学专业的一名教授,以及一位Java拥护者,他还编写了一系列针对专业编程人员和计算机专业学生的书籍。
杨谦,IBM高级软件开发工程师,具有10年以上Java商业开发实战经验,先后参与《SQLite**指南(第2版)》《写给大忙人看的Java核心技术》等Java相关书籍的翻译。

目录

第1章 基本的编程结构1
1.1 第一个程序2
1.1.1 "Hello,World"程序解析2
1.1.2 编译与运行Java程序3
1.1.3 方法调用5
1.1.4 JShell7
1.2 基本类型11
1.2.1 有符号整型11
1.2.2 浮点类型12
1.2.3 char型13
1.2.4 布尔型14
1.3 变量14
1.3.1 变量的声明14
1.3.2 名称14
1.3.3 初始化15
1.3.4 常量15
1.4 算术操作17
1.4.1 赋值18
1.4.2 基本运算18
1.4.3 数学方法20
1.4.4 数字类型转换21
1.4.5 关系操作符和逻辑操作符22
1.4.6 大数24
1.5 字符串24
1.5.1 字符串的连接25
1.5.2 子字符串26
1.5.3 字符串比较26
1.5.4 数字与字符串转换28
1.5.5 String类API29
1.5.6 编码点和编码单元31
1.6 输入与输出33
1.6.1 读取输入33
1.6.2 格式化输出35
1.7 控制流37
1.7.1 分支37
1.7.2 循环39
1.7.3 跳出循环与继续循环41
1.7.4 局部变量作用域43
1.8 数组和数组列表44
1.8.1 使用数组44
1.8.2 构造数组45
1.8.3 数组列表47
1.8.4 基本类型包装类48
1.8.5 增强的for循环48
1.8.6 数组与数组列表的复制49
1.8.7 数组算法50
1.8.8 命令行参数51
1.8.9 多维数组52
1.9 功能分解55
1.9.1 静态方法的声明与调用55
1.9.2 数组参数与返回值55
1.9.3 可变参数56
练习57
第2章 面向对象编程61
2.1 使用对象62
2.1.1 访问器方法和修改器方法64
2.1.2 对象引用65
2.2 实现类67
2.2.1 实例变量67
2.2.2 方法头67
2.2.3 方法体68
2.2.4 实例方法调用69
2.2.5 this引用69
2.2.6 值调用70
2.3 构造对象72
2.3.1 实现构造函数72
2.3.2 重载73
2.3.3 调用另一个构造函数74
2.3.4 默认初始化74
2.3.5 实例变量的初始化75
2.3.6 final实例变量76
2.3.7 无参构造函数76
2.4 静态变量和方法77
2.4.1 静态变量77
2.4.2 静态常量78
2.4.3 静态初始块79
2.4.4 静态方法80
2.4.5 工厂方法81
2.5 包82
2.5.1 包的声明82
2.5.2 jar命令83
2.5.3 类路径84
2.5.4 包访问权限86
2.5.5 导入类87
2.5.6 静态导入88
2.6 嵌套类89
2.6.1 静态嵌套类89
2.6.2 内部类91
2.6.3 内部类的特殊语法93
2.7 文档注释95
2.7.1 插入注释95
2.7.2 类注释96
2.7.3 方法注释97
2.7.4 变量注释97
2.7.5 通用注释98
2.7.6 链接98
2.7.7 包、模块和概述注释99
2.7.8 注释的提取99
练习100
第3章 接口和lambda表达式105
3.1 接口106
3.1.1 声明接口106
3.1.2 实现接口107
3.1.3 转换为接口类型109
3.1.4 强制类型转换和instanceof操作符109
3.1.5 继承接口.110
3.1.6 实现多个接口111
3.1.7 常量111
3.2 静态方法、默认方法和私有方法112
3.2.1 静态方法112
3.2.2 默认方法112
3.2.3 解决默认方法冲突的问题113
3.2.4私有方法115
3.3 接口示例115
3.3.1 Comparable接口115
3.3.2 Comparator接口117
3.3.3 Runnable接口118
3.3.4 UI回调119
3.4 lambda表达式120
3.4.1 lambda表达式语法121
3.4.2 函数式接口122
3.5 方法引用和构造函数引用123
3.5.1 方法引用123
3.5.2 构造函数引用125
3.6 使用lambda表达式126
3.6.1 实现延迟执行126
3.6.2 选择函数式接口127
3.6.3 实现自己的函数式接口129
3.7 lambda表达式和变量作用域130
3.7.1 lambda表达式的作用域130
3.7.2 访问来自闭合作用域的变量131
3.8 高阶函数133
3.8.1 返回函数的方法134
3.8.2 修改函数的方法134
3.8.3 Comparator方法135
3.9 局部类和匿名类136
3.9.1 局部类136
3.9.2 匿名类137
练习.138
第4章 继承与反射143
4.1 继承一个类144
4.1.1 父类与子类144
4.1.2 定义和继承子类方法145
4.1.3 方法覆盖145
4.1.4 子类的构造147
4.1.5 父类赋值147
4.1.6 转换148
4.1.7 final方法和类149
4.1.8 抽象方法和类149
4.1.9 受保护访问150
4.1.10 匿名子类151
4.1.11 继承和默认方法152
4.1.12 带super的方法表达式153
4.2 Object:终极父类153
4.2.1 toString方法154
4.2.2 equals方法156
4.2.3 hashCode方法159
4.2.4 克隆对象160
4.3 枚举163
4.3.1 枚举方法164
4.3.2 构造函数、方法和域165
4.3.3 实例的实现体165
4.3.4 静态成员166
4.3.5 switch枚举对象167
4.4 运行时类型信息和资源168
4.4.1 Class类168
4.4.2 资源加载172
4.4.3 类加载器172
4.4.4 上下文类加载器174
4.4.5 服务加载器176
4.5 反射178
4.5.1 枚举类成员178
4.5.2 对象检查179
4.5.3 方法调用180
4.5.4 对象构造181
4.5.5 JavaBeans182
4.5.6 使用数组183
4.5.7 代理185
练习.187
第5章 异常、断言和日志处理191
5.1 异常处理192
5.1.1 异常抛出192
5.1.2 异常继承层次193
5.1.3 已检查异常的声明195
5.1.4 异常捕获196
5.1.5 try-with-resources语句197
5.1.6 finally子句199
5.1.7 异常重抛和链接200
5.1.8 未捕获的异常和堆栈踪迹202
5.1.9 Objects.requireNonNull方法203
5.2 断言204
5.2.1 使用断言205
5.2.2 启用和禁用断言205
5.3 记录日志206
5.3.1 采用日志记录器206
5.3.2 日志记录器207
5.3.3 日志级别207
5.3.4 其他日志记录方法208
5.3.5 日志记录的配置项210
5.3.6 日志处理器211
5.3.7 过滤器和格式化器214
练习215
第6章 泛型编程219
6.1 泛型类220
6.2 泛型方法221
6.3 类型限定222
6.4 类型变异和通配符223
6.4.1 子类型通配符224
6.4.2 父类型通配符225
6.4.3 带类型变量的通配符226
6.4.4 无限定通配符228
6.4.5 通配符捕获228
6.5 Java虚拟机中的泛型229
6.5.1 类型擦除229
6.5.2 转换插入230
6.5.3 桥方法230
6.6 泛型约束232
6.6.1 无基本类型参数232
6.6.2 所有类型在运行时都是原始的233
6.6.3 不能实例化类型变量234
6.6.4 不能构造参数化类型的数组236
6.6.5 静态上下文中的类类型变量不是有效的237
6.6.6 类型擦除后的方法可能不冲突238
6.6.7 异常与泛型239
6.7 反射与泛型240
6.7.1 Class<T>类240
6.7.2 虚拟机中的泛型类型信息242
练习243
第7章 集合249
7.1 集合框架概要249
7.2 迭代器254
7.3 set256
7.4 map257
7.5 其他集合261
7.5.1 Properties261
7.5.2 位组262
7.5.3 枚举set和枚举map264
7.5.4 栈、队列、双端队列、优先级队列264
7.5.5 弱哈希映射表266
7.6 视图266
7.6.1 小集合267
7.6.2 范围268
7.6.3 不可修改的视图268
练习.269
第8章 Stream.273
8.1 从迭代到Stream操作274
8.2 创建Stream275
8.3 filter、map和flatMap方法277
8.4 提取子流和组合流279
8.5 其他流转换280
8.6 简单归约281
8.7 Optional类型282
8.7.1 如何使用Optional类型值282
8.7.2 如何不使用Optional类型值284
8.7.3 创建Optional类型值284
8.7.4 使用flatMap来组合可选值函数285
8.7.5 将Optional转变为流286
8.8 收集结果287
8.9 将结果收集到map中289
8.10 分组和分片290
8.11 下游收集器291
8.12 归约操作294
8.13 基本类型流296
8.14 并行流297
练习300
第9章 输入与输出处理305
9.1 输入/输出流、Reader和Writer306
9.1.1 获取流对象306
9.1.2 读取字节307
9.1.3 写字节308
9.1.4 字符编码308
9.1.5 文本输入311
9.1.6 文本输出313
9.1.7 读/写二进制数据314
9.1.8 随机存取文件315
9.1.9 内存映射文件315
9.1.10 文件锁316
9.2 路径、文件和目录317
9.2.1 路径317
9.2.2 创建文件和目录319
9.2.3 复制、移动和删除文件320
9.2.4 访问目录内容321
9.2.5 ZIP文件系统324
9.3 HTTP连接325
9.3.1 URLConnection类和HttpURLConnection类326
9.3.2 HTTPClientAPI327
9.4 正则表达式330
9.4.1 正则表达式概述330
9.4.2 找到一个匹配334
9.4.3 找到所有匹配335
9.4.4 分组336
9.4.5 以分隔符号分割337
9.4.6 替换匹配结果338
9.4.7 标记339
9.5 序列化339
9.5.1 Serializable接口340
9.5.2 瞬态实例变量342
9.5.3 readObject和writeObject方法342
9.5.4 readResolve和writeReplace方法343
9.5.5 版本化345
练习.346
第10章 并发编程351
10.1 并发任务352
10.1.1 运行任务352
10.1.2 Future354
10.2 异步计算357
10.2.1 可完成的Future357
10.2.2 组合可完成的Future359
10.2.3 UI回调中的长时间运行任务362
10.3 线程安全364
10.3.1 可见性364
10.3.2 竞争条件366
10.3.3 安全并发的策略369
10.3.4 不可变类369
10.4 并行算法370
10.4.1 并行流370
10.4.2 并行数组操作371
10.5 线程安全的数据结构372
10.5.1 ConcurrentHashMap.373
10.5.2 阻塞队列374
10.5.3 其他线程安全的数据结构375
10.6 原子计数器和累加器376
10.7 锁和条件379
10.7.1 锁379
10.7.2 synchronized关键字380
10.7.3 条件等待382
10.8 线程385
10.8.1 启动线程385
10.8.2 线程中断386
10.8.3 线程变量388
10.8.4 线程的其他属性388
10.9 进程389
10.9.1 构建进程389
10.9.2 运行进程391
10.9.3 ProcessHandle392
练习.393
第11章 注解.401
11.1 使用注解402
11.1.1 注解元素402
11.1.2 多注解和重复注解403
11.1.3 注解声明404
11.1.4 注解类型用途405
11.1.5 明确接收者406
11.2 定义注解408
11.3 标准注解410
11.3.1 编译相关的注解411
11.3.2 资源管理相关的注解412
11.3.3 元注解412
11.4 运行时注解处理414
11.5 源码级注解处理418
11.5.1 注解处理器418
11.5.2 语言模型API419
11.5.3 使用注解生成源码419
练习423
第12章 日期和时间API427
12.1 时间线428
12.2 本地日期430
12.3 日期调整器433
12.4 本地时间435
12.5 时区时间436
12.6 格式化和解析439
12.7 应对遗留代码442
练习.443
第13章 国际化447
13.1 本地化448
13.1.1 指定本地化448
13.1.2 默认的locale451
13.1.3 显示名称452
13.2 数字格式化453
13.3 货币符号454
13.4 日期和时间格式化455
13.5 排序和规范化457
13.6 消息格式化459
13.7 资源束461
13.7.1 组织资源束462
13.7.2 资源束类464
13.8 字符编码465
13.9 首选项466
练习468
第14章 编译与脚本471
14.1 编译器API471
14.1.1 调用编译器472
14.1.2 启动编译任务472
14.1.3 从内存读取源文件473
14.1.4 向内存写入字节码474
14.1.5 捕获诊断信息476
14.2 脚本API476
14.2.1 获取脚本引擎476
14.2.2 绑定477
14.2.3 重定向输入与输出478
14.2.4 调用脚本函数和方法479
14.2.5 编译脚本480
14.3 Nashorn脚本引擎481
14.3.1 从命令行运行Nashorn.481
14.3.2 调用getter、setter和重载方法482
14.3.3 构造Java对象483
14.3.4 JavaScript和Java中的字符串485
14.3.5 数字485
14.3.6 使用数组486
14.3.7 列表与映射487
14.3.8 lambda表达式488
14.3.9 继承Java类与实现Java接口489
14.3.10 异常491
14.4 shell脚本与Nashorn491
14.4.1 执行shell命令492
14.4.2 字符串插值492
14.4.3 脚本输入493
练习494
第15章 Java平台模块系统499
15.1 模块的概念500
15.2 模块命名501
15.3 模块化“Hello,World!”程序502
15.4 引入模块504
15.5 导出包506
15.6 模块化和反射访问510
15.7 模块化的JAR.513
15.8 自动模块和未命名模块515
15.9 用于迁移的命令行标识516
15.10 传递和静态引入518
15.11 限定导入和打开520
15.12 服务加载521
15.13 模块化用的工具522
练习525

前言/序言

  推荐序一
  1991年,来自Sun公司的一个名为“GreenTeam”的小团队的3个人:JamesGosling、MikeSheridan和PatrickNaughton发布了一个叫作“Greentalk”的语言,其最初设计目标是在小型嵌入式设备中运行应用程序,这也就是Java语言的雏形。自1995年发行的第一个Alpha版本开始,Java距今已有23年历史了,可谓经久不衰,算得上历史上最成功的语言了。
  2017年9月21日,Java9发布了,引入了诸多新特性,例如,集合类工厂方法、私有接口、支持HTTP/2,以及并发处理的改进等。其实做JavaWeb开发的时间越长,越需要对Java底层实现深入了解。通过《写给大忙人的Java SE 9核心技术》,能够准确理解Java技术的走向,帮助Java开发者从JDK层面重构应用的代码。另外,《写给大忙人的Java SE 9核心技术》是国内目前关于Java9为数不多的中文版书籍,而《写给大忙人的Java SE 9核心技术》的译者是我在IBM多年的同事,其一直专注于Java开发。《写给大忙人的Java SE 9核心技术》的翻译质量较高,通俗易懂,用词准确,通过阅读书中内容,能够帮助广大Java开发者更快、更准确地了解Java9的特性。
  王青
  杰蛙科技(北京)有限公司首席架构师
  推荐序二
  我曾经在IBM一起战斗过的兄弟杨谦邀请我为《写给大忙人的Java SE 9核心技术》作序,我虽然心怀忐忑,但还是欣然应允了。
  Java老手都会知道CoreJava(《Java核心技术》)这部大作,《写给大忙人的Java SE 9核心技术》的作者CayS.Horstmann也正是CoreJava的主要作者。他是圣荷西州立大学计算机系的教授、Java语言的积极倡导者,他能够以形象的语言,向大家阐述抽象的Java概念,让初学者能够很容易地掌握Java这门语言。然而光阴似箭,Java到今天已经经历了二十多个寒暑。这么长的时间里,Java也已经演化到了9.0版本,许多更先进的思想和更简洁的API被加入进来,同时也抛弃了很多过时的内容。在这样的情况下,CoreJava这本大部头就多多少少显得有些不合时宜了,这也是CayS.Horstmann写作《写给大忙人的Java SE 9核心技术》的原因。在《写给大忙人的Java SE 9核心技术》中,CayS.Horstmann针对Java应用开发人员,提炼出了Java最核心、最新鲜、工作中最常用到的部分,舍弃了诸如Swing等在现实工作中很少用到的内容,让读者在最短的时间里尽情吸收Java语言的精华,以快速地把所学的知识应用到实际工作中去。
  《写给大忙人的Java SE 9核心技术》的译者之一杨谦是我在IBMCDL时朝夕相处的同事,他有着十多年的Java实战经验和深厚的技术功底,同时还秉承了IBM一贯的科学严谨作风,再加上长期外企工作环境的熏陶,锻炼出了对英文技术资料很好的阅读理解能力。我相信,他们完全能够将《写给大忙人的Java SE 9核心技术》中的内容用中文清晰、准确地呈献给读者。
  霍振中
  北京大米未来科技有限公司联合创始人、CTO
  译者序
  2017年Oracle发布了Java9。Java9引入了大家期待已久的模块功能以及很多其他特性,例如,JShell、集合类工厂方法、改进的StreamAPI、私有接口、HTTP/2等。《写给大忙人的Java SE 9核心技术》特色鲜明,它不仅为开发者全面介绍这些新特性,而且从Java的最核心基础——类、继承、接口、反射、泛型编程、集合等开始。《写给大忙人的Java SE 9核心技术》的开始几章全面细致、重点突出地介绍Java的核心基础并在第3章穿插了lambda表达式。之后各章全面介绍Java的新特性和原有功能的改进,其中第8章详细介绍Stream的使用,第10章介绍最新的并发编程API,第15章详细介绍模块。《写给大忙人的Java SE 9核心技术》内容翔实,实例丰富,理论与实践并举。
  译者在翻译《写给大忙人的Java SE 9核心技术》时,一边感到万分的荣幸,一边又感到责任重大。吉尔伯特·海特(美国教育家)曾经说过:写了一本很糟糕的书只是犯错而已,而把一本好书翻译得很糟糕则是犯罪。但是对于《写给大忙人的Java SE 9核心技术》这样的Java核心技术和最新特性之作,即便是冒着犯罪的风险,也值得翻译出来并推荐给大家。
  《写给大忙人的Java SE 9核心技术》承载的内容丰富而深入。在翻译的过程中,译者也常感汗颜,原来自诩对Java新特性颇为了解的我深刻感受到自己知识面的浅薄和不完整,于是翻译过程也成为自己检讨和学习的过程,收获颇丰。《写给大忙人的Java SE 9核心技术》的作者是经典书籍CoreJava(《Java核心技术》)的主要作者,他有着丰富的Java知识,并一直在普及介绍Java的最新特性。因此,希望大家反复阅读《写给大忙人的Java SE 9核心技术》,如此一来必定受益无穷。
  由于《写给大忙人的Java SE 9核心技术》作者的知识广博、经验丰富,而译者本人知识有限、时间仓促,难免使得原文的个别之处无法原汁原味地呈现给读者,在此敬请各位读者多多包涵,不吝指教,并帮忙指出纰漏。我也希望能就《写给大忙人的Java SE 9核心技术》的内容与读者有更多的交流,联系邮箱是yqbjtu@163.com。
  最后,我要感谢电子工业出版社博文视点公司的张春雨编辑在译书的过程中给予我们的莫大帮助。我还要感谢《写给大忙人的Java SE 9核心技术》的其他译者章历、王巍、高伟斌、张媛、田敏、王雪芳、杨建轩、康引鸽、刘增涛、杨燕、史肖玲、张会平、郝明、刘香兰、田丰产、刘回良和东莞经济贸易学校的谢志强老师等。在此还要特别感谢杰蛙科技(北京)有限公司的首席架构师王青先生和北京大米未来科技有限公司的CTO霍振中先生,他们的参与使得《写给大忙人的Java SE 9核心技术》的质量得到进一步保证。
  杨谦
  2018年7月于北京志新村
  前言
  Java已诞生20多年,经典书籍CoreJava(《Java核心技术》)卷Ⅰ和卷Ⅱ用2000多页全面细致地介绍了Java语言和所有核心类库,以及各版本之间的大量变化。但是如果你想更高效地使用现代Java,那么《写给大忙人的Java SE 9核心技术》提供了一种更快、更方便地学习Java语言和核心类库的途径。在《写给大忙人的Java SE 9核心技术》中,我们不会追溯历史一直介绍过去版本的特性。我们将通过Java9,展示现代Java中的“优秀之处”,因此你可以快速地将它们应用到工作中。
  与我之前的“Impatient”系列书籍类似,《写给大忙人的Java SE 9核心技术》也会开门见山地告诉你解决编程问题所需要知道的内容,但不会就某个范例比另外一个范例更有优势而展开讲解。我们会采用有序且篇幅较小的方式展示信息,这样需要信息时,你就可以快速检索获取。
  假设你精通其他编程语言,例如C++、JavaScript、Objective-C、PHP或Ruby,通过《写给大忙人的Java SE 9核心技术》,你将学习如何成为一个称职的Java程序员。我们会涵盖Java开发者需要知道的方方面面,包括功能强大的lambda表达式和Stream。我会告诉你哪里可以找到关于旧式概念的更多信息,你可能依然会在一些遗留代码中看到这些旧式概念,但是我们不会就此展开。
  使用Java的一个关键原因是解决并发编程问题。使用Java类库中现成的并行算法和线程安全的数据结构,彻底改变了程序员处理并发编程的方式。我们会提供新的示例,告诉你如何使用强大的类库特性代替那些易出错、低水平的数据结构。
  传统的Java书籍关注UI编程——但是现在,很少有开发者在桌面计算机开发用户界面了。如果你想将Java用在服务器端编程或者Android编程,就可以更有效地使用《写给大忙人的Java SE 9核心技术》,而不被桌面GUI代码干扰了。
  最后,《写给大忙人的Java SE 9核心技术》是写给应用软件编程者的,不是大学教科书,也不适合作为系统向导。《写给大忙人的Java SE 9核心技术》包含了一些应用软件编程者需要设法解决的问题,例如日志和文件使用,但是你不必学习如何实现链表或者开发一个Web服务器。
  希望你喜欢对现代Java的快速介绍,同时希望它能提高你的Java开发工作效率并愉快地使用Java。
  译者序
  2017年Oracle发布了Java9。Java9引入了大家期待已久的模块功能以及很多其他特性,例如,JShell、集合类工厂方法、改进的StreamAPI、私有接口、HTTP/2等。《写给大忙人的Java SE 9核心技术》特色鲜明,它不仅为开发者全面介绍这些新特性,而且从Java的最核心基础——类、继承、接口、反射、泛型编程、集合等开始。《写给大忙人的Java SE 9核心技术》的开始几章全面细致、重点突出地介绍Java的核心基础并在第3章穿插了lambda表达式。之后各章全面介绍Java的新特性和原有功能的改进,其中第8章详细介绍Stream的使用,第10章介绍最新的并发编程API,第15章详细介绍模块。《写给大忙人的Java SE 9核心技术》内容翔实,实例丰富,理论与实践并举。
  译者在翻译《写给大忙人的Java SE 9核心技术》时,一边感到万分的荣幸,一边又感到责任重大。吉尔伯特?海特(美国教育家)曾经说过:写了一本很糟糕的书只是犯错而已,而把一本好书翻译得很糟糕则是犯罪。但是对于《写给大忙人的Java SE 9核心技术》这样的Java核心技术和最新特性之作,即便是冒着犯罪的风险,也值得翻译出来并推荐给大家。
  《写给大忙人的Java SE 9核心技术》承载的内容丰富而深入。在翻译的过程中,译者也常感汗颜,原来自诩对Java新特性颇为了解的我深刻感受到自己知识面的浅薄和不完整,于是翻译过程也成为自己检讨和学习的过程,收获颇丰。《写给大忙人的Java SE 9核心技术》的作者是经典书籍CoreJava(《Java核心技术》)的主要作者,他有着丰富的Java知识,并一直在普及介绍Java的最新特性。因此,希望大家反复阅读《写给大忙人的Java SE 9核心技术》,如此一来必定受益无穷。
  由于《写给大忙人的Java SE 9核心技术》作者的知识广博、经验丰富,而译者本人知识有限、时间仓促,难免使得原文的个别之处无法原汁原味地呈现给读者,在此敬请各位读者多多包涵,不吝指教,并帮忙指出纰漏。我也希望能就《写给大忙人的Java SE 9核心技术》的内容与读者有更多的交流,联系邮箱是yqbjtu@163.com。
  最后,我要感谢电子工业出版社博文视点公司的张春雨编辑在译书的过程中给予我们的莫大帮助。我还要感谢《写给大忙人的Java SE 9核心技术》的其他译者章历、王巍、高伟斌、张媛、田敏、王雪芳、杨建轩、康引鸽、刘增涛、杨燕、史肖玲、张会平、郝明、刘香兰、田丰产、刘回良和东莞经济贸易学校的谢志强老师等。在此还要特别感谢杰蛙科技(北京)有限公司的首席架构师王青先生和北京大米未来科技有限公司的CTO霍振中先生,他们的参与使得《写给大忙人的Java SE 9核心技术》的质量得到进一步保证。
  杨谦
  2018年9月于北京志新村

其他推荐