目录
前言 .1
第1 章 一种现代语言 9
1.1 进入Java 世界 .10
1.1.1 Java 起源 10
1.1.2 成长 .12
1.2 虚拟机 13
1.3 Java 与其他语言的比较 15
1.4 设计安全 .19
1.4.1 简化、简化、再简化19
1.4.2 类型安全和方法绑定20
1.4.3 增量式开发 .21
1.4.4 动态内存管理 .22
1.4.5 错误处理 23
1.4.6 线程 .23
1.4.7 可伸缩性 24
1.5 实现安全 .24
1.5.1 校验器 26
1.5.2 类加载器 27
1.5.3 安全管理器 .28
1.6 应用和用户级安全 .28
1.7 Java 路线图 29
1.7.1 过去:Java 1.0—Java 11 29
1.7.2 现在:Java 14 32
1.7.3 将来 .33
1.7.4 可用性 34
第2 章 第一个应用 .35
2.1 Java 工具和环境 35
2.1.1 安装JDK 36
2.1.2 在Linux 上安装OpenJDK 37
2.1.3 在macOS 上安装OpenJDK 38
2.1.4 在Windows 上安装OpenJDK 39
2.1.5 配置IntelliJ IDEA 并创建一个项目 43
2.1.6 运行项目 46
2.1.7 获得本书示例 .47
2.2 HelloJava .48
2.2.1 类 .51
2.2.2 main() 方法 .52
2.2.3 类和对象 54
2.2.4 变量和类类型 .54
2.2.5 HelloComponent 55
2.2.6 继承 .56
2.2.7 JComponent 类 57
2.2.8 关系和指向 .58
2.2.9 包和导入 59
2.2.10 paintComponent() 方法 61
2.3 HelloJava2: 续集 .62
2.3.1 实例变量 63
2.3.2 构造器 64
2.3.3 事件 .66
2.3.4 repaint() 方法 .69
2.3.5 接口 .69
2.4 既是结束,又是开始 71
第3 章 专业工具 72
3.1 JDK 环境 .72
3.2 JVM 73
3.3 运行Java 应用 .73
系统属性 75
3.4 类路径 76
3.4.1 javap 77
3.4.2 模块 .78
3.5 Java 编译器 78
3.6 尝试Java .80
3.7 JAR 文件 .86
3.7.1 文件压缩 86
3.7.2 jar 工具 87
3.7.3 pack200 工具 90
3.8 再接再厉 .91
第4 章 Java 语言 92
4.1 文本编码 .93
4.2 注释 95
Javadoc 注释 96
4.3 变量和常量 98
4.4 类型 99
4.4.1 基本类型 100
4.4.2 引用类型 105
4.4.3 推导类型 106
4.4.4 传递引用 107
4.4.5 谈谈字符串 108
4.5 语句和表达式 .109
4.5.1 语句 109
4.5.2 表达式 .118
4.6 数组 .124
4.6.1 数组类型 125
4.6.2 数组创建和初始化 126
4.6.3 使用数组 128
4.6.4 匿名数组 130
4.6.5 多维数组 130
4.7 类型、类和数组 132
第5 章 Java 中的对象. 134
5.1 类 .135
5.1.1 声明和实例化类 .136
5.1.2 访问字段和方法 .138
5.1.3 静态成员 143
5.2 方法 .146
5.2.1 局部变量 147
.2.2 遮蔽 147
5.2.3 静态方法 149
5.2.4 初始化局部变量 .151
5.2.5 参数传递和引用 .152
5.2.6 基本类型的包装器 154
5.2.7 方法重载 156
5.3 对象创建 157
5.3.1 构造器 .158
5.3.2 使用重载构造器 .159
5.4 对象析构 161
垃圾回收 161
5.5 包 .162
5.5.1 导入类 .163
5.5.2 自定义包 165
5.5.3 成员可见性和访问 166
5.5.4 用包编译 168
5.6 高级类设计 .169
5.6.1 派生子类和继承 .169
5.6.2 接口 174
5.6.3 内部类 .177
5.6.4 匿名内部类 179
5.7 组织内容和为失败做规划 180
第6 章 错误处理和日志 . 183
6.1 异常 .184
6.1.1 异常和错误类 184
6.1.2 异常处理 186
6.1.3 冒泡 190
6.1.4 栈轨迹 .191
6.1.5 受查和非受查异常 192
6.1.6 抛出异常 193
6.1.7 try 蔓延 196
6.1.8 finally 子句 197
6.1.9 带资源的try 语句 199
6.1.10 性能问题 .200
6.2 断言 .201
6.2.1 启用和禁用断言 .202
6.2.2 使用断言 202
6.3 日志API204
6.3.1 日志API 概述 .204
6.3.2 日志级别 206
6.3.3 一个简单的例子 .207
6.3.4 日志设置属性 208
6.3.5 日志记录器 210
6.3.6 性能 210
6.4 真实世界的异常 211
第7 章 集合和泛型 212
7.1 集合 .212
7.1.1 Collection 接口 213
7.1.2 集合类型 214
7.1.3 Map 接口 216
7.2 类型限制 218
7.2.1 容器 219
7.2.2 容器能固定吗? .220
7.3 引入泛型 221
谈谈类型 224
7.4 “没有勺子” .225
7.4.1 擦除 225
7.4.2 原始类型 227
7.5 参数化类型关系 228
为什么是List 而不是List? 230
7.6 类型强制转换 .231
7.6.1 集合与数组间的转换232
7.6.2 迭代器 .233
7.7 深入分析:sort() 方法 234
7.8 应用:农场的树 235
7.9 结论 .237
第8 章 文本和核心工具 . 238
8.1 String 238
8.1.1 构造字符串 239
8.1.2 转换为字符串 240
8.1.3 比较字符串 241
8.1.4 查找 243
8.1.5 字符串方法小结 .243
8.2 解析字符串 .245
8.2.1 解析基本类型 245
8.2.2 分解文本 246
8.3 正则表达式 .248
8.3.1 正则表达式记法 .249
8.3.2 java.util.regex API .255
8.4 数学工具 260
8.4.1 java.lang.Math 类 261
8.4.2 大数/ 精确数264
8.5 日期和时间 .265
8.5.1 本地日期和时间 .266
8.5.2 比较和处理日期和时间 267
8.5.3 时区 268
8.5.4 解析和格式化日期和时间 .269
8.5.5 解析错误 271
8.5.6 时间戳 .272
8.6 其他有用的工具 273
第9 章 线程 274
9.1 线程介绍 275
9.1.1 Thread 类和Runnable 接口 275
9.1.2 控制线程 279
9.1.3 线程之死 285
9.2 同步 .286
9.2.1 串行化方法访问 .287
9.2.2 从多个线程访问类和实例变量 292
9.3 调度和优先级 .293
9.3.1 线程状态 295
9.3.2 时间片 .295
9.3.3 优先级 .297
9.3.4 交出控制 297
9.4 线程性能 298
9.4.1 同步的开销 298
9.4.2 线程资源消耗 299
9.5 并发工具 300
第10 章 桌面应用 . 302
10.1 按钮、滑动条和文本域 303
10.1.1 组件层次体系 303
10.1.2 模型视图控制器架构 .304
10.1.3 标签和按钮.305
10.1.4 文本组件 .312
10.1.5 其他组件 .321
10.2 容器和布局 325
10.2.1 Frame 和Window 325
10.2.2 JPanel 327
10.2.3 布局管理器.328
10.3 事件 337
10.3.1 鼠标事件 .338
10.3.2 动作事件 .341
10.3.3 更改事件 .344
10.3.4 其他事件 .345
10.4 模式和弹出 346
10.4.1 消息对话框.347
10.4.2 确认对话框.350
10.4.3 输入对话框.351
10.5 线程问题 352
10.5.1 SwingUtilities 和组件更新 .353
10.5.2 计时器 356
10.6 下一步 .358
10.6.1 菜单 359
10.6.2 首选项 361
10.6.3 自定义组件和Java 2D .361
10.6.4 JavaFX361
10.7 用户界面和用户体验 362
第11 章 网络和I/O 363
11.1 流363
11.1.1 基本I/O 365
11.1.2 字符流 368
11.1.3 流包装器 .369
11.1.4 java.io.File 类 373
11.1.5 文件流 379
11.1.6 RandomAccessFile 381
11.2 NIO File API.382
11.2.1 FileSystem 和Path 383
11.2.2 NIO 文件操作 385
11.3 NIO 包 .388
11.3.1 异步I/O 389
11.3.2 性能 389
11.3.3 映射和锁定文件 390
11.3.4 通道 390
11.3.5 缓冲区 391
11.3.6 字符编码器和解码器 .395
11.3.7 FileChannel.397
11.4 网络编程 400
11.5 Socket 402
11.5.1 客户和服务器 403
11.5.2 DateAtHost 客户 407
11.5.3 一个分布式游戏 409
11.6 更多探索 420
第12 章 Web 编程 421
12.1 统一资源定位符 .421
12.2 URL 类 422
12.2.1 流数据 423
12.2.2 作为对象获得内容 .424
12.2.3 管理连接 .426
12.2.4 处理器的实际使用 .426
12.2.5 有用的处理器框架 .427
12.3 与Web 应用会话 427
12.3.1 使用GET 方法 .428
12.3.2 使用POST 方法 429
12.3.3 HttpURLConnection 433
12.3.4 SSL 和安全Web 通信 433
12.4 Java Web 应用 .434
12.4.1 Servlet 生命周期 .435
12.4.2 Servlet 436
12.4.3 HelloClient Servlet .437
12.4.4 Servlet 响应 439
12.4.5 Servlet 参数 440
12.4.6 ShowParameters Servlet442
12.4.7 用户会话管理 444
12.4.8 ShowSession Servlet 445
12.5 Servlet 容器 447
12.5.1 用web.xml 和注解进行配置 .449
12.5.2 URL 模式映射 451
12.5.3 部署HelloClient 452
12.6 庞大的万维网 453
第13 章 扩展Java 454
13.1 Java 版本 454
JCP 和JSR 455
13.2 Lambda 表达式 455
改造你的代码 .456
13.3 扩展Java 核心特性 462
13.4 结束语和前景展望 463
附录A 代码示例和IntelliJ IDEA . 465
A.1 获取主要代码示例 .465
A.2 安装IntelliJ IDEA 467
A.2.1 在Linux 上安装 467
A.2.2 在macOS 上安装 .468
A.2.3 在Windows 上安装 .469
A.3 导入示例 .470
A.4 运行示例 .476
A.5 获取Web 代码示例 478
A.6 处理Servlet 479
附录B 术语表 483