Java无难事——详解Java编程核心思想与技术(第2版)
  • 推荐0
  • 收藏0
  • 浏览40

Java无难事——详解Java编程核心思想与技术(第2版)

孙鑫 (作者)  高洪霞 (责任编辑)

  • 书  号:9787121445545
  • 出版日期:2023-01-01
  • 页  数:844
  • 开  本:16(240*190)
  • 出版状态:上市销售
  • 维护人:博文小编
《Java无难事》让你学习Java再无难事!本书系统地讲解了Java开发人员需要掌握的核心知识,按照中国人的思维习惯,由浅入深、循序渐进、引导式地带领你快速掌握Java知识。
《Java无难事——详解Java编程核心思想与技术(第2版)》秉承作者一贯的写作风格,对知识的讲解让你知其然且知其所以然。
《Java无难事——详解Java编程核心思想与技术(第2版)》语言通俗易懂、幽默风趣,在内容安排上由浅入深,在知识讲解上深入浅出,为你节省脑细胞,让你轻松愉快地掌握Java知识。看书累了,没关系,还有视频。同步学习视频并不是书中内容的重复,而是有力的补充和完善。
《Java无难事——详解Java编程核心思想与技术(第2版)》还讲解了依赖注入(IoC/DI)容器、面向切面编程(AOP)、对象关系映射(ORM)框架的实现原理,同时还给出了并发编程领域中经常用到的线程池的实现。
《Java无难事——详解Java编程核心思想与技术(第2版)》涵盖了从Java 5到Java 11的所有重要新特性,不仅适合初学Java编程的读者,也适合有一定经验的读者,甚至对于正在从事Java开发工作的读者也适用。
书中附赠长达40小时视频,含知识点+有力延伸扩充!知识点旁即有对应视频二维码,即学即看,学习起来更方便!涵盖了从Java 5到Java11新增的特性,每章均附带实用性练习题
孙鑫,IT技术和教育专家,2009年中国教育杰出人物。具有20多年的软件开发和教育培训经验,精通多种程序语言和技术架构。曾出版多本畅销技术专著,包括《Java Web开发详解》 《VC++深入详解》《Struts 2深入详解》《Servlet/JSP深入详解》《详解Spring Boot : 从入门到企业级开发实战》等。
前言
笔者推出《Java无难事》的教学视频,曾获得广大用户的充分肯定;历经多年创作了这本同名图书,无论从广度还是深度上来看,内容都比当年的视频更加丰富、全面、深入。笔者的写作目的只有一个:让Java的学习再无难事!
本书特色
将深奥的知识以最浅显的语言讲述出来!
循序渐进、以幽默风趣的语言一步步引导读者,真正掌握Java开发的所有知识!

快速入门
按照中国人的思维习惯和学习规律,内容安排上由浅入深,知识讲解上深入浅出,为读者节省脑细胞,帮助读者轻松愉快地掌握Java知识。
实例丰富
理论脱离实践则毫无意义,本书在进行理论讲解的同时,给出了大量的示例。全书示例数量达到数百个,以示例验证理论,跟着示例边学边做,你学习起来会更简单、轻松、高效。
知其然而知其所以然
秉承作者一贯的写作风格,对知识的讲解让你知其然且知其所以然,绝不会出现含糊不清、一遇难点即跳过的情形。以第1章为例,就不仅告诉你Java有哪些版本,还告诉你Java混乱名称的由来,不让你脑海里有任何疑问。本书为你扫清Java学习路途中所有的绊脚石。
涵盖从Java 5到Java 11的新特性
目前最新的Java长期支持版本是Java 11,但还有很多企业使用的是Java 8版本,本书涵盖了从Java 5到Java 11的绝大部分新增特性,将常用特性无一疏漏地贯穿在全书中。此外,考虑到读者在工作中使用的Java版本不是由自己决定的,本书尽可能地对知识点来自Java哪个版本的新增特性给出了说明。
贴近实战的练习题
本书每章结尾都给出了贴近实战的练习题,难度有浅、有深,适合各类型的读者,帮助读者巩固所学知识。若能够完成本书的练习题,就代表读者已经彻底掌握本书的内容了。
三个框架、一个线程池
随着本书内容的逐步推进,书中还为学有余力的读者讲解了依赖注入(IoC/DI)容器、面向切面编程(AOP)、对象关系映射(ORM)框架的实现原理,同时还给出了并发编程领域中经常用到的线程池的实现。
本书的内容组织
Java发展至今,早已不是当年那个花费一两周时间就能掌握的版本了,其应用的领域也越来越多。笔者可以负责任地告诉读者,本书基本涵盖了你未来从事Java领域开发所需要了解和掌握的Java SE的所有知识。
现阶段的Java也是越来越复杂,学习起来会有很多难以理解的知识点,不过读者不用担心,本书并不是对知识点的简单罗列,实际上,作者按照知识的连贯性,遵循中国人的思维习惯,对Java知识进行了编排,尽最大努力以通俗易懂的语言,循序渐进地引导读者快速掌握这些内容。本书的内容详尽而丰富,建议读者仔细阅览本书的章节目录来了解本书的内容结构。
如何阅读本书
没有学过任何程序设计语言的读者,建议结合视频同步学习,视频对书中的内容有更详细的讲解。而有经验的读者,则可以根据自己对知识掌握的程度和自己的需要,结合本书,选择对应的视频观看。例如,可以先看一下第21章的内容,掌握Eclipse的使用,然后利用Eclipse来编写本章的示例程序。
如果读者后期想要进一步学习Java Web开发的内容,可以参看笔者的另一本著作《Servlet/JSP深入详解》。
视频同步学习与增值服务
本书附增超值视频。读者扫描书中各知识点旁边的二维码即可观看相关视频,视频并不是书中内容的简单重复,而是对本书内容有力的补充和完善。
看完本书就结束了吗?不!本书还为广大读者提供后续服务。微信扫描封底二维码即可加入本书学习交流群,在这里,你可以享受到在线答疑、Java的资料分享,甚至面试指导。当然,你也可以在这里结识编程路上志同道合的朋友。
本书面向的读者
本书不仅适合想要学习Java开发的新手,也适合有一点编程经验的读者。正在从事Java开发的读者也可以通过本书夯实Java基础,完善Java的知识面。
当然对于曾经从事Java开发工作,后来转用别的语言做开发,现在又需要重新了解Java新版本的读者,本书也适用。

孙鑫
2022年11月

目录

第1章 Java初窥 1
1.1 Java的起源 1
1.2 Java能做什么 1
1.3 相关概念 2
1.3.1 JDK 2
1.3.2 Java家族的三个成员 2
1.3.3 Java 1、Java 2和Java 5 3
1.3.4 JRE 3
1.4 安装JDK 3
1.4.1 下载JDK 11(Java SE 11) 4
1.4.2 安装JDK 5
1.4.3 下载帮助文档 6
1.5 Java的特性 6
1.5.1 简单 6
1.5.2 面向对象 7
1.5.3 健壮 7
1.5.4 安全 7
1.5.5 结构中立 7
1.5.6 可移植 7
1.5.7 高性能 8
1.5.8 解释执行 8
1.5.9 平台无关 8
1.5.10 多线程 8
1.5.11 动态 9
1.6 Java跨平台的原理 9
1.6.1 Java源文件的编译过程 9
1.6.2 Java解释器运行机制 9
1.6.3 Java字节码的执行方式 10
1.6.4 理解JVM 10
1.7 第一个程序 11
1.7.1 了解JDK 11
1.7.2 编写第一个Java程序 11
1.8 扫清Java征途中的两块绊脚石 15
1.8.1 有用的PATH 15
1.8.2 难缠的CLASSPATH 17
1.9 交互式编程环境JShell 19
1.10 为Java程序打包 20
1.10.1 JAR文件 20
1.10.2 将字节码文件打包到JAR包中 20
1.10.3 将目录中所有文件打包到JAR文件中 21
1.10.4 清单文件 21
1.11 总结 22
1.12 实战练习 22
第2章 初识Java语言 23
2.1 标识符 23
2.2 数据类型 23
2.2.1 整数类型 24
2.2.2 浮点类型 25
2.2.3 字符(char)型 25
2.2.4 布尔(boolean)型 26
2.2.5 String类型 26
2.3 变量和字面常量 26
2.3.1 变量 26
2.3.2 字面常量 27
2.4 类型转换的奥秘 30
2.5 运算符 32
2.5.1 赋值运算符 32
2.5.2 自增和自减运算符 32
2.5.3 算术运算符 33
2.5.4 关系运算符 34
2.5.5 布尔运算符 34
2.5.6 位运算符 35
2.5.7 移位运算符 37
2.5.8 一元和二元运算符 39
2.5.9 三元运算符 39
2.5.10 优先级 39
2.6 表达式与语句 40
2.7 程序结构 40
2.7.1 分支语句 41
2.7.2 循环语句 46
2.8 数组 54
2.8.1 数组类型与声明数组 54
2.8.2 创建数组 55
2.8.3 使用数组 56
2.8.4 匿名数组 57
2.8.5 多维数组 57
2.8.6 数组的初始值和越界 59
2.9 分隔符 60
2.10 注释 60
2.10.1 传统注释 60
2.10.2 JavaDoc注释 61
2.11 Java中的关键字 63
2.12 总结 63
2.13 实战练习 63
第3章 进入对象的世界 65
3.1 面向对象思想 65
3.2 对象的状态和行为 66
3.2.1 对象都有一组固定的行为 66
3.2.2 注意思维习惯 66
3.3 面向对象编程的难点 67
3.4 Java的类与对象 67
3.5 字段(field)与方法 68
3.5.1 字段 68
3.5.2 方法 68
3.5.3 方法的参数与返回值 69
3.6 构造方法与new关键字 71
3.7 方法重载 74
3.8 特殊变量this 75
3.9 关键字static 79
3.9.1 静态字段 79
3.9.2 静态方法 81
3.9.3 static语句块 82
3.10 常量 82
3.11 枚举(enum) 83
3.11.1 原始的枚举实现 83
3.11.2 枚举类型 84
3.11.3 枚举值的比较 86
3.11.4 自定义枚举值 86
3.12 总结 87
3.13 实战练习 87
第4章 高级面向对象编程 88
4.1 继承 88
4.2 方法的覆盖(override) 90
4.3 多态(polymorphism) 91
4.3.1 何为多态 91
4.3.2 多态的实际应用 92
4.3.3 Java编译器如何实现多态 94
4.3.4 类型转换 94
4.3.5 协变返回类型 96
4.3.6 在构造方法中调用被覆盖的方法 97
4.4 特殊变量super 98
4.4.1 访问父类被子类覆盖的方法或隐藏的变量 98
4.4.2 调用父类构造方法 100
4.5 封装与private 103
4.6 对外发布的接口——public 107
4.7 再谈final 109
4.7.1 final类 109
4.7.2 final方法 109
4.7.3 final参数 110
4.8 对象的销毁 110
4.9 面向对象的四个基本特性 111
4.10 总结 112
4.11 实战练习 112
第5章 包和访问控制 114
5.1 在包中的类 114
5.2 导入类 117
5.3 静态导入 119
5.4 静态导入枚举类型 120
5.5 访问控制 121
5.5.1 类的访问说明符 121
5.5.2 类成员的访问说明符 122
5.6 总结 126
5.7 实战练习 126
第6章 抽象类与接口 127
6.1 抽象方法和抽象类 127
6.2 接口 131
6.3 接口中的数据成员 133
6.4 接口的继承与实现 133
6.5 接口的应用 135
6.6 深入接口——通信双方的协议 137
6.7 接口的默认方法和静态方法 139
6.7.1 默认方法 139
6.7.2 静态方法 144
6.8 接口的私有方法 145
6.9 总结 146
6.10 实战练习 147
第7章 内部类(Inner Class) 149
7.1 创建内部类 149
7.2 访问外部类 150
7.3 内部类与接口 153
7.4 局部内部类 155
7.5 匿名内部类 157
7.5.1 创建匿名内部类 157
7.5.2 匿名内部类的构造方法 159
7.6 静态内部类 160
7.7 内部类的继承与覆盖 161
7.7.1 内部类的继承 161
7.7.2 内部类的覆盖 162
7.8 内部类规则总结 163
7.9 回调与事件机制 163
7.9.1 回调(callback) 163
7.9.2 事件(event) 167
7.10 总结 169
7.11 实战练习 169
第8章 异常处理 170
8.1 什么是异常 170
8.2 捕获异常 172
8.3 使用finally进行清理 175
8.4 抛出异常与声明异常 179
8.5 RuntimeException 182
8.6 创建自己的异常体系结构 184
8.7 try-with-resources 188
8.7.1 自动关闭资源 188
8.7.2 声明多个资源 189
8.7.3 catch多个异常 191
8.7.4 使用更具包容性的类型检查重新抛出异常 192
8.8 总结 193
8.9 实战练习 193
第9章 深入字符串 194
9.1 String类 194
9.2 ==运算符与equals方法 194
9.3 compareTo方法 197
9.4 字符串拼接 198
9.5 操作字符串 198
9.5.1 获取字符串的长度 199
9.5.2 查找字符或字符串 199
9.5.3 判断字符串的开始与结尾 200
9.5.4 获取指定索引位置的字符 200
9.5.5 截取子字符串 201
9.5.6 分割字符串 201
9.5.7 替换字符或字符串 202
9.5.8 合并字符串 203
9.5.9 重复字符串 203
9.5.10 大小写转换 203
9.5.11 去除字符串首尾空白 204
9.5.12 判断字符串是否为空 204
9.5.13 提取字符串的行流 205
9.5.14 与字节数组相互转换 205
9.6 StringBuffer类和StringBuilder类 206
9.7 格式化输出 207
9.7.1 格式说明符 208
9.7.2 参数索引 208
9.7.3 格式说明字符 208
9.7.4 宽度和精度 209
9.7.5 标志字符 210
9.7.6 生成格式化的String对象 211
9.8 正则表达式 211
9.8.1 正则表达式的优点 211
9.8.2 一切从模式开始 213
9.8.3 创建正则表达式 213
9.8.4 量词 216
9.8.5 String类的正则表达式方法 216
9.8.6 Pattern和Matcher 218
9.8.7 邮件地址验证 218
9.8.8 获取组匹配的内容 220
9.8.9 替换字符串 221
9.9 总结 221
9.10 实战练习 222
第10章 Java应用 223
10.1 再论引用类型 223
10.1.1 引用类型——数组 223
10.1.2 方法传参 225
10.2 操作数组 226
10.2.1 数组的复制 226
10.2.2 数组的排序 229
10.2.3 搜索数组中的元素 232
10.2.4 填充数组 233
10.3 基本数据类型与封装类 234
10.3.1 基本数据类型与封装类
对象的互相转换 235
10.3.2 封装类对象与字符串的互相转换 236
10.3.3 基本数据类型与字符串的互相转换 236
10.3.4 自动装箱与拆箱 236
10.4 对象的克隆 237
10.5 国际化与本地化 242
10.5.1 Locale 242
10.5.2 资源包 244
10.5.3 消息格式化 248
10.6 总结 249
10.7 实战练习 249
第11章 泛型 250
11.1 为什么需要泛型 250
11.2 泛型与基本数据类型 253
11.3 泛型类中的数组 254
11.4 元组 256
11.5 泛型接口 258
11.5.1 一个简单的泛型接口 258
11.5.2 匿名内部类实现泛型接口 259
11.5.3 map机制的实现 260
11.6 泛型方法 262
11.6.1 简单的泛型方法 262
11.6.2 完善映射机制的实现 263
11.7 通配符类型 264
11.7.1 通配符的子类型限定 266
11.7.2 通配符的超类型限定 267
11.8 类型参数的限定 269
11.9 深入泛型机制 270
11.10 泛型的一些问题 272
11.10.1 接口的二次实现 272
11.10.2 方法重载 273
11.10.3 泛型类型的实例化 273
11.10.4 异常 274
11.11 使用泛型的限制 275
11.12 类型参数的命名约定 275
11.13 总结 275
11.14 实战练习 276
第12章 Lambda表达式 277
12.1 理解Lambda表达式 277
12.2 Lambda表达式的语法 278
12.3 函数式接口 279
12.4 内置函数式接口 280
12.5 方法引用 281
12.6 构造方法引用 282
12.7 数组引用 284
12.8 总结 284
12.9 实战练习 284
第13章 集合类 285
13.1 集合框架中的接口与实现类 285
13.1.1 集合框架中的接口 286
13.1.2 集合框架中的实现类 286
13.1.3 Collection类型的集合 286
13.1.4 Map类型的集合 288
13.2 迭代 289
13.2.1 Iterator接口 289
13.2.2 迭代器与“for each”循环 291
13.2.3 新增的forEach方法 292
13.2.4 ListIterator接口 293
13.2.5 迭代与回调 295
13.3 数据结构简介 296
13.3.1 链表 296
13.3.2 栈 299
13.3.3 队列 299
13.4 List 299
13.4.1 ArrayList 300
13.4.2 LinkedList 303
13.4.3 List集合类的性能 306
13.5 Set 309
13.5.1 HashSet 309
13.5.2 TreeSet 314
13.5.3 LinkedHashSet 315
13.5.4 Set集合类的性能 316
13.6 Queue 317
13.6.1 Queue接口 317
13.6.2 PriorityQueue类 318
13.6.3 Deque接口 319
13.7 Collections类 320
13.7.1 排序集合中的元素 320
13.7.2 获取最大和最小元素 322
13.7.3 在集合中搜索 323
13.7.4 获取包装器集合 324
13.8 再探Comparator接口 325
13.9 深入Map类型 328
13.9.1 Map接口 328
13.9.2 Map的工作原理 329
13.9.3 HashMap 331
13.9.4 TreeMap 332
13.9.5 LinkedHashMap 333
13.9.6 Map性能测试 334
13.10 遗留的集合 336
13.10.1 Enumeration接口 336
13.10.2 Vector类 336
13.10.3 Stack类 337
13.10.4 Hashtable类 337
13.10.5 Properties类 337
13.10.6 BitSet类 339
13.11 集合工厂方法 340
13.11.1 of方法 340
13.11.2 copyOf方法 341
13.12 总结 342
13.13 实战练习 342
第14章 Stream 344
14.1 什么是Stream 344
14.2 创建流 345
14.3 并行流与串行流 348
14.4 有序流和无序流 348
14.5 中间操作 348
14.5.1 筛选和截断 349
14.5.2 映射 351
14.5.3 排序 352
14.5.4 peek 353
14.6 终端操作 354
14.6.1 遍历 354
14.6.2 查找与匹配 355
14.6.3 最大/最小与计数 356
14.6.4 收集统计信息 357
14.6.5 reduce 357
14.6.6 collect 361
14.7 并行流的性能 366
14.8 总结 368
14.9 实战练习 369
第15章 Class类与反射API 370
15.1 Class类 370
15.2 获取类型信息 372
15.2.1 获取方法和字段信息 372
15.2.2 获取基类和接口信息 374
15.2.3 获取枚举信息 375
15.2.4 获取泛型信息 376
15.2.5 获取注解信息 379
15.3 检测类型 379
15.4 使用Class和反射创建类的对象 380
15.5 使用反射调用对象的方法 383
15.6 使用反射修改对象的字段 384
15.7 依赖注入容器 385
15.8 动态代理 391
15.9 ClassLoader 395
15.9.1 类加载器的分类 396
15.9.2 类加载器的加载机制 397
15.9.3 自定义类加载器 398
15.10 适可而止 400
15.11 方法句柄 401
15.12 服务加载器 403
15.13 总结 407
15.14 实战练习 407
第16章 注解(Annotation) 408
16.1 预定义的注解 408
16.1.1 @Override 408
16.1.2 @Deprecated 409
16.1.3 @SuppressWarnings 410
16.1.4 @SafeVarargs 411
16.1.5 @FunctionalInterface 412
16.2 自定义注解 412
16.3 元注解 413
16.3.1 @Documented 414
16.3.2 @Retention 414
16.3.3 @Target 415
16.3.4 @Inherited 416
16.3.5 @Repeatable 416
16.4 注解与反射 417
16.5 编写注解处理器 421
16.5.1 依赖注入容器的注解实现 421
16.5.2 使用注解生成数据库表 423
16.6 总结 428
16.7 实战练习 428
第17章 多线程 429
17.1 基本概念 429
17.1.1 程序和进程 429
17.1.2 线程 429
17.2 Java对多线程的支持 430
17.3 Java线程 430
17.3.1 Thread类 431
17.3.2 创建任务 432
17.3.3 让步 433
17.3.4 休眠 434
17.3.5 优先级 436
17.3.6 加入一个线程 437
17.3.7 捕获线程的异常 438
17.3.8 后台线程 440
17.3.9 线程组 442
17.3.10 线程的状态 442
17.4 线程同步 443
17.4.1 错误地访问共享资源 444
17.4.2 同步语句块 445
17.4.3 同步方法 446
17.4.4 死锁 448
17.5 线程本地存储 450
17.5.1 使用ThreadLocal类 450
17.5.2 ThreadLocal的实现原理 452
17.6 生产者与消费者 453
17.7 线程的终止 458
17.7.1 取消一个任务 458
17.7.2 在阻塞中中止 459
17.7.3 注意清理 461
17.8 线程池 462
17.9 总结 474
17.10 实战练习 475
第18章 Java常用工具类 476
18.1 java.lang.Math类 476
18.2 随机数 479
18.2.1 Math.random方法 479
18.2.2 Random类 480
18.2.3 ThreadLocalRandom类 481
18.3 大数字运算 482
18.3.1 BigInteger 482
18.3.2 BigDecimal 486
18.4 日期时间工具 491
18.4.1 Date类 492
18.4.2 DateFormat类 493
18.4.3 SimpleDateFormat类 495
18.4.4 Calendar类 497
18.5 Java 8新增的日期/时间API 499
18.5.1 新的日期/时间类 500
18.5.2 构造日期/时间对象 500
18.5.3 格式化和解析日期/时间字符串 501
18.5.4 操作日历字段 502
18.5.5 计算时间间隔 503
18.5.6 使用Instant计算某项操作花费的时间 504
18.5.7 判断闰年 504
18.5.8 与Date和Calendar的相互转换 505
18.6 Optional类 506
18.6.1 创建Optional类的实例 506
18.6.2 判断Optional的值是否存在 506
18.6.3 获取Optional的值 507
18.6.4 过滤与映射 508
18.6.5 得到Stream对象 508
18.6.6 为什么要使用Optional 509
18.6.7 OptionalInt、OptionalLong和OptionalDouble 512
18.7 Base64编解码 512
18.8 Timer类 514
18.9 Runtime类与单例设计模式 516
18.10 总结 518
18.11 实战练习 518
第19章 Java I/O操作 519
19.1 File类 519
19.1.1 分隔符 519
19.1.2 创建文件夹 520
19.1.3 文件操作 520
19.1.4 搜索目录中的文件 521
19.1.5 移动文件 524
19.1.6 临时文件 525
19.2 流式I/O 526
19.3 输入/输出流 527
19.3.1 InputStream 527
19.3.2 OutputStream 528
19.3.3 字节数组输入/输出流 529
19.3.4 文件输入/输出流 530
19.3.5 过滤流 532
19.3.6 缓冲的输入/输出流 532
19.3.7 数据输入/输出流 534
19.3.8 管道流 535
19.3.9 复制文件 537
19.4 Java I/O库的设计原则 537
19.5 Reader和Writer 538
19.6 InputStreamReader和OutputStreamWriter 540
19.7 字符集与中文乱码问题 542
19.7.1 字符集 542
19.7.2 对乱码产生过程的分析 547
19.7.3 Charset类 549
19.8 RandomAccessFile类 551
19.9 标准I/O 552
19.9.1 从标准输入中读取数据 553
19.9.2 Scanner 553
19.9.3 I/O重定向 556
19.10 对象序列化 557
19.10.1 使用对象流实现序列化 558
19.10.2 对象引用的序列化 560
19.10.3 序列化过滤器 564
19.10.4 定制序列化 566
19.10.5 替换对象 568
19.10.6 使用Externalizable接口定制序列化 571
19.10.7 序列化版本 573
19.11 NIO 573
19.11.1 缓冲区(Buffer) 574
19.11.2 通道(Channel) 579
19.11.3 使用通道复制文件 581
19.11.4 视图缓冲区 583
19.11.5 字节顺序 585
19.11.6 直接和非直接缓冲区 586
19.11.7 分散和聚集 587
19.11.8 字符缓冲区的问题 590
19.11.9 内存映射文件 593
19.11.10 对文件加锁 598
19.11.11 管道 599
19.12 Files类与Path接口 601
19.12.1 Path接口 601
19.12.2 读写文件 603
19.12.3 遍历目录 606
19.12.4 小结 608
19.13 异步文件通道 608
19.13.1 写入数据 609
19.13.2 读取数据 611
19.14 总结 613
19.15 实战练习 613
第20章 Java并发编程 615
20.1 Callable和Future接口 615
20.2 新的任务执行框架 617
20.2.1 Executor接口 617
20.2.2 ExecutorService接口 617
20.2.3 Executors工具类 618
20.2.4 ThreadFactory 620
20.2.5 ScheduledExecutorService 621
20.2.6 批量执行任务 623
20.2.7 CompletionService接口 625
20.2.8 ThreadPoolExecutor类 628
20.3 锁对象 631
20.3.1 Lock接口 631
20.3.2 重入互斥锁 632
20.3.3 读写锁 633
20.3.4 StampedLock 635
20.4 条件对象 639
20.5 同步工具类 642
20.5.1 CountDownLatch 642
20.5.2 CyclicBarrier 644
20.5.3 Semaphore 646
20.5.4 Exchanger 650
20.6 线程安全的集合 652
20.6.1 写时拷贝 653
20.6.2 阻塞队列 654
20.6.3 延迟队列 657
20.6.4 传输队列 660
20.6.5 ConcurrentHashMap 660
20.6.6 ConcurrentSkipListMap 662
20.7 Fork/Join框架 663
20.8 CompletableFuture 666
20.8.1 异步执行任务 666
20.8.2 构造异步任务链 667
20.8.3 结果转换 668
20.8.4 组合异步任务 669
20.8.5 任务链完成时的结果处理和异常处理 670
20.9 原子操作 675
20.9.1 AtomicInteger类 676
20.9.2 LongAdder 679
20.10 变量句柄 680
20.11 总结 683
20.12 实战练习 683
第21章 Eclipse开发工具 684
21.1 Eclipse简介 684
21.2 下载并安装 684
21.3 Eclipse开发环境介绍 686
21.4 配置Eclipse 690
21.4.1 配置JDK 690
21.4.2 配置字体 691
21.4.3 配置和使用快捷键 692
21.4.4 配置字符集 693
21.5 开发Java程序 693
21.6 调试代码 696
21.7 JUnit单元测试 698
21.8 导入现有的Eclipse项目 702
21.9 总结 703
21.10 实战练习 703
第22章 图形界面编程 704
22.1 AWT 704
22.1.1 第一个AWT应用程序 705
22.1.2 关闭窗口 706
22.1.3 向窗口内添加组件 708
22.2 布局管理器 709
22.2.1 BorderLayout 709
22.2.2 FlowLayout 711
22.2.3 GridLayout 713
22.2.4 CardLayout 714
22.2.5 GridBagLayout 714
22.2.6 组合多个布局管理器 716
22.3 事件模型 718
22.3.1 按钮点击事件的处理 719
22.3.2 事件监听器 720
22.3.3 观察者模式 721
22.4 Swing 724
22.4.1 基本的框架窗口 724
22.4.2 添加文本域和菜单栏 725
22.4.3 菜单功能 727
22.4.4 弹出菜单 730
22.5 Swing与并发 731
22.6 使用WindowBuilder快速开发图形界面程序 733
22.6.1 安装WindowBuilder 734
22.6.2 用户登录界面 735
22.6.3 注册事件监听器 739
22.7 总结 741
22.8 实战练习 741
第23章 Java网络编程 742
23.1 网络基础知识 742
23.1.1 计算机网络 742
23.1.2 IP地址 743
23.1.3 协议 743
23.1.4 网络的状况 743
23.1.5 网络异质性问题的解决 744
23.1.6 ISO/OSI七层参考模型 744
23.1.7 数据封装 746
23.1.8 TCP/IP模型 747
23.1.9 端口 747
23.1.10 套接字(Socket) 748
23.1.11 客户机/服务器模式 748
23.2 基于TCP的套接字编程 748
23.2.1 服务器程序 749
23.2.2 客户端程序 751
23.2.3 多线程的服务器程序 752
23.2.4 套接字超时 753
23.3 基于UDP的套接字编程 754
23.3.1 接收端 755
23.3.2 发送端 756
23.3.3 获取发送端的信息 757
23.4 非阻塞的套接字编程 757
23.4.1 SocketChannel 757
23.4.2 ServerSocketChannel 758
23.4.3 Selector 758
23.4.4 非阻塞的服务器程序 760
23.4.5 非阻塞的客户端程序 763
23.5 URL和URLConnection 764
23.5.1 URL类 764
23.5.2 URLConnection类 765
23.5.3 一个实用的下载程序 765
23.6 HTTP Client API 768
23.6.1 HttpClient 769
23.6.2 HttpRequest 770
23.6.3 HttpResponse 772
23.6.4 异步发送多个请求 773
23.6.5 启用HttpClient的日志记录功能 774
23.7 总结 775
23.8 实战练习 775
第24章 数据库访问 776
24.1 JDBC驱动程序的类型 776
24.1.1 JDBC-ODBC桥 777
24.1.2 部分本地API的Java驱动程序 777
24.1.3 JDBC网络纯Java驱动程序 778
24.1.4 本地协议的纯Java驱动程序 778
24.2 安装数据库 778
24.3 下载MySQL JDBC驱动 782
24.4 JDBC API 783
24.5 加载并注册数据库驱动 783
24.5.1 Driver接口 783
24.5.2 加载与注册JDBC驱动 784
24.5.3 服务加载 786
24.6 建立到数据库的连接 788
24.7 访问数据库 789
24.7.1 Statement 789
24.7.2 ResultSet 792
24.7.3 PreparedStatement 796
24.7.4 CallableStatement 798
24.7.5 元数据 799
24.8 事务处理 802
24.9 可滚动和可更新的结果集 806
24.9.1 可滚动的结果集 806
24.9.2 可更新的结果集 807
24.10 行集 808
24.10.1 行集的标准实现 808
24.10.2 行集的事件模型 809
24.10.3 CachedRowSet 810
24.11 JDBC数据源和连接池 811
24.12 总结 812
24.13 实战练习 813
第25章 Java平台模块系统 814
25.1 Java平台的模块 814
25.2 模块的物理结构 816
25.3 创建模块 817
25.4 模块依赖 818
25.5 导出包 819
25.6 可传递的模块与静态依赖 821
25.7 开放包 821
25.8 限定导出和开放 824
25.9 服务加载 824
25.10 未命名模块 825
25.11 自动模块 826
25.12 为什么要引入模块系统 827
25.13 总结 828
25.14 实战练习 828

读者评论