深入理解Java 7 —核心技术与最佳实践
作者:成富 著
出版时间:2012
内容简介
本书是学习Java7新功能和新特性以及深入理解Java核心技术的最佳选择之一。经过近6年的等待,Java迎来了它的又一个历史性的版本—Java7。Java 7在提高开发人员的生产效率、平台性能和模块方向上又迈进了一步,变得更加强大和灵活。本书不仅对Java7的所有重要更新进行了全面的解读,而且还对Java平台的核心技术的底层实现进行了深入探讨,包含大量最佳实践。全书的主要内容可分为三大部分:第一部分是1~6章,全面阐释Java7在语法、JVM、类库和API等方面的所有重要新功能和新特性,掌握这部分内容有助于大幅度提升编码效率和提高代码质量;第二部分是7~13章,对JVM、Java源代码和字节代码操作、类加载器、对象生命周期、多线程、并发编程、泛型、安全等Java平台的核心技术进行了深入解析,掌握这部分内容有助于深入理解Java的底层原理;第三部分为第14章,是对Java8的展望,简要介绍了Java 8中将要增加的新特性。
目录
前 言
Java的挑战与展望
第1章 Java 7语法新特性 / 1
1.1 Coin项目介绍 / 1
1.2 在switch语句中使用字符串 / 2
1.2.1 基本用法 / 2
1.2.2 实现原理 / 3
1.2.3 枚举类型 / 5
1.3 数值字面量的改进 / 5
1.3.1 二进制整数字面量 / 6
1.3.2 在数值字面量中使用下划线 / 6
1.4 优化的异常处理 / 7
1.4.1 异常的基础知识 / 7
1.4.2 创建自己的异常 / 8
1.4.3 处理异常 / 12
1.4.4 Java 7的异常处理新特性 / 14
1.5 try-with-resources语句 / 17
1.6 优化变长参数的方法调用 / 19
1.7 小结 / 21
第2章 Java语言的动态性 / 22
2.1 脚本语言支持API / 22
2.1.1 脚本引擎 / 23
2.1.2 语言绑定 / 24
2.1.3 脚本执行上下文 / 25
2.1.4 脚本的编译 / 27
2.1.5 方法调用 / 28
2.1.6 使用案例 / 29
2.2 反射API / 31
2.2.1 获取构造方法 / 32
2.2.2 获取域 / 34
2.2.3 获取方法 / 34
2.2.4 操作数组 / 35
2.2.5 访问权限与异常处理 / 36
2.3 动态代理 / 36
2.3.1 基本使用方式 / 36
2.3.2 使用案例 / 40
2.4 动态语言支持 / 42
2.4.1 Java语言与Java虚拟机 / 43
2.4.2 方法句柄 / 44
2.4.3 invokedynamic指令 / 66
2.5 小结 / 73
第3章 Java I/O / 75
3.1 流 / 75
3.1.1 基本输入流 / 76
3.1.2 基本输出流 / 77
3.1.3 输入流的复用 / 78
3.1.4 过滤输入输出流 / 80
3.1.5 其他输入输出流 / 81
3.1.6 字符流 / 81
3.2 缓冲区 / 82
3.2.1 基本用法 / 83
3.2.2 字节缓冲区 / 84
3.2.3 缓冲区视图 / 86
3.3 通道 / 87
3.3.1 文件通道 / 88
3.3.2 套接字通道 / 93
3.4 NIO.2 / 98
3.4.1 文件系统访问 / 98
3.4.2 zip/jar文件系统 / 106
3.4.3 异步I/O通道 / 108
3.4.4 套接字通道绑定与配置 / 111
3.4.5 IP组播通道 / 111
3.5 使用案例 / 113
3.6 小结 / 115
第4章 国际化与本地化 / 117
4.1 国际化概述 / 117
4.2 Unicode / 118
4.2.1 Unicode编码格式 / 119
4.2.2 其他字符集 / 124
4.2.3 Java与Unicode / 124
4.3 Java中的编码实践 / 125
4.3.1 Java NIO中的编码器和解码器 / 126
4.3.2 乱码问题详解 / 130
4.4 区域设置 / 133
4.4.1 IETF BCP 47 / 134
4.4.2 资源包 / 135
4.4.3 日期和时间 / 143
4.4.4 数字和货币 / 144
4.4.5 消息文本 / 146
4.4.6 默认区域设置的类别 / 148
4.4.7 字符串比较 / 148
4.5 国际化与本地化基本实践 / 149
4.6 小结 / 152
第5章 图形用户界面 / 153
5.1 Java图形用户界面概述 / 153
5.2 AWT / 156
5.2.1 重要组件类 / 156
5.2.2 任意形状的窗口 / 157
5.2.3 半透明窗口 / 158
5.2.4 组件混合 / 159
5.3 Swing / 159
5.3.1 重要组件类 / 159
5.3.2 JLayer组件和LayerUI类 / 161
5.4 事件处理与线程安全性 / 163
5.4.1 事件处理 / 163
5.4.2 事件分发线程 / 165
5.4.3 SwingWorker类 / 167
5.4.4 SecondaryLoop接口 / 169
5.5 界面绘制 / 170
5.5.1 AWT中的界面绘制 / 170
5.5.2 Swing中的绘制 / 171
5.6 可插拔式外观样式 / 172
5.7 JavaFX / 175
5.7.1 场景图 / 175
5.7.2 变换 / 177
5.7.3 动画效果 / 177
5.7.4 FXML / 179
5.7.5 CSS外观描述 / 181
5.7.6 Web引擎与网页显示 / 182
5.8 使用案例 / 183
5.9 小结 / 185
第6章 Java 7其他重要更新 / 186
6.1 关系数据库访问 / 186
6.1.1 使用try-with-resources语句 / 186
6.1.2 数据库查询的默认模式 / 187
6.1.3 数据库连接超时时间与终止 / 188
6.1.4 语句自动关闭 / 189
6.1.5 RowSet实现提供者 / 190
6.2 java.lang包的更新 / 191
6.2.1 基本类型的包装类 / 191
6.2.2 进程使用 / 192
6.2.3 Thread类的更新 / 194
6.3 Java实用工具类 / 195
6.3.1 对象操作 / 195
6.3.2 正则表达式 / 197
6.3.3 压缩文件处理 / 200
6.4 JavaBeans组件 / 201
6.4.1 获取组件信息 / 201
6.4.2 执行语句和表达式 / 202
6.4.3 持久化 / 202
6.5 小结 / 203
第7章 Java虚拟机 / 205
7.1 虚拟机基本概念 / 205
7.2 内存管理 / 206
7.3 引用类型 / 208
7.3.1 强引用 / 209
7.3.2 引用类型基本概念 / 211
7.3.3 软引用 / 213
7.3.4 弱引用 / 215
7.3.5 幽灵引用 / 217
7.3.6 引用队列 / 220
7.4 Java本地接口 / 221
7.4.1 JNI基本用法 / 221
7.4.2 Java程序中集成C/C++代码 / 225
7.4.3 在C/C++程序中启动Java虚拟机 / 227
7.5 HotSpot虚拟机 / 228
7.5.1 字节代码执行 / 229
7.5.2 垃圾回收 / 229
7.5.3 启动参数 / 235
7.5.4 分析工具 / 236
7.5.5 Java虚拟机工具接口 / 241
7.6 小结 / 244
第8章 Java源代码和字节代码操作 / 245
8.1 Java字节代码格式 / 245
8.1.1 基本格式 / 246
8.1.2 常量池的结构 / 248
8.1.3 属性 / 249
8.2 动态编译Java源代码 / 249
8.2.1 使用javac工具 / 250
8.2.2 Java编译器API / 251
8.2.3 使用Eclipse JDT编译器 / 254
8.3 字节代码增强 / 257
8.3.1 使用ASM / 258
8.3.2 增强代理 / 267
8.4 注解 / 271
8.4.1 注解类型 / 271
8.4.2 创建注解类型 / 273
8.4.3 使用注解类型 / 274
8.4.4 处理注解 / 275
8.5 使用案例 / 284
8.6 小结 / 286
第9章 Java类加载器 / 287
9.1 类加载器概述 / 287
9.2 类加载器的层次结构与代理模式 / 288
9.3 创建类加载器 / 290
9.4 类加载器的隔离作用 / 294
9.5 线程上下文类加载器 / 296
9.6 Class.forName方法 / 298
9.7 加载资源 / 299
9.8 Web应用中的类加载器 / 301
9.9 OSGi中的类加载器 / 303
9.9.1 OSGi基本的类加载器机制 / 303
9.9.2 Equinox框架的类加载实现机制 / 303
9.9.3 Equinox框架嵌入到Web容器中 / 306
9.10 小结 / 308
第10章 对象生命周期 / 309
10.1 Java类的链接 / 309
10.2 Java类的初始化 / 311
10.3 对象的创建与初始化 / 312
10.4 对象终止 / 314
10.5 对象复制 / 318
10.6 对象序列化 / 322
10.6.1 默认的对象序列化 / 324
10.6.2 自定义对象序列化 / 326
10.6.3 对象替换 / 329
10.6.4 版本更新 / 330
10.6.5 安全性 / 331
10.6.6 使用Externalizable接口 / 332
10.7 小结 / 334
第11章 多线程与并发编程实践 / 335
11.1 多线程 / 335
11.1.1 可见性 / 336
11.1.2 Java内存模型 / 339
11.1.3 volatile关键词 / 340
11.1.4 final关键词 / 341
11.1.5 原子操作 / 342
11.2 基本线程同步方式 / 343
11.2.1 synchronized关键词 / 343
11.2.2 Object类的wait、notify和notifyAll方法 / 344
11.3 使用Thread类 / 346
11.3.1 线程状态 / 346
11.3.2 线程中断 / 347
11.3.3 线程等待、睡眠和让步 / 348
11.4 非阻塞方式 / 349
11.5 高级实用工具 / 352
11.5.1 高级同步机制 / 352
11.5.2 底层同步器 / 355
11.5.3 高级同步对象 / 357
11.5.4 数据结构 / 363
11.5.5 任务执行 / 365
11.6 Java SE 7新特性 / 368
11.6.1 轻量级任务执行框架fork/join / 368
11.6.2 多阶段线程同步工具 / 370
11.7 ThreadLocal类 / 373
11.8 小结 / 374
第12章 Java泛型 / 375
12.1 泛型基本概念 / 375
12.2 类型擦除 / 378
12.3 上界和下界 / 382
12.4 通配符 / 384
12.5 泛型与数组 / 385
12.6 类型系统 / 388
12.7 覆写与重载 / 391
12.7.1 覆写对方法类型签名的要求 / 391
12.7.2 覆写对返回值类型的要求 / 395
12.7.3 覆写对异常声明的要求 / 396
12.7.4 重载 / 396
12.8 类型推断和<>操作符 / 397
12.9 泛型与反射API / 400
12.10 使用案例 / 402
12.11 小结 / 403
第13章 Java安全 / 405
13.1 Java安全概述 / 405
13.2 用户认证 / 406
13.2.1 主体、身份标识与凭证 / 406
13.2.2 登录 / 407
13.3 权限控制 / 415
13.3.1 权限、策略与保护域 / 416
13.3.2 访问控制权限 / 418
13.3.3 特权动作 / 420
13.3.4 访问控制上下文 / 421
13.3.5 守卫对象 / 423
13.4 加密与解密、报文摘要和数字签名 / 424
13.4.1 Java密码框架 / 424
13.4.2 加密与解密 / 425
13.4.3 报文摘要 / 427
13.4.4 数字签名 / 428
13.5 安全套接字连接 / 430
13.5.1 SSL协议 / 431
13.5.2 HTTPS / 432
13.6 使用案例 / 434
13.7 小结 / 437
第14章 超越Java 7 / 438
14.1 lambda表达式 / 438
14.1.1 函数式接口 / 439
14.1.2 lambda表达式的语法 / 440
14.1.3 目标类型 / 440
14.1.4 词法作用域 / 441
14.1.5 方法引用 / 442
14.1.6 接口的默认方法 / 443
14.2 Java平台模块化 / 444
14.3 Java SE 8的其他更新 / 445
14.4 小结 / 445
附录A OpenJDK / 446
附录B Java简史 / 448