第1章 Java语言概述 1
1.1 Java起源与发展 1
1.1.1 Java的起源 1
1.1.2 Java的发展历程 2
1.1.3 Java语言的优点 3
1.2 Java平台与开发环境 3
1.2.1 Java平台与应用领域 3
1.2.2 JDK、JRE和JVM 4
1.2.3 Java字节码与平台独立 4
1.2.4 JDK的下载与安装 5
1.2.5 Java API文档 6
1.3 Java程序基本结构 6
1.3.1 Java程序开发步骤 6
1.3.2 第一个程序分析 8
1.4 程序文档风格和注释 9
1.4.1 一致的缩进和空白 9
1.4.2 块的风格 9
1.4.3 Java程序注释 10
1.5 Eclipse集成开发环境 10
1.6 小结 12
编程练习 12
第2章 Java语言基础 13
2.1 简单程序的开发 13
2.1.1 从键盘读取数据 14
2.1.2 变量与赋值 15
2.1.3 Java标识符 15
2.1.4 Java关键字 16
2.2 数据类型 16
2.2.1 数据类型概述 16
2.2.2 字面值和常量 17
2.2.3 整数类型 17
2.2.4 浮点类型 19
2.2.5 字符类型 20
2.2.6 布尔类型 21
2.2.7 字符串类型 22
2.3 运算符 23
2.3.1 算术运算符 23
2.3.2 关系运算符 25
2.3.3 逻辑运算符 25
2.3.4 赋值运算符 26
2.3.5 位运算符 28
2.3.6 运算符的优先级和结合性 30
2.4 数据类型转换 31
2.4.1 自动类型转换 31
2.4.2 强制类型转换 32
2.4.3 表达式中类型自动提升 33
2.5 小结 34
编程练习 34
第3章 选择与循环 36
3.1 选择 36
3.1.1 单分支if语句 36
3.1.2 双分支if-else语句 37
3.1.3 嵌套的if语句和多分支的if-else语句 39
3.1.4 条件运算符 40
3.1.5 switch语句结构 41
3.2 循环 43
3.2.1 while循环 43
3.2.2 do-while循环 45
3.2.3 for循环 45
3.2.4 循环的嵌套 47
3.2.5 break语句和continue语句 47
3.3 示例学习 49
3.3.1 任意抽取一张牌 49
3.3.2 求最大公约数 50
3.3.3 打印输出若干素数 51
3.4 小结 52
编程练习 53
第4章 类和对象 55
4.1 面向对象概述 55
4.1.1 OOP的产生 55
4.1.2 面向对象的基本概念 56
4.1.3 面向对象基本特征 57
4.1.4 OOP的优势 58
4.2 为对象定义类 58
4.2.1 类的定义 59
4.2.2 对象的使用 62
4.2.3 理解栈与堆 64
4.2.4 用UML图表示类 64
4.3 方法设计 65
4.3.1 如何设计方法 65
4.3.2 方法的调用 67
4.3.3 方法重载 67
4.3.4 构造方法 68
4.3.5 this关键字的使用 70
4.3.6 方法参数的传递 71
4.4 静态变量和静态方法 72
4.4.1 静态变量 72
4.4.2 静态方法 74
4.4.3 单例模式 75
4.4.4 递归 76
4.5 对象初始化和清除 77
4.5.1 实例变量的初始化 77
4.5.2 静态变量的初始化 79
4.5.3 垃圾回收器 80
4.5.4 变量作用域和生存期 81
4.6 包与类的导入 82
4.6.1 包 82
4.6.2 类的导入 84
4.6.3 Java编译单元 85
4.7 小结 85
编程练习 86
第5章 数组 90
5.1 创建和使用数组 90
5.1.1 数组定义 90
5.1.2 增强的for循环 93
5.1.3 数组元素的复制 93
5.1.4 数组参数与返回值 95
5.1.5 可变参数的方法 96
5.1.6 实例:随机抽取4张牌 97
5.1.7 实例:一个整数栈类 98
5.2 Arrays类 99
5.2.1 数组的排序 100
5.2.2 元素的查找 100
5.2.3 数组元素的复制 101
5.2.4 填充数组元素 101
5.2.5 数组的比较 102
5.3 二维数组 103
5.3.1 二维数组定义 103
5.3.2 数组元素的使用 104
5.3.3 数组初始化器 105
5.3.4 实例:矩阵乘法 105
5.3.5 不规则二维数组 106
5.4 小结 108
编程练习 108
第6章 字符串 111
6.1 String类 111
6.1.1 创建String类对象 111
6.1.2 字符串基本操作 112
6.1.3 字符串查找 114
6.1.4 字符串转换为数组 114
6.1.5 字符串比较 115
6.1.6 字符串的拆分与组合 117
6.1.7 String对象的不变性 118
6.1.8 命令行参数 118
6.2 格式化输出 119
6.3 StringBuilder类和StringBuffer类 122
6.3.1 创建StringBuilder对象 122
6.3.2 StringBuilder的访问和修改 122
6.3.3 运算符“+”的重载 124
6.4 小结 124
编程练习 124
第7章 继承与多态 126
7.1 类的继承 126
7.1.1 类继承的实现 126
7.1.2 方法覆盖 129
7.1.3 super关键字 130
7.1.4 调用父类的构造方法 132
7.2 封装性与访问修饰符 133
7.2.1 类的访问权限 133
7.2.2 类成员的访问权限 134
7.3 防止类扩展和方法覆盖 135
7.3.1 final修饰类 135
7.3.2 final修饰方法 136
7.3.3 final修饰变量 136
7.4 抽象类 137
7.5 对象转换与多态 138
7.5.1 对象转换 139
7.5.2 instanceof运算符 140
7.5.3 多态与动态绑定 140
7.6 小结 142
编程练习 142
第8章 Java常用核心类 144
8.1 Object:终极父类 144
8.1.1 toString()方法 145
8.1.2 equals()方法 145
8.1.3 hashCode()方法 146
8.1.4 clone()方法 147
8.1.5 finalize()方法 148
8.2 Math类 149
8.3 基本类型包装类 151
8.3.1 Character类 151
8.3.2 Boolean类 152
8.3.3 创建数值类对象 153
8.3.4 数值类的常量 154
8.3.5 自动装箱与自动拆箱 155
8.3.6 字符串转换为基本类型 156
8.3.7 BigInteger和BigDecimal类 156
8.4 日期-时间API 158
8.4.1 本地日期类LocalDate 158
8.4.2 本地时间类LocalTime 160
8.4.3 本地日期时间类LocalDateTime 161
8.4.4 Instant类、Duration类和Period类 162
8.4.5 其他常用类 164
8.4.6 日期时间解析和格式化 164
8.5 小结 166
编程练习 166
第9章 内部类、枚举和注解 168
9.1 内部类 168
9.1.1 成员内部类 169
9.1.2 局部内部类 170
9.1.3 匿名内部类 171
9.1.4 静态内部类 173
9.2 枚举类型 175
9.2.1 枚举类型的定义 175
9.2.2 枚举类型的方法 175
9.2.3 枚举在switch中的应用 176
9.2.4 枚举类型的构造方法 177
9.3 注解类型 178
9.3.1 注解概述 179
9.3.2 标准注解 179
9.3.3 定义注解类型 181
9.3.4 标准元注解 183
9.4 小结 184
编程练习 185
第10章 接口与Lambda表达式 188
10.1 接口 188
10.1.1 接口定义 188
10.1.2 接口的实现 189
10.1.3 接口的继承 190
10.1.4 接口类型的使用 192
10.1.5 常量 192
10.2 静态方法和默认方法 192
10.2.1 静态方法 193
10.2.2 默认方法 193
10.2.3 解决默认方法冲突 193
10.3 接口示例 195
10.3.1 Comparable接口 195
10.3.2 Comparator接口 197
10.4 Lambda表达式 198
10.4.1 Lambda表达式简介 198
10.4.2 函数式接口 199
10.4.3 Lambda表达式的语法 199
10.4.4 预定义的函数式接口 200
10.4.5 方法引用与构造方法引用 204
10.5 小结 206
编程练习 206
第11章 泛型与集合 209
11.1 泛型介绍 209
11.1.1 泛型类型 209
11.1.2 泛型方法 211
11.1.3 通配符(?)的使用 212
11.1.4 有界类型参数 213
11.1.5 类型擦除 214
11.2 集合框架 215
11.3 List接口及实现类 217
11.3.1 List的操作 217
11.3.2 ArrayList类 218
11.3.3 遍历集合元素 219
11.3.4 数组转换为List对象 222
11.3.5 Vector类和Stack类 222
11.4 Set接口及实现类 222
11.4.1 HashSet类 222
11.4.2 用Set对象实现集合运算 223
11.4.3 TreeSet类 223
11.4.4 对象顺序 224
11.5 Queue接口及实现类 225
11.5.1 Queue接口和Deque接口 226
11.5.2 ArrayDeque类和LinkedList类 227
11.5.3 集合转换 228
11.6 Map接口及实现类 229
11.6.1 Map接口 229
11.6.2 Map接口的实现类 230
11.7 Collections类 233
11.8 Stream API 235
11.8.1 流概述 236
11.8.2 创建与获得流 236
11.8.3 连接流和限制流 237
11.8.4 过滤流 238
11.8.5 流转换 239
11.8.6 流规约 241
11.8.7 收集结果 241
11.8.8 基本类型流 242
11.8.9 并行流 243
11.9 小结 244
编程练习 245
第12章 异常处理 248
12.1 异常与异常类 248
12.1.1 异常的概念 248
12.1.2 异常类 249
12.2 异常处理 251
12.2.1 异常的抛出与捕获 251
12.2.2 try-catch-finally语句 252
12.2.3 用catch捕获多个异常 254
12.2.4 声明方法抛出异常 255
12.2.5 用throw语句抛出异常 257
12.2.6 try-with-resources语句 258
12.3 自定义异常类 260
12.4 断言 262
12.4.1 使用断言 262
12.4.2 开启和关闭断言 263
12.4.3 何时使用断言 263
12.4.4 断言示例 264
12.5 小结 266
编程练习 266
第13章 输入输出 268
13.1 二进制I/O流 268
13.1.1 File类应用 269
13.1.2 文本I/O与二进制I/O 270
13.1.3 InputStream类和OutputStream类 270
13.1.4 常用二进制I/O流 271
13.1.5 标准输入输出流 276
13.2 文本I/O流 276
13.2.1 Reader类和Writer类 276
13.2.2 FileReader类和FileWriter类 277
13.2.3 BufferedReader类和BufferedWriter类 278
13.2.4 PrintWriter类 279
13.2.5 使用Scanner对象 280
13.3 对象序列化 281
13.3.1 对象序列化与对象流 281
13.3.2 向ObjectOutputStream中写入对象 282
13.3.3 从Obj ectInputStream中读出对象 282
13.3.4 序列化数组 284
13.4 NIO和NIO.2 286
13.4.1 文件系统和路径 286
13.4.2 FileSystem类 286
13.4.3 Path对象 287
13.5 Files类操作 288
13.5.1 创建和删除目录及文件 288
13.5.2 文件属性操作 289
13.5.3 文件和目录的复制与移动 291
13.5.4 获取目录的对象 292
13.5.5 小文件的读写 292
13.5.6 使用Files类创建流对象 294
13.6 小结 296
编程练习 297
第14章 JavaFX基础 299
14.1 JavaFX概述 299
14.1.1 Java GUI编程简史 299
14.1.2 JavaFX基本概念 300
14.1.3 添加JavaFX软件包 300
14.2 JavaFX程序基本结构 300
14.2.1 舞台和场景 301
14.2.2 场景图和节点 302
14.2.3 Application类生命周期方法 303
14.2.4 JavaFX程序启动 303
14.3 JavaFX属性与绑定 304
14.3.1 JavaFX属性 304
14.3.2 属性绑定 306
14.4 JavaFX界面布局 307
14.4.1 JavaFX坐标系 308
14.4.2 Pane面板 308
14.4.3 HBox面板 309
14.4.4 VBox面板 311
14.4.5 BorderPane面板 311
14.4.6 FlowPane面板 312
14.4.7 GridPane面板 313
14.4.8 StackPane面板 315
14.4.9 AnchorPane面板 316
14.4.10 使用CSS设置控件样式 317
14.5 Color和Font类 320
14.5.1 Color类 320
14.5.2 Font类 321
14.6 JavaFX形状 322
14.6.1 Line类 322
14.6.2 Rectangle类 325
14.6.3 Circle类 325
14.6.4 Ellipse类 326
14.6.5 Arc类 326
14.6.6 Polygon类 327
14.6.7 Text类 328
14.7 Image和ImageView类 330
14.8 特效实现 333
14.8.1 阴影效果 333
14.8.2 模糊效果 334
14.8.3 倒影效果 335
14.8.4 发光效果 335
14.9 小结 336
编程练习 337
第15章 事件处理与常用控件 340
15.1 事件处理 340
15.1.1 事件处理模型 340
15.1.2 事件类和事件类型 341
15.1.3 使用事件处理器 342
15.1.4 动作事件 344
15.1.5 鼠标事件 346
15.1.6 键盘事件 348
15.1.7 为属性添加监听器 350
15.2 常用控件 352
15.2.1 Label类 352
15.2.2 Button类 354
15.2.3 TextField类和PasswordField类 357
15.2.4 TextArea类 359
15.2.5 CheckBox类 361
15.2.6 RadioButton类 363
15.2.7 ComboBox类 366
15.2.8 Slider类 369
15.2.9 菜单设计 370
15.2.10 FileChooser类 376
15.3 音频和视频 380
15.4 动画 384
15.4.1 过渡动画 384
15.4.2 淡出效果 385
15.4.3 移动效果 387
15.4.4 缩放效果 388
15.4.5 旋转效果 389
15.4.6 时间轴动画 389
15.5 小结 392
编程练习 393
第16章 JDBC数据库编程 395
16.1 数据库系统简介 395
16.1.1 关系数据库简述 395
16.1.2 数据库语言SQL 396
16.2 MySQL数据库 396
16.2.1 MySQL的下载与安装 396
16.2.2 使用MySQL命令行工具 397
16.2.3 使用Navicat操作数据库 400
16.3 JDBC体系结构 400
16.3.1 JDBC访问数据库 401
16.3.2 JDBC API介绍 401
16.4 数据库访问步骤 402
16.4.1 加载驱动程序 402
16.4.2 建立连接对象 403
16.4.3 创建语句对象 405
16.4.4 ResultSet对象 405
16.4.5 关闭有关对象 407
16.5 访问MySQL数据库 407
16.5.1 创建数据库和表 407
16.5.2 访问MySQL数据库 408
16.6 使用PreparedStatement对象 409
16.6.1 创建PreparedStatement对象 409
16.6.2 带参数的SQL语句 410
16.7 DAO设计模式 411
16.8 可滚动和可更新的ResultSet 418
16.8.1 可滚动的ResultSet 418
16.8.2 可更新的ResultSet 418
16.9 小结 420
编程练习 420
第17章 并发编程基础 422
17.1 Java多线程简介 422
17.2 创建任务和线程 423
17.2.1 实现Runnable接口 424
17.2.2 继承Thread类 425
17.2.3 主线程 426
17.3 线程的状态与调度 427
17.3.1 线程的状态 427
17.3.2 线程的优先级和调度 427
17.3.3 控制线程的结束 429
17.4 线程同步与对象锁 430
17.4.1 线程冲突与原子操作 430
17.4.2 方法同步 431
17.4.3 块同步 432
17.5 线程协调 433
17.5.1 不正确的设计 433
17.5.2 监视器模型 435
17.6 并发工具 437
17.6.1 原子变量 437
17.6.2 Executor和ExecutorService 438
17.6.3 Callable和Future 439
17.6.4 使用Lock锁定对象 440
17.7 小结 442
编程练习 443
第18章 Java网络编程 445
18.1 网络概述 445
18.1.1 网络分层与协议 445
18.1.2 客户/服务器结构 446
18.1.3 IP地址和域名 446
18.1.4 端口号与套接字 447
18.2 Java套接字通信 448
18.2.1 套接字API 449
18.2.2 简单的客户和服务器程序 450
18.2.3 服务多个客户 452
18.3 数据报通信 455
18.3.1 数据报通信概述 455
18.3.2 DatagramSocket类和DatagramPacket类 456
18.3.3 简单的UDP通信例子 457
18.4 URL类编程 459
18.4.1 理解HTTP 459
18.4.2 URL和URL类 461
18.4.3 URLConnection类 464
18.5 小结 467
编程练习 467
参考文献 469