第1章 Java开发环境搭建 1
1.1 JDK的安装和配置 1
1.1.1 Java的发展历程 1
1.1.2 下载和安装JDK 2
1.1.3 配置环境变量 4
1.2 IntelliJIDEA的安装与配置 5
1.2.1 安装IntelliJ IDEA 6
1.2.2 配置IntelliJ IDEA 7
1.2.3 运行第一个Java程序 9
1.3 Java虚拟机(JVM) 12
1.3.1 Java程序的运行机制 13
1.3.2 JVM的体系结构 13
1.3.3 JVM、JRE与JDK的区别 15
1.4 Java编程的基本概念 16
1.4.1 Java的代码结构 16
1.4.2 Java的特殊官吏 19
1.4.3 Java的度量衡 22
1.5 小结 25
第2章 数学运算 26
2.1 数值变量 26
2.1.1 数值变量的类型 26
2.1.2 特殊数字的表达 28
2.1.3 强制类型转换 30
2.2 算术运算 32
2.2.1 四则运算符 32
2.2.2 赋值运算符 34
2.2.3 一元运算符 35
2.3 数学函数 37
2.3.1 取整函数 37
2.3.2 取随机数 38
2.3.3 科学计算函数 38
2.3.4 三角函数 39
2.4 实战练习 39
2.4.1 利用牛顿迭代法求平方根 39
2.4.2 利用割圆术求解圆周率 42
2.5 小结 46
第3章 逻辑控制 47
3.1 逻辑运算 47
3.1.1 布尔类型及其运算 47
3.1.2 关系运算符 49
3.1.3 运算符的优先级顺序 50
3.1.4 按位逻辑与短路逻辑 52
3.2 控制语句 53
3.2.1 条件分支 53
3.2.2 多路分支 54
3.2.3 while循环 56
3.2.4 for循环 58
3.3 数组 59
3.3.1 一维数组 60
3.3.2 二维数组 62
3.3.3 冒号的几种用法 64
3.3.4 数组工具Arrays 67
3.4 实战练习 71
3.4.1 求解“鸡兔同笼”问题 71
3.4.2 求解“韩信点兵”问题 72
3.4.3 利用二分查找法定位数组元素 74
3.5 小结 77
第4章 方法与包装 78
4.1 方法定义 78
4.1.1 方法的组成形式 78
4.1.2 方法的输入参数 80
4.1.3 方法的输出参数 83
4.2 基本类型包装 86
4.2.1 数值类型包装 86
4.2.2 包装变量的运算 88
4.2.3 布尔类型包装 89
4.3 大数字类型 90
4.3.1 大整数BigInteger 90
4.3.2 大小数BigDecimal 91
4.4 实战练习 93
4.4.1 通过方法递归实现阶乘函数 93
4.4.2 利用牛顿迭代法求大数开方 95
4.4.3 利用大数字求更精确的圆周率 97
4.5 小结 100
第5章 字符串与正则表达式 101
5.1 字符 101
5.1.1 字符类型 101
5.1.2 字符型与整型的相互转化 102
5.1.3 字符包装类型 104
5.2 字符串 105
5.2.1 字符串的赋值与转换 105
5.2.2 字符串的格式化 107
5.2.3 其他常见的字符串方法 111
5.3 正则表达式 113
5.3.1 利用正则串分割字符串 113
5.3.2 利用正则表达式校验字符串 117
5.4 实战练习 120
5.4.1 从地址串中解析收件人信息 120
5.4.2 校验身份证号码的合法性 124
5.5 小结 128
第6章 日期时间 129
6.1 日期工具Date 129
6.1.1 日期工具的用法 129
6.1.2 日期时间的格式化 131
6.2 日历工具Calendar 134
6.2.1 日历工具的用法 134
6.2.2 日历工具的常见应用 136
6.3 Java 8的本地日期时间工具 139
6.3.1 本地日期LocalDate和本地时间LocalTime 139
6.3.2 本地日期时间与字符串的互相转换 142
6.4 实战练习 144
6.4.1 从1582年问题浅谈Date工具的局限 144
6.4.2 利用本地日期时间实现万年历 148
6.5 小结 150
第7章 类的三要素 151
7.1 类的封装 151
7.1.1 类的成员定义 151
7.1.2 类的构造方法 156
7.1.3 this关键字的用法 157
7.2 类的继承 159
7.2.1 类的简单继承 159
7.2.2 父类:关键字super的用法 161
7.2.3 几种开放性修饰符 164
7.3 类的多态 165
7.3.1 多态的发生场景 165
7.3.2 对象的类型检查 167
7.3.3 终态:关键字final的用法 169
7.4 实战练习:定义银行的账户类 171
7.5 小结 177
第8章 特殊的类 178
8.1 类的嵌套 178
8.1.1 内部类和嵌套类 178
8.1.2 静态:关键字static的用法 181
8.1.3 枚举类型 185
8.2 类的抽象 188
8.2.1 抽象类 188
8.2.2 简单接口 190
8.2.3 Java 8之后的扩展接口 193
8.2.4 匿名内部类 195
8.3 函数式编程 198
8.3.1 Lambda表达式 198
8.3.2 函数式接口的定义 200
8.3.3 双冒号标记的方法引用 202
8.3.4 静态方法引用和实例方法引用 206
8.4 实战练习 210
8.4.1 实现建造者模式 210
8.4.2 实现单例模式 214
8.5 小结 218
第9章 容器与泛型 219
9.1 容器的种类 219
9.1.1 集合:HashSet和TreeSet 219
9.1.2 映射:HashMap和TreeMap 224
9.1.3 清单:ArrayList和LinkedList 226
9.2 泛型的规则 228
9.2.1 从泛型方法探究泛型的起源 229
9.2.2 泛型类的定义及其运用 232
9.2.3 Java 8新增的几种泛型接口 234
9.3 容器的加工 240
9.3.1 容器与数组互转 240
9.3.2 容器工具Collections 242
9.3.3 Java 8新增的流式处理 243
9.4 实战练习 246
9.4.1 利用泛型实现通用的二分查找算法 246
9.4.2 借助容器实现两种常见的排队算法 249
9.5 小结 253
第10章 类的进阶用法 254
10.1 异常 254
10.1.1 常见的程序异常 254
10.1.2 内存溢出的两种错误 257
10.1.3 异常的处理:扔出与捕捉 259
10.1.4 如何预防异常的产生 263
10.1.5 使用Optional规避空指针异常 265
10.2 反射 269
10.2.1 面向对象的后门——反射 269
10.2.2 利用反射技术操作私有属性 271
10.2.3 利用反射技术操作私有方法 273
10.3 注解 275
10.3.1 如何使用系统自带的注解 276
10.3.2 注解的基本单元——元注解 278
10.3.3 利用注解技术检查空指针 279
10.4 小结 283
第11章 文件I/O处理 284
11.1 文件读写 284
11.1.1 文件与目录的管理 284
11.1.2 字符流读写 286
11.1.3 缓冲区读写 290
11.1.4 随机访问文件的读写 293
11.2 I/O输入输出流 295
11.2.1 文件I/O字节流 296
11.2.2 缓存I/O字节流 297
11.2.3 对象序列化 299
11.2.4 I/O流处理简单的数据压缩 302
11.3 NIO文件编程 304
11.3.1 文件通道FileChannel 304
11.3.2 字节缓存ByteBuffer 307
11.3.3 文件通道的性能优势 309
11.3.4 路径工具Paths和Files 311
11.4 实战练习:文件的分割与合并 314
11.5 小结 317
第12章 AWT界面编程 318
12.1 AWT的窗口面板 318
12.1.1 框架Frame 318
12.1.2 按钮Button 320
12.1.3 布局Layout 322
12.2 AWT的文本控件 324
12.2.1 标签Label 324
12.2.2 输入框TextField和TextArea 328
12.2.3 选择框Checkbox 330
12.3 AWT的图像处理 332
12.3.1 自定义图像视图 332
12.3.2 绘图工具Graphics 334
12.3.3 利用Graphics2D加工图像 337
12.4 实战练习:生成验证码图片 341
12.5 小结 344
第13章 Swing界面编程 345
13.1 Swing的基础界面 345
13.1.1 框架JFrame和按钮JButton 345
13.1.2 标签JLabel 347
13.1.3 利用标签显示图像 349
13.2 Swing的简单控件 350
13.2.1 输入框的种类 351
13.2.2 选择框的种类 352
13.2.3 列表框的种类 355
13.3 Swing的高级控件 359
13.3.1 表格JTable 359
13.3.2 基本对话框 361
13.3.3 文件对话框 364
13.4 实战练习 368
13.4.1 简单的登录界面 368
13.4.2 将Java代码导出JAR包 371
13.5 小结 373
第14章 JavaFX界面编程 374
14.1 JavaFX的基本场景 374
14.1.1 JavaFX的初始配置 374
14.1.2 窗格Pane 377
14.1.3 按钮Button和标签Label 379
14.1.4 箱子HBox和VBox 382
14.2 JavaFX的常用控件 385
14.2.1 输入框的种类 385
14.2.2 选择框的种类 388
14.2.3 列表与表格 393
14.2.4 对话框的种类 397
14.3 JavaFX的布局设计 403
14.3.1 FXML布局的基本格式 403
14.3.2 实现FXML对应的控制器 407
14.3.3 FXML布局的伸展适配 409
14.4 实战练习 412
14.4.1 房贷计算器(简易版) 412
14.4.2 JavaFX导出可执行程序 417
14.4.3 房贷计算器(完整版) 420
14.5 小结 424
第15章 多线程 425
15.1 线程的调度 425
15.1.1 线程的基本用法 425
15.1.2 任务Runnable 430
15.1.3 过程Callable 433
15.1.4 定时器与定时任务 435
15.2 并发的控制 437
15.2.1 同步:关键字synchronized的用法 437
15.2.2 通过加解锁避免资源冲突 440
15.2.3 信号量Semaphore的请求与释放 443
15.2.4 线程间的通信方式 447
15.3 线程池管理 451
15.3.1 普通线程池 451
15.3.2 定时器线程池 456
15.3.3 分治框架Fork/Join 459
15.4 实战练习 463
15.4.1 秒表计时器 463
15.4.2 打地鼠游戏 467
15.5 小结 473
第16章 网络通信 474
16.1 网络交互的数据格式 474
16.1.1 URL地址的组成格式 474
16.1.2 JSON串的解析 477
16.1.3 XML报文的解析 482
16.2 HTTP接口访问 486
16.2.1 GET方式的HTTP调用 486
16.2.2 POST方式的HTTP调用 492
16.2.3 Java 11新增的HttpClient 495
16.2.4 HttpClient实现下载与上传 499
16.3 套接字Socket通信 502
16.3.1 利用Socket传输文本 502
16.3.2 使用Socket传输文件 507
16.3.3 采用UDP协议的Socket通信 510
16.3.4 利用HttpServer搭建简易服务器 512
16.4 实战练习 514
16.4.1 HTTP测试工具 515
16.4.2 让Java程序输出日志文件 519
16.4.3 多人即时通信——仿QQ聊天 523
16.5 小结 534
第17章 数据库操作 535
17.1 MySQL环境搭建 535
17.1.1 安装MySQL数据库 535
17.1.2 安装MySQL工作台 547
17.1.3 数据库操纵语言SQL的用法 553
17.2 JDBC编程 557
17.2.1 JDBC的应用原理 557
17.2.2 通过JDBC管理数据库 559
17.2.3 通过JDBC查询数据记录 562
17.2.4 预报告PreparedStatement 565
17.3 数据库连接池 567
17.3.1 C3P0连接池 567
17.3.2 Druid连接池 569
17.4 实战练习 572
17.4.1 代码生成工具 572
17.4.2 让Java程序读取配置文件 578
17.4.3 诗歌管理系统——古诗三百首 581
17.5 小结 589
附录A 服务端工程的使用说明 590
A.1 下载并安装Tomcat 590
A.2 给IDEA安装Tomcat插件 591
A.3 添加Tomcat的运行配置 592
A.4 启动Tomcat服务器 595