第 1 章 异常处理 1
1.1 概述 2
1.2 普通 try 表达式 4
1.2.1 普通 try 表达式的基本用法 5
1.2.2 普通 try 表达式中的 catch 块 7
1.2.3 普通 try 表达式中的 finally 块 9
1.3 try-with-resources 表达式 14
1.3.1 try-with-resources 表达式的基本用法 14
1.3.2 自动关闭资源的过程 15
1.3.3 自动关闭资源的顺序 17
1.4 小结 21
第 2 章 输入与输出 23
2.1 概述 24
2.2 目录与文件操作 24
2.2.1 Path 类型 24
2.2.2 Directory 类 28
2.2.3 File 类 36
2.2.4 FileInfo 类型 41
2.2.5 目录与文件操作示例 42
2.3 基本输入流与输出流 46
2.3.1 InputStream 与 OutputStream 47
2.3.2 文件读写 47
2.3.3 控制台读写 57
2.3.4 ByteArrayStream 61
2.4 其他流 70
2.4.1 BufferedInputStream 与 BufferedOutputStream 70
2.4.2 StringReader 与 StringWriter 79
2.4.3 ChainedInputStream 与 MultiOutputStream 85
2.4.4 压缩与解压 88
2.5 小结 99
第 3 章 元编程 101
3.1 概述 102
3.2 一个简单的示例 102
3.2.1 宏定义 105
3.2.2 宏调用和宏展开 106
3.3 Token、Tokens 类型及 quote 表达式 107
3.3.1 Token 类型 107
3.3.2 Tokens 类型 109
3.3.3 quote 表达式 112
3.4 AST 节点 115
3.4.1 Tokens 与 AST 节点类型的互相转换 117
3.4.2 AST 节点操作 118
3.4.3 遍历 AST 节点 138
3.5 非属性宏和属性宏 140
3.5.1 非属性宏 141
3.5.2 属性宏 145
3.6 嵌套宏 148
3.6.1 宏定义中的宏调用 149
3.6.2 宏调用中的宏调用 154
3.7 内置宏 161
3.8 宏的应用示例 163
3.8.1 实现记忆化 163
3.8.2 面向切面编程 169
3.8.3 自动代码生成 174
3.8.4 自动文档生成 177
3.9 小结 181
第 4 章 多线程 183
4.1 概述 184
4.2 线程管理 186
4.2.1 线程的创建 187
4.2.2 线程的生命周期 188
4.2.3 Future 类型 191
4.2.4 访问线程的属性 194
4.3 线程安全 197
4.3.1 原子操作 199
4.3.2 可重入互斥锁 210
4.3.3 可重入读写锁 228
4.3.4 使用 ThreadLocal 确保线程安全 237
4.4 线程通信 243
4.4.1 Monitor 244
4.4.2 MultiConditionMonitor 256
4.5 多线程协调 263
4.5.1 Barrier 263
4.5.2 SyncCounter 268
4.5.3 Semaphore 271
4.6 小结 283
第 5 章 Socket 网络编程 285
5.1 概述 286
5.2 网络通信的三要素 286
5.2.1 IP 地址 287
5.2.2 端口 289
5.2.3 网络通信协议 290
5.3 基于 UDP 的网络编程 292
5.3.1 UdpSocket 的基本用法 294
5.3.2 UdpSocket 的应用示例 303
5.4 基于 TCP 的网络编程 306
5.4.1 TcpSocket 和 TcpServerSocket 的基本用法 308
5.4.2 TcpSocket 和 TcpServerSocket 的应用示例 314
5.5 小结 319