第 1 章 Java 开发基础 1
1.1 初步认识 Java 语言 1
1.1.1 Java 语言介绍 1
1.1.2 Java 语言的特点 1
1.2 搭建 Java 运行环境 2
1.2.1 安装 JDK 2
1.2.2 配置开发环境—Windows 10 4
1.3 编写第 一个 Java 程序 5
1.3.1 第 一个 Java 程序 5
1.3.2 关键字 6
1.3.3 标识符 6
1.3.4 注释 7
1.3.5 方法 main() 8
1.3.6 控制台的输入和输出 8
1.4 编译并运行 Java 程序 8
1.4.1 编译 Java 程序 8
1.4.2 运行 Java 代码 9
1.4.3 Java 11 新特性:新的程序运行方式 9
1.5 技术解惑 9
1.5.1 遵循源文件命名规则 9
1.5.2 忽视系统文件的扩展名 10
1.5.3 大小写问题 10
1.5.4 到底用不用 IDE 工具 10
1.5.5 区分 JRE 和 JDK 10
1.6 常见面试题分析 11
1.7 课后练习 11
第 2 章 选择 Java 开发工具 12
2.1 使用 Eclipse 12
2.1.1 Eclipse 介绍 12
2.1.2 获得并安装 Eclipse 12
2.1.3 使用 Eclipse 新建一个 Java工程 15
2.1.4 编译并运行 Eclipse 工程 16
2.1.5 使用 Eclipse 打开一个 Java工程—打开本书配套资源中的项目 17
2.2 使用 IntelliJ IDEA 18
2.2.1 搭建 IntelliJ IDEA 开发环境 18
2.2.2 使用 IntelliJ IDEA 新建 Java工程 19
2.2.3 使用 IntelliJ IDEA 运行 Java程序 21
2.3 使用手机开发 Java 程序 21
2.4 常见面试题分析 22
2.5 课后练习 22
第 3 章 Java 基础语法 23
3.1 常量和变量 23
3.1.1 常量 23
3.1.2 变量 24
3.2 数据类型 25
3.2.1 Java 数据类型的分类 25
3.2.2 基本数据类型的取值范围 26
3.2.3 字符类型 26
3.2.4 整数类型 27
3.2.5 浮点类型 28
3.2.6 布尔类型 28
3.3 运算符 29
3.3.1 算术运算符 29
3.3.2 关系运算符和布尔逻辑运算符 31
3.3.3 位逻辑运算符 32
3.3.4 条件运算符 33
3.3.5 赋值运算符 33
3.3.6 运算符的优先级 34
3.4 类型转换 35
3.4.1 自动类型转换 35
3.4.2 强制类型转换 36
3.5 技术解惑 36
3.5.1 定义常量时的注意事项 36
3.5.2 char 类型中单引号的意义 36
3.6 常见面试题分析 37
3.7 课后练习 37
第 4 章 条件语句 38
4.1 使用 if 语句 38
4.1.1 if 语句 38
4.1.2 使用 if else 语句 ...................... 39
4.1.3 对多种情况进行判断 39
4.2 使用 switch 选择语句 40
4.2.1 switch 语句的形式 41
4.2.2 无 break 的情况 41
4.2.3 default 可以不在末尾 42
4.3 switch 语句和表达式 43
4.4 技术解惑 44
4.4.1 if else 语句的意义................... 44
4.4.2 switch 语句和 if elseif 语句的选择 44
4.4.3 if 语句和 switch 语句的选择 44
4.5 常见面试题解析 44
4.6 课后练习 45
第 5 章 循环语句和跳转语句 46
5.1 Java 循环语句 46
5.1.1 基本 for 循环 46
5.1.2 for 循环语句的嵌套 47
5.1.3 使用 while 循环语句 48
5.1.4 使用 do while 循环语句.......... 48
5.2 使用跳转语句 49
5.2.1 break 语句的应用 49
5.2.2 使用 return 语句 51
5.2.3 使用 continue 跳转语句 52
5.3 技术解惑 52
5.3.1 使用 for 循环的技巧 52
5.3.2 for 循环和 while 循环、do while循环的区别 52
5.4 常见面试题解析 52
5.5 课后练习 53
第 6 章 数组 54
6.1 使用一维数组 54
6.1.1 声明一维数组 54
6.1.2 创建一维数组 54
6.1.3 初始化一维数组 55
6.2 使用二维数组 56
6.2.1 声明二维数组 56
6.2.2 创建二维数组 56
6.2.3 初始化二维数组 57
6.3 使用三维数组 58
6.3.1 声明三维数组 59
6.3.2 创建并初始化三维数组 59
6.4 操作数组 60
6.4.1 复制数组中的元素 60
6.4.2 比较数组的大小 61
6.4.3 对数组中的元素排序 61
6.4.4 搜索数组中的元素 62
6.4.5 使用 foreach 遍历数组 62
6.5 技术解惑 63
动态初始化数组的规则 63
6.6 常见面试题解析 63
6.7 课后练习 63
第 7 章 面向对象基础 64
7.1 面向对象的基础 64
7.1.1 面向对象的定义 64
7.1.2 Java 的面向对象编程 64
7.1.3 Java 面向对象的几个核心概念 65
7.2 创建类 66
7.2.1 定义类 66
7.2.2 定义属性 67
7.2.3 定义方法 67
7.2.4 定义构造器 68
7.3 使用修饰符 68
7.3.1 使用 public 修饰符 69
7.3.2 使用 private 修饰符 69
7.3.3 使用 protected 修饰符 70
7.4 使用方法 70
7.4.1 传递方法参数 70
7.4.2 长度可变的方法 71
7.4.3 递归方法 72
7.5 使用 this 73
7.6 使用类和对象 74
7.6.1 创建和使用对象 74
7.6.2 使用静态变量和静态方法 74
7.7 使用抽象类和抽象方法 75
7.7.1 抽象类和抽象方法的基础 75
7.7.2 抽象类必须有一个抽象方法 76
7.8 使用包 77
7.8.1 定义软件包 77
7.8.2 在 Eclipse 中定义软件包 78
7.8.3 在程序中插入软件包 78
7.9 技术解惑 79
7.9.1 static 修饰符的作用 79
7.9.2 数组内是同一类型的数据 79
7.10 常见面试题解析 79
7.11 课后练习 80
第 8 章 面向对象编程进阶 81
8.1 类的继承 81
8.1.1 定义继承 81
8.1.2 调用父类的构造方法 82
8.1.3 访问父类的属性和方法 83
8.1.4 多层继承 83
8.2 重写和重载 85
8.2.1 重写 85
8.2.2 重载 86
8.3 使用接口 87
8.3.1 定义接口 87
8.3.2 接口中的常量 88
8.3.3 接口中的方法 88
8.3.4 引用接口 89
8.3.5 接口间的继承 90
8.3.6 接口的私有方法 91
8.4 技术解惑 94
8.4.1 重写方法的注意事项 94
8.4.2 接口和抽象类的区别与联系 94
8.5 常见面试题解析 94
8.6 课后练习 95
第 9 章 构造器、多态和引用类型 96
9.1 使用构造器 96
9.1.1 初始化构造器 96
9.1.2 构造器重载 97
9.1.3 调用父类构造器 97
9.2 使用多态 98
9.2.1 定义多态 98
9.2.2 使用多态 99
9.3 引用类型 100
9.3.1 4 种引用类型 100
9.3.2 引用变量的强制类型转换 102
9.4 组合 102
9.5 初始化块 105
9.5.1 初始化块介绍 105
9.5.2 使用静态初始化块 106
9.6 技术解惑 107
9.7 常见面试题解析 107
9.8 课后练习 108
第 10 章 内部类、匿名类和枚举类 109
10.1 使用内部类 109
10.1.1 内部类概述 109
10.1.2 非静态内部类 110
10.1.3 成员内部类 111
10.1.4 使用局部内部类 111
10.2 使用匿名类 113
10.2.1 定义匿名类 113
10.2.2 定义匿名内部类 114
10.2.3 匿名内部类使用 final形参 114
10.3 使用枚举类 115
10.3.1 模拟枚举类 116
10.3.2 枚举类的方法 117
10.3.3 枚举类型 117
10.4 嵌套访问控制 118
10.4.1 嵌套访问控制基础 118
10.4.2 在 Java 11 程序中访问嵌套
成员 119
10.5 技术解惑 120
10.6 常见面试题解析 120
10.7 课后练习 121
第 11 章 集合 122
11.1 Java 中的集合类 122
11.2 使用 Collection 接口和 Iterator接口 123
11.2.1 Collection 接口概述 123
11.2.2 Iterator 接口概述 124
11.2.3 使用 Collection 接口中的方法操作集合中的元素 124
11.3 使用 Set 接口 125
11.3.1 Set 接口概述 125
11.3.2 使用 HashSet 126
11.3.3 使用 TreeSet 类 127
11.4 使用 List 接口 128
11.4.1 List 接口基础 128
11.4.2 根据索引操作集合内的元素 129
11.5 使用 Map 接口 130
11.5.1 Map 接口中的方法 130
11.5.2 使用 HashMap 和 Hashtable实现类 131
11.5.3 使用 SortedMap 接口和 TreeMap实现类 132
11.6 使用 Queue 接口 133
11.6.1 Queue 接口中的成员 134
11.6.2 LinkedList 类 134
11.7 使用集合工具类 Collections 135
11.7.1 排序操作 135
11.7.2 查找和替换操作 136
11.8 创建不可变的 List 、Set 和 Map 137
11.8.1 Java 9 以前版本的解决方案 137
11.8.2 Java 9 版本的解决方案 138
11.9 使用 var 类型推断 140
11.9.1 var 类型推断基础 140
11.9.2 使用 var 声明局部变量 140
11.10 使用新的默认方法 141
11.11 技术解惑 142
11.11.1 使用 EnumSet 类的注意事项 142
11.11.2 ArrayList 和 Vector 的区别 142
11.11.3 分析 Map 类的性能 142
11.12 常见面试题解析 142
11.13 课后练习 143
第 12 章 使用泛型 144
12.1 泛型基础 144
12.1.1 泛型的优点 144
12.1.2 类型检查 145
12.1.3 使用泛型 146
12.1.4 在类中使用泛型 147
12.2 类型通配符 147
12.2.1 使用泛型通配符 147
12.2.2 泛型限定 148
12.3 泛型方法 150
12.3.1 泛型方法介绍 150
12.3.2 使用泛型方法 150
12.4 使用泛型接口 151
12.5 泛型继承 152
12.5.1 以泛型类为父类 153
12.5.2 将非泛型类作为父类 154
12.6 强制类型转换 154
12.7 技术解惑 155
12.8 常见面试题解析 156
12.9 课后练习 156
第 13 章 Java 常用类库(上) 157
13.1 字符串 157
13.1.1 字符串的初始化 157
13.1.2 String 类 158
13.1.3 Java 11 新特性:新增的String 方法 160
13.2 使用 StringBuffer 类 162
13.2.1 StringBuffer 类基础 162
13.2.2 使用字符追加方法 163
13.3 使用 Runtime 类 164
13.3.1 Runtime 类的常用方法 164
13.3.2 使用 Runtime 类 165
13.4 程序国际化 165
13.4.1 国际化基础 166
13.4.2 Locale 类 166
13.4.3 ResourceBundle 类 166
13.4.4 处理动态文本 167
13.5 使用 System 类 168
13.5.1 System 类的常用方法 169
13.5.2 垃圾对象的回收 169
13.6 技术解惑 170
13.6.1 StringBuffer 和 String 的异同 170
13.6.2 通过 System 类获取本机的全部环境属性 170
13.7 常见面试题解析 171
13.8 课后练习 171
第 14 章 Java 常用类库(下) 172
14.1 使用日期处理类 172
14.1.1 使用 Date 类 172
14.1.2 使用 Calendar 类获取当前的时间 172
14.1.3 使用 DateFormat 类格式化处理时间 173
14.2 使用 Math 类 174
14.3 使用 Random 类生成随机数 175
14.4 使用 NumberFormat 类格式化处理数字 176
14.5 复制对象 178
14.6 使用 Comparable 接口操作数组 179
14.6.1 Comparable 接口介绍 179
14.6.2 使用 Comparator 接口 180
14.7 使用 Observable 类和 Observer接口 182
14.8 使用正则表达式 183
14.8.1 正则表达式基础 183
14.8.2 Java 中的正则表达式类 184
14.8.3 验证一个字符串是否为合法的日期格式 185
14.8.4 String 类和正则表达式 185
14.8.5 Java 9 新增的正则表达式方法 186
14.8.6 正则表达式参数的局部变量语法 187
14.9 使用 Timer 类和 TimerTask 类 188
14.9.1 Timer 类基础 188
14.9.2 TimerTask 类基础 189
14.9.3 使用 TimerTask 子类建立测试类并实现任务调度 189
14.10 技术解惑 190
14.11 常见面试题解析 190
14.12 课后练习 191
第 15 章 异常处理 192
15.1 异常概述 192
15.1.1 认识异常 192
15.1.2 异常处理类 193
15.2 Java 的异常处理方式 193
15.2.1 使用 try catch 语句.............194
15.2.2 处理多个异常 194
15.2.3 finally 语句 195
15.2.4 访问异常信息 196
15.3 抛出异常 197
15.3.1 使用 throws 抛出异常 197
15.3.2 使用关键字 throw 抛出异常 199
15.4 自定义异常 200
15.4.1 Throwable 类及其子类 200
15.4.2 使用 Throwable 类自定义异常 201
15.5 技术解惑 202
15.5.1 区别 throws 关键字和 throw关键字 202
15.5.2 区别子类 Error 和Exception 203
15.6 常见面试题解析 203
15.7 课后练习 203
第 16 章 I/O 文件处理和流处理 204
16.1 使用 File 类 204
16.1.1 File 类中的方法 204
16.1.2 创建文件 205
16.1.3 删除文件 205
16.1.4 创建文件夹 205
16.2 使用 RandomAccessFile 类 206
16.2.1 RandomAccessFile 类的常用方法 206
16.2.2 使用 RandomAccessFile 类 207
16.3 使用字节流与字符流 208
16.3.1 字节流类和字符流类 208
16.3.2 使用字节输出流OutputStream 208
16.3.3 使用字节输入流InputStream 209
16.3.4 字符输出流 Writer 210
16.3.5 使用 FileWriter 追加文件内容 211
16.3.6 使用字符输入流 Reader 212
16.4 使用字节转换流 213
16.5 使用内存操作流 214
16.6 使用管道流 215
16.7 使用打印流 216
16.7.1 打印流基础 216
16.7.2 使用打印流 217
16.8 使用 Scanner 类 217
16.8.1 Scanner 类概述 218
16.8.2 使用 Scanner 类 218
16.9 实现数据操作流 219
16.9.1 DataOutputStream 类 219
16.9.2 DataInputStream 类 220
16.10 使用合并流 221
16.11 使用 Stream API 222
16.11.1 Java 8 中的流 222
16.11.2 Java 9 中的流 224
16.12 使用 try with…resources 语句 ....... 226
16.12.1 try with…resources 语句概述 226
16.12.2 try with…resources 的改进 227
16.13 Java I/O 模块的新特性 230
16.13.1 处理空的文件对象 230
16.13.2 改进的方法readNBytes() 231
16.13.3 新的构造方法 231
16.14 技术解惑 232
16.15 常见面试题分析 232
16.16 课后练习 233
第 17 章 GUI 编程 234
17.1 GUI 开发基础 234
17.1.1 GUI 的发展历程 234
17.1.2 初识 Swing 234
17.1.3 Swing 包 235
17.1.4 Swing 中的组件 236
17.2 窗口与面板 237
17.2.1 JFrame 窗口 237
17.2.2 JPanel 面板 238
17.3 常用布局管理器 239
17.3.1 边框布局管理器 239
17.3.2 流式布局管理器 241
17.3.3 卡片布局管理器 242
17.3.4 网格布局管理器 243
17.4 基本组件 244
17.4.1 按钮组件 244
17.4.2 标签组件 245
17.4.3 单行文本框组件 246
17.4.4 复选框和单选按钮组件 247
17.4.5 边框组件 248
17.4.6 JToolBar 工具条组件 250
17.4.7 选择对话框组件 JColorChooser和 JFileChooser 251
17.4.8 下拉列表组件 252
17.5 进度条组件 253
17.5.1 使用 JProgressBar 创建进度条 254
17.5.2 使用 ProgressMonitor 创建进度对话框 255
17.6 技术解惑 256
17.6.1 事件处理的模型 256
17.6.2 实现树结构 257
17.7 常见面试题解析 257
17.8 课后练习 257
第 18 章 数据库编程 258
18.1 使用 JDBC API 258
18.1.1 JDBC API 介绍 258
18.1.2 JDBC 的常用接口和类 258
18.2 连接 Access 数据库 260
18.2.1 Access 数据库概述 260
18.2.2 连接本地 Access 数据库 260
18.3 连接 SQL Server 数据库 262
18.3.1 下载并安装 SQL Sever 2016驱动 262
18.3.2 测试连接 263
18.3.3 获取 SQL Server 数据库中指定的表 264
18.4 连接 MySQL 数据库 265
18.4.1 下载并配置 MySQL 驱动 266
18.4.2 将 MySQL 驱动加载到Eclipse 中 266
18.4.3 测试连接 267
18.5 技术解惑 267
18.5.1 连接池的功效 267
18.5.2 数据模型、概念模型和关系数据模型的关系 268
18.5.3 数据库系统的结构 268
18.6 常见面试题解析 269
18.7 课后练习 269
第 19 章 开发互联网程序 270
19.1 Java 语言中的内置网络包 270
19.1.1 InetAddress 类概述 270
19.1.2 URLDecoder 类和 URLEncoder类概述 271
19.1.3 URL 类和 URLConnection 类概述 271
19.1.4 使用 InetAddress 访问指定的网址 272
19.2 开发 TCP 程序 272
19.2.1 使用 ServerSocket 273
19.2.2 使用 Socket 273
19.2.3 开发多线程 TCP 程序 274
19.3 开发 UDP 程序 276
19.3.1 使用 DatagramSocket 276
19.3.2 使用 MulticastSocket 278
19.4 开发代理服务器程序 280
19.4.1 代理服务器概述 280
19.4.2 使用 Proxy 创建连接 280
19.4.3 使用 ProxySelector 选择代理服务器 281
19.5 HTTP/2 Client API 283
19.5.1 孵化器模块 usergrid 概述 283
19.5.2 HTTP/2 Client API 概述 283
19.5.3 处理 HTTP 请求 284
19.6 技术解惑 285
19.6.1 使用异常处理完善程序 285
19.6.2 体会烦琐的DatagramPacket 286
19.6.3 MulticastSocket 类的重要意义 286
19.6.4 继承 ProxySelector 时需要做的工作 286
19.6.5 生成 jdk.incubator.httpclient模块的 Javadoc 287
19.7 常见面试题解析 287
19.8 课后练习 288
第 20 章 开发多线程 Java 程序 289
20.1 线程基础 289
20.1.1 线程与进程 289
20.1.2 Java 语言的线程模型 289
20.2 创建线程 290
20.2.1 使用 Thread 类创建线程 290
20.2.2 使用 Runnable 接口创建线程 292
20.2.3 使用 Thread.onSpinWait()方法实现循环等待 293
20.3 线程的生命周期 294
20.3.1 线程的运行与停止 294
20.3.2 线程的挂起和唤醒 294
20.3.3 使用退出标志终止线程 295
20.3.4 使用 interrupt()方法终止线程 296
20.3.5 线程的阻塞 296
20.3.6 线程的死亡 297
20.4 控制线程 298
20.4.1 使用 join()方法 298
20.4.2 慎重使用 volatile 关键字 299
20.4.3 后台、让步和睡眠 301
20.5 进程处理 302
20.5.1 使用 ProcessBuilder 类 302
20.5.2 使用 Process 类 303
20.5.3 使用 ProcessHandle 类 304
20.6 技术解惑 306
20.6.1 线程和函数的关系 306
20.6.2 在 run()方法中使用线程名时产生的问题 306
20.6.3 start()和 run()的区别 306
20.6.4 线程的优先级 307
20.6.5 如何确定发生死锁 307
20.6.6 关键字 synchronized 和volatile 的区别 307
20.7 常见面试题解析 307
20.8 课后练习 308
第 21 章 开发网络爬虫程序 309
21.1 网络爬虫的原理 309
21.1.1 基本结构及工作流程 309
21.1.2 抓取策略算法 310
21.2 使用 URLConnection 开发爬虫程序 311
21.3 使用 jsoup 框架 312
21.3.1 jsoup 框架介绍 312
21.3.2 使用 jsoup 获取指定页面中的指定元素 313
21.3.3 使用jsoup 获取指定格式的URL网址 314
21.4 使用 WebCollector 框架 315
21.4.1 WebCollector 框架概述 315
21.4.2 抓取新闻信息 315
21.4.3 抓取图片信息 316
21.5 技术解惑 317
21.5.1 广度优先爬虫算法 317
21.5.2 Java 爬虫初识之模拟登录 320
21.6 常见面试题解析 320
21.7 课后练习 321
22.1 系统介绍 322
22.2 需求分析 322
22.3 系统模块和实现流程 323
22.4 爬虫抓取模块 323
22.4.1 网页概览 323
22.4.2 破解 JS API 反爬机制 325
22.4.3 爬虫抓取 Java 图书信息 328
22.4.4 爬虫抓取 Python 图书信息 330
22.4.5 爬虫抓取主分类图书信息 332
22.4.6 爬虫抓取子分类图书信息 335
22.5 大数据可视化分析 337
22.5.1 搭建 Java Web 平台 337
22.5.2 大数据分析并可视化计算机图书数据 339
22.5.3 大数据分析并可视化近期 Java图书和 Python 图书的数据 341
22.5.4 大数据分析并可视化主分类图书数据 342
22.5.5 大数据分析并可视化计算机子类图书数据 343
第 23 章 人工智能和 AI 自动化编程 346
23.1 人工智能介绍 346
23.1.1 人工智能的发展方向和技术 346
23.1.2 人工智能的作用 347
23.2 人工智能与自动化编程 347
23.2.1 自动化编程介绍 347
23.2.2 AIGC(人工智能生成内容)介绍 348
23.2.3 AIGC 和自动化编程的关系 349
23.2.4 常用的 AIGC 自动化编程工具 349
23.3 ChatGPT 与自动化编程 350
23.3.1 ChatGPT 的主要特点 350
23.3.2 ChatGPT 在编程方面的功能 350
23.4 Kimi 与自动化编程 351
23.4.1 Kimi 的主要特点 351
23.4.2 Kimi 在编程方面的功能 351
第 24 章 AIGC 自动化编程实战 352
24.1 AI 自动化编程学习助手 352
24.1.1 基于 ChatGPT 的学习助手 352
24.1.2 基于 Kimi 的学习助手 353
24.2 用 AIGC 工具生成代码摘要和代码解释 354
24.2.1 基于 ChatGPT 生成代码摘要和解释 354
24.2.2 基于 Kimi 生成代码摘要和解释 354
24.3 AIGC 工具用于代码生成和注释添加 355
24.3.1 基于 ChatGPT 的代码生成和注释添加 355
24.3.2 基于 Kimi 的代码生成和注释添加 356
24.4 AIGC 工具用于代码补全 357
24.4.1 基于 ChatGPT 的代码补全 358
24.4.2 基于 Kimi 的代码补全 358
24.5 用 AIGC 进行代码重构和优化 359
24.5.1 基于 ChatGPT 的代码重构和优化 360
24.5.2 基于 Kimi 的代码重构和优化 361
24.6 用 AIGC 进行代码纠错 362
24.6.1 基于 ChatGPT 的代码纠错 362
24.6.2 基于 Kimi 的代码纠错 363
24.7 用 AIGC 辅助学习技术文档 363
25.1 基于 ChatGPT 实现的游戏背景介绍 366
25.2 基于 Kimi 的需求分析 366
25.3 用大模型实现一个简易版的切水果游戏 368
25.4 用大模型划分游戏区域 370
25.5 使用 Kimi 大模型美化游戏界面 372
25.5.1 用大模型帮助美观布局和样式 372
25.5.2 用大模型增加游戏背景图 374
25.5.3 用大模型增加 Game Over特效 377
25.5.4 用大模型增加背景音乐 380
25.6 用大模型对代码进行讲解 384
25.6.1 用大模型对游戏的功能和技术栈进行总结 384
25.6.2 用大模型对代码进行剖析 385