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