第1章 Java语言概述 1
1.1 开发Java的原因 1
1.2 Java语言的特点 1
1.3 Hello World 2
1.4 执行Java程序 3
1.5 Java开发环境 5
1.6 Java与Android 9
1.7 本章小结 9
1.8 本章习题 10
第2章 Java编程基础 11
2.1 标识符 11
2.2 变量 12
2.3 基本数据类型 12
2.3.1 布尔型 12
2.3.2 整数型 13
2.3.3 浮点型 14
2.3.4 字符型 14
2.3.5 基本数据类型的转换 15
2.3.6 常量 16
2.4 运算符和表达式 16
2.4.1 算术运算符 17
2.4.2 关系运算符 18
2.4.3 逻辑运算符 19
2.4.4 赋值运算符 20
2.4.5 位运算符 20
2.4.6 表达式 23
2.4.7 运算符优先级 23
2.5 语句 24
2.5.1 if语句 25
2.5.2 switch语句 25
2.5.3 for语句 26
2.5.4 while和do-while语句 27
2.5.5 break和continue语句 27
2.5.6 return语句 29
2.6 程序设计风格 29
2.7 程序错误与调试 30
2.8 本章小结 31
2.9 本章习题 31
第3章 封装与类 32
3.1 类 33
3.1.1 成员变量和局部变量 33
3.1.2 成员修饰符 34
3.2 方法重载 35
3.3 对象 37
3.3.1 构造方法 38
3.3.2 创建对象 39
3.3.3 使用对象 41
3.3.4 对象参数传值 42
3.3.5 垃圾回收机制 43
3.4 实例变量和类变量 44
3.5 类的发现与设计 46
3.5.1 分类 46
3.5.2 抽象 47
3.5.3 封装 48
3.5.4 CRC卡 49
3.6 对象的交互 50
3.6.1 对象协作 50
3.6.2 不可变对象 51
3.7 UML类图及关系 52
3.7.1 类图 53
3.7.2 依赖 53
3.7.3 聚合 54
3.7.4 组合 55
3.8 日志分析系统设计与测试 55
3.9 本章小结 58
3.10 本章习题 58
第4章 数组和字符串 61
4.1 为什么需要数组 61
4.2 数组的基本用法 61
4.2.1 数组的创建和初始化 62
4.2.2 数组操作 62
4.2.3 for-each循环 63
4.2.4 数组复制 64
4.2.5 传递数组 65
4.2.6 可变长参数列表 66
4.2.7 二维数组 66
4.2.8 二维数组的应用 67
4.3 数组的应用 69
4.3.1 二分查找 69
4.3.2 Arrays类 70
4.3.3 对象数组 71
4.4 String 72
4.4.1 构造字符串 72
4.4.2 不可变字符串 73
4.4.3 字符串长度 74
4.4.4 字符串比较 74
4.4.5 equals()方法 75
4.4.6 子串查找 75
4.4.7 截取子串 76
4.4.8 分割字符串 77
4.4.9 int转换为String 78
4.4.10 自动装箱/拆箱(Autoboxing/Unboxing) 78
4.4.11 增强的switch语句 79
4.5 StringBuffer 80
4.5.1 StringBuffer的初始化 81
4.5.2 StringBuffer的常用方法 81
4.5.3 回文数的判断 83
4.6 正则表达式 84
4.6.1 匹配量词 85
4.6.2 split()方法 86
4.6.3 字符串替换 87
4.7 Scanner类 88
4.8 本章小结 89
4.9 本章习题 89
第5章 继承和接口 92
5.1 包 92
5.1.1 package语句 92
5.1.2 import语句 93
5.1.3 jar命令 94
5.2 继承 95
5.2.1 创建子类 95
5.2.2 子类能做的事 96
5.2.3 构造方法与子类的内存结构 98
5.2.4 Java中的修饰符 100
5.3 多态 102
5.3.1 向上转型 102
5.3.2 方法重写 103
5.3.3 多态的实现 103
5.3.4 equals()方法 106
5.3.5 实现多态的注意事项 106
5.4 抽象类 106
5.4.1 抽象类的实例化 107
5.4.2 final的作用 108
5.5 继承与组合 109
5.6 接口 112
5.6.1 接口定义 113
5.6.2 接口实现 113
5.6.3 接口的特性 115
5.7 接口和抽象类的区别 116
5.8 内部类 118
5.8.1 静态内部类 119
5.8.2 成员内部类 120
5.8.3 局部内部类 120
5.8.4 匿名内部类 121
5.9 面向对象的设计原则 123
5.9.1 最小化访问权限 125
5.9.2 以类代替基本数据类型 126
5.9.3 单一职责 126
5.9.4 不要重复造轮子 127
5.9.5 开放封闭原则 128
5.9.6 里氏替换原则 130
5.9.7 依赖倒置原则 131
5.9.8 迪米特法则 134
5.10 Lambda表达式 134
5.10.1 函数式编程 134
5.10.2 Lambda表达式语法 135
5.10.3 函数式接口 135
5.10.4 自动类型推导 136
5.10.5 方法引用 136
5.10.6 接口的默认方法 136
5.11 重构日志数据分析器 137
5.12 本章小结 138
5.13 本章习题 139
第6章 异常处理 144
6.1 为什么引入异常处理 144
6.2 Java中的异常 147
6.2.1 异常架构 147
6.2.2 异常抛出 148
6.2.3 异常处理 148
6.3 异常处理 149
6.3.1 捕获异常 149
6.3.2 使用throws声明异常 151
6.3.3 throw抛出异常对象 152
6.3.4 异常转译 153
6.4 自定义异常 153
6.5 异常处理的原则 157
6.6 本章小结 160
6.7 本章习题 160
第7章 反射与注解 164
7.1 反射 164
7.2 反射的实现 164
7.2.1 Class类 165
7.2.2 获取构造器 166
7.2.3 获取成员变量 167
7.2.4 获取方法 167
7.2.5 数组 168
7.3 动态代理 169
7.3.1 无代理类的调用 169
7.3.2 有代理类的调用 170
7.3.3 动态代理 171
7.3.4 装饰 IVehicle 172
7.3.5 通用装饰代理类 173
7.4 注解 174
7.4.1 什么是注解 174
7.4.2 为什么使用注解 175
7.4.3 如何使用注解 175
7.4.4 开发注解 178
7.5 元注解 179
7.5.1 限定生命周期@Retention 179
7.5.2 限定使用对象@Target 181
7.5.3 生成文档@Documented 181
7.5.4 子类继承@Inherited 182
7.6 运行时读取注解 183
7.7 实例分析 185
7.7.1 过滤方法 185
7.7.2 自动化测试框架 187
7.8 单一抽象方法注解 189
7.9 本章小结 190
7.10 本章习题 190
第8章 集合与泛型 192
8.1 为什么需要集合 192
8.2 Java集合框架 193
8.2.1 集合接口 193
8.2.2 集合类 195
8.3 泛型 196
8.3.1 泛型类 196
8.3.2 泛型方法 196
8.3.3 类型限制 197
8.3.4 类型擦除 198
8.3.5 开发泛型类 198
8.3.6 泛型最佳实践 200
8.4 List接口 201
8.4.1 ArrayList 201
8.4.2 LinkedList 203
8.4.3 抽象层次的一致性 205
8.4.4 可变对象作为容器参数 205
8.5 Set接口 206
8.5.1 HashSet 206
8.5.2 比较器 208
8.5.3 TreeSet 210
8.6 Map接口 211
8.6.1 Hashtable 212
8.6.2 HashMap 213
8.7 迭代器 213
8.8 集合算法 216
8.8.1 Collections 216
8.8.2 Lambda与批数据操作 218
8.8.3 Stream实现批操作 218
8.8.4 惰性求值 220
8.9 同步性与数据增长 221
8.10 本章小结 221
8.11 本章习题 222
第9章 图形用户界面 225
9.1 图形用户界面的概念和组成 225
9.2 Swing组件库 226
9.2.1 Swing组件分类 226
9.2.2 组件基类JComponent 227
9.2.3 GUI设计步骤 228
9.3 顶层容器 229
9.3.1 JFrame 229
9.3.2 JWindow 230
9.4 中间容器 231
9.4.1 Jpanel 232
9.4.2 JTabbedPane 232
9.4.3 JScrollPane 234
9.4.4 对话框 235
9.4.5 文件对话框 237
9.5 基本组件 239
9.5.1 按钮控件 239
9.5.2 复选框JCheckBox 241
9.5.3 单选按钮JRadioButton 241
9.5.4 下拉列表框JComboBox 243
9.5.5 列表框JList 245
9.6 不可编辑组件 247
9.6.1 JLabel 247
9.6.2 菜单和工具栏 247
9.6.3 工具提示 250
9.7 可编辑组件 251
9.7.1 文本输入 251
9.7.2 文本区JTextArea 251
9.7.3 密码框JPasswordField 251
9.8 布局管理器 252
9.8.1 为什么要使用布局管理 253
9.8.2 布局方式 253
9.8.3 CardLayout 254
9.8.4 BorderLayout 255
9.8.5 FlowLayout 255
9.8.6 GirdLayout 256
9.8.7 BoxLayout 258
9.8.8 GroupLayout 259
9.8.9 GridBagLayout 261
9.9 事件处理机制 264
9.9.1 事件处理的角色 264
9.9.2 事件分发机制的实现:观察者模式 265
9.9.3 事件分类 268
9.9.4 委托事件模型 269
9.9.5 事件监听器 272
9.9.6 事件适配器 274
9.9.7 自定义用户事件 277
9.10 模型 279
9.11 拖放操作 280
9.12 综合示例 281
9.12.1 JTree 281
9.12.2 JTable 286
9.13 本章小结 292
9.14 本章习题 292
第10章 输入输出流 294
10.1 流的概念 294
10.1.1 Java中的I/O流 295
10.1.2 Java流框架和分类 295
10.2 辅助类 296
10.2.1 新建目录 297
10.2.2 文件操作 298
10.2.3 文件名过滤器 300
10.3 字节流 301
10.3.1 InputStream 302
10.3.2 OutputStream 302
10.2.3 文件输入输出流 303
10.3.4 缓冲输入输出流 305
10.3.5 数据输入输出流 307
10.3.6 字节数组输入输出流 309
10.3.7 随机文件存取 310
10.4 字符流 312
10.4.1 Reader抽象类 312
10.4.2 Writer抽象类 312
10.4.3 FileReader/FileWriter 313
10.4.4 BufferedReader/BufferedWriter 315
10.4.5 字节流和字符流之间的转换 316
10.5 Java New I/O 317
10.5.1 通道 318
10.5.2 文件通道 318
10.5.3 缓冲区 319
10.5.4 容量、位置和读写范围 321
10.5.5 分散与聚集 322
10.5.6 编码与字符集 323
10.5.7 通道间的数据传输 324
10.6 本章小结 325
10.7 本章习题 326
第11章 多线程编程 327
11.1 进程与线程 327
11.2 创建线程 328
11.2.1 继承Thread创建 328
11.2.2 实现Runnable接口 329
11.2.3 定时器 330
11.3 线程状态的转换 331
11.4 线程控制 332
11.4.1 线程睡眠 333
11.4.2 线程让步 333
11.4.3 线程加入 333
11.4.4 线程的优先级 334
11.4.5 线程分组管理 335
11.5 线程同步 335
11.5.1 同步方法 337
11.5.2 同步代码块 338
11.6 线程协作 339
11.6.1 wait与notify原语 339
11.6.2 生产者-消费者问题 340
11.7 线程池 345
11.7.1 使用线程池的原因 345
11.7.2 创建线程池 346
11.7.3 提交任务到线程池 347
11.7.4 关闭线程池 348
11.7.5 监控线程池 348
11.7.6 使用线程池 349
11.8 线程同步控制的新特征 353
11.8.1 条件变量 353
11.8.2 原子变量 356
11.8.3 障碍器 357
11.8.4 信号量 359
11.8.5 Callable与Future 360
11.9 综合实例 362
11.10 本章小结 367
11.11 本章习题 367
第12章 网络编程 369
12.1 计算机网络通信 369
12.2 网络编程范型 370
12.3 基于URL的网络编程 372
12.3.1 使用URL读取资源 372
12.3.2 通过URLConnection建立连接 372
12.3.3 设置连接属性 373
12.3.4 URLDecoder和URLEncoder 374
12.4 Socket编程 374
12.4.1 Socket通信过程 374
12.4.2 创建Socket 375
12.4.3 编程实例 376
12.4.4 Socket的选项 377
12.4.5 关闭Socket 378
12.4.6 Socket状态测试 379
12.5 UDP编程 379
12.5.1 DatagramSocket 380
12.5.2 编程实例 381
12.6 使用多线程 383
12.6.1 服务端多线程 384
12.6.2 客户端的实现 385
12.7 Mina框架 386
12.7.1 服务器端架构 387
12.7.2 客户端结构 387
12.7.3 I/O处理器 388
12.7.4 时间服务器 388
12.8 综合实例 391
12.8.1 代理服务器 391
12.8.2 聊天服务器 392
12.8.3 聊天客户端 395
12.9 本章小结 396
12.10 本章习题 397
第13章 项目实战 399
13.1 在线游戏 399
13.1.1 游戏规则 399
13.1.2 系统架构 399
13.2 系统设计 400
13.2.1 客户端设计 401
13.2.2 服务器端设计 401
13.2.3 通信协议的设计与实现 401
13.3 系统实现 406
13.3.1 客户端实现 406
13.3.2 服务端实现 413
13.4 本章小结 425
13.5 本章习题 425
第14章 数据库操作 426
14.1 数据库访问 426
14.2 JDBC 426
14.3 建立数据库连接 427
14.4 数据库操作 430
14.4.1 创建语句对象 430
14.4.2 执行SQL语句 430
14.4.3 结果集及其常见方法 430
14.4.4 PreparedStatement语句 432
14.4.5 关闭对象 433
14.5 JDBC事务 433
14.5.1 事务的定义 434
14.5.2 JDBC中的事务控制 434
14.5.3 JDBC事务处理基本流程 434
14.6 Hibernate 436
14.6.1 Hibernate体系结构 437
14.6.2 Hibernate核心组件 437
14.7 本章小结 438
14.8 本章习题 438
参考文献 439