第1章 计算机与Java引论 1
1.1 计算机基础 1
1.1.1 硬件与内存 2
1.1.2 程序 3
1.1.3 编程语言、编译器和解释器 4
1.1.4 Java字节码 5
1.1.5 类加载器 7
1.2 浅尝Java 8
1.2.1 Java语言的历史 8
1.2.2 应用程序与小应用程序 9
1.2.3 第一个Java应用程序 9
1.2.4 编写、编译和运行Java程序 13
1.3 编程基础 14
1.3.1 面向对象编程 14
1.3.2 算法 17
1.3.3 测试与调试 18
1.3.4 软件复用 19
1.4 图形化编程补充读物 20
1.4.1 一个JavaFX应用程序样例 21
1.4.2 图形的尺寸和位置 23
1.4.3 绘制椭圆和圆 24
1.4.4 绘制弧 25
本章小结 27
练习 28
实践程序 29
编程项目 29
自测问题答案 30
第2章 基本的计算 33
2.1 变量和表达式 33
2.1.1 变量 33
2.1.2 数据类型 35
2.1.3 Java标识符 37
2.1.4 赋值语句 38
2.1.5 简单输入 40
2.1.6 简单屏幕输出 41
2.1.7 常量 42
2.1.8 具名常量 43
2.1.9 赋值兼容性 44
2.1.10 类型强制转换 45
2.1.11 算术运算 48
2.1.12 括号和优先级规则 50
2.1.13 特殊赋值操作符 51
2.1.14 案例研究:售货机找零 52
2.1.15 递增和递减操作符 56
2.1.16 更多有关递增和递减操作符的讨论 57
2.2 String类 57
2.2.1 字符串常量和变量 58
2.2.2 字符串连接 58
2.2.3 字符串方法 59
2.2.4 字符串处理 62
2.2.5 转义字符 63
2.2.6 Unicode字符集 64
2.3 键盘和屏幕I/O 65
2.3.1 屏幕输出 65
2.3.2 键盘输入 67
2.3.3 其他输入界定符(选修) 72
2.3.4 使用printf的格式化输出(选修) 73
2.4 文档和样式 75
2.4.1 有意义的变量名 75
2.4.2 注释 75
2.4.3 缩进 77
2.4.4 使用具名常量 78
2.5 图形化编程补充读物 80
2.5.1 将样式规则应用于JavaFX应用程序 80
2.5.2 介绍JOptionPane类 81
2.5.3 将输入作为其他数字类型读取 87
2.5.4 编程示例:具有窗口化I/O的找零程序 88
本章小结 90
练习 90
实践程序 92
编程项目 93
自测问题答案 94
第3章 流控制——分支 98
3.1 if-else语句 98
3.1.1 基本的if-else语句 98
3.1.2 布尔表达式 104
3.1.3 比较字符串 107
3.1.4 嵌套的if-else语句 111
3.1.5 多重分支的if-else语句 112
3.1.6 编程示例:给出字母等第 114
3.1.7 案例研究:体重指数 116
3.1.8 条件操作符(选修) 118
3.1.9 exi t方法 119
3.2 bool ean类型 120
3.2.1 布尔变量 120
3.2.2 优先级规则 121
3.2.3 布尔值的输入和输出 123
3.3 switch语句 124
3.4 图形化编程补充读物 130
3.4.1 指定绘图颜色 131
3.4.2 Yes或No问题的对话框 134
本章小结 135
练习 136
实践程序 137
编程项目 138
自测问题答案 140
第4章 流控制——循环 142
4.1 Java循环语句 142
4.1.1 while语句 143
4.1.2 do-while语句 146
4.1.3 编程示例:臭虫侵扰 149
4.1.4 编程示例:嵌套循环 154
4.1.5 for语句 155
4.1.6 在for语句中声明变量 160
4.1.7 在for语句中使用逗号(选修) 160
4.1.8 for-each语句 162
4.2 用循环编程 162
4.2.1 循环体 162
4.2.2 初始化语句 163
4.2.3 控制循环迭代次数 164
4.2.4 案例研究:使用布尔变量来终止循环 166
4.2.5 编程示例:消费热潮 168
4.2.6 循环中的break语句和continue语句(选修) 170
4.2.7 循环缺陷 172
4.2.8 跟踪变量 174
4.2.9 断言检查 175
4.3 图形化编程补充读物 177
4.3.1 编程示例:一个包含多张脸的JavaFX应用程序 177
4.3.2 绘制文本 181
本章小结 182
练习 182
实践程序 184
编程项目 185
自测问题答案 188
第5章 定义类和方法 193
5.1 类和方法定义 193
5.1.1 类文件和单独编译 195
5.1.2 编程示例:实现Dog类 195
5.1.3 实例变量 196
5.1.4 方法 198
5.1.5 定义void方法 200
5.1.6 定义有返回值的方法 201
5.1.7 编程示例:实现Species类的第一次尝试 205
5.1.8 关键词this 208
5.1.9 局部变量 209
5.1.10 块 211
5.1.11 基本类型参数 212
5.2 信息隐藏和封装 216
5.2.1 信息隐藏 217
5.2.2 前置条件和后置条件注释 217
5.2.3 publ ic和private修饰符 218
5.2.4 编程示例:为什么实例变量应该是私有的 220
5.2.5 编程示例:矩形类的另一种实现 221
5.2.6 访问器方法和修改器方法 223
5.2.7 编程示例:Purchase类 225
5.2.8 调用方法的方法 228
5.2.9 封装 233
5.2.10 使用javadoc自动归档 235
5.2.11 UML类图 235
5.3 对象和引用 236
5.3.1 类类型变量 237
5.3.2 定义类的equals方法 242
5.3.3 编程示例:Species类 244
5.3.4 布尔值方法 246
5.3.5 案例研究:单元测试 247
5.3.6 类类型参数 249
5.3.7 编程示例:类类型参数与基本类型参数 252
5.4 图形化编程补充读物 255
5.4.1 Graphi csContext类 255
5.4.2 编程示例:用辅助方法绘制多张脸 257
5.4.3 向JavaFX应用程序添加标签 260
本章小结 261
练习 262
实践程序 264
编程项目 265
自测问题答案 269
第6章 对象和方法进阶 274
6.1 构造器 275
6.1.1 定义构造器 275
6.1.2 在构造器中调用方法 281
6.1.3 在构造器中调用其他构造器(选修) 284
6.2 静态变量和静态方法 285
6.2.1 静态变量 285
6.2.2 静态方法 286
6.2.3 将main方法中的任务划分为子任务 291
6.2.4 在类中添加main方法 293
6.2.5 Math类 294
6.2.6 包装器类 296
6.3 编写方法 300
6.3.1 案例研究:格式化输出 300
6.3.2 分解 305
6.3.3 解决编译器问题 305
6.3.4 测试方法 307
6.4 重载 309
6.4.1 重载基础知识 309
6.4.2 重载和自动类型转换 311
6.4.3 重载和返回类型 313
6.4.4 编程示例:Money类 315
6.5 再探信息隐藏 320
6.6 作为类的枚举 323
6.7 包 325
6.7.1 包和导入机制 325
6.7.2 包名和目录 326
6.7.3 名字冲突 328
6.8 图形化编程补充读物 329
6.8.1 添加按钮 329
6.8.2 添加图标 330
本章小结 332
练习 332
实践程序 334
编程项目 335
自测问题答案 338
第7章 数组 343
7.1 数组基础 344
7.1.1 创建和访问数组 344
7.1.2 数组详情 346
7.1.3 实例变量length 349
7.1.4 进一步了解数组索引 351
7.1.5 初始化数组 354
7.2 类和方法中的数组 355
7.2.1 案例研究:销售报表 355
7.2.2 索引变量作为方法引元 362
7.2.3 整个数组作为方法引元 363
7.2.4 main方法的引元 365
7.2.5 数组赋值和判等 365
7.2.6 返回数组的方法 368
7.3 用数组和类编程 371
7.3.1 编程示例:专用列表类 371
7.3.2 部分填充的数组 377
7.4 数组排序和搜索 378
7.4.1 选择排序 378
7.4.2 其他排序算法 382
7.4.3 在数组中搜索 383
7.5 多维数组 383
7.5.1 多维数组基础知识 384
7.5.2 多维数组作为参数和返回值 386
7.5.3 多维数组的Java表示形式 388
7.5.4 参差数组(选修) 389
7.5.5 编程示例:工时记录 390
7.6 图形化编程补充读物 395
7.6.1 布局面板 395
7.6.2 文本域、文本框和组合布局 401
7.6.3 绘制多边形 404
本章小结 407
练习 407
实践程序 411
编程项目 412
自测问题答案 416
第8章 继承、多态和接口 422
8.1 继承基础 422
8.1.1 派生类 423
8.1.2 覆盖方法定义 426
8.1.3 覆盖与重载 427
8.1.4 final修饰符 427
8.1.5 基类的私有实例变量与私有方法 428
8.1.6 UML继承图 429
8.2 运用继承编程 431
8.2.1 派生类中的构造器 431
8.2.2 再论this方法 432
8.2.3 调用被覆盖的方法 433
8.2.4 编程示例:派生类的派生类 434
8.2.5 在Undergraduate中定义equals方法的另一种方式 437
8.2.6 类型兼容性 437
8.2.7 Obj ect类 441
8.2.8 更好的equals方法 442
8.3 多态 444
8.3.1 动态绑定和继承 444
8.3.2 动态绑定toString 447
8.4 接口与抽象类 448
8.4.1 类接口 448
8.4.2 Java接口 449
8.4.3 实现接口 450
8.4.4 作为类型的接口 452
8.4.5 扩展接口 454
8.4.6 案例研究:字符图形 455
8.4.7 案例研究:Comparable接口 464
8.4.8 抽象类 468
8.5 图形化编程补充读物 469
8.5.1 事件驱动编程 470
8.5.2 在单独的类中处理事件 471
8.5.3 在主GUI应用类中处理事件 473
8.5.4 在匿名内部类中处理事件 475
8.5.5 编程示例:添加数字 477
本章小结 479
练习 479
实践程序 480
编程项目 481
自测问题答案 483
第9章 异常处理 486
9.1 基本的异常处理 486
9.1.1 Java中的异常 487
9.1.2 预定义的异常类 495
9.2 定义自己的异常类 496
9.3 更多有关异常类的知识 503
9.3.1 声明异常(传递责任) 504
9.3.2 异常的种类 506
9.3.3 错误 507
9.3.4 多个抛出和捕获 508
9.3.5 finally块 513
9.3.6 重新抛出异常(选修) 513
9.3.7 案例研究:面向命令行的计算器 514
9.4 图形化编程补充读物 523
9.4.1 更多的用户界面控件和形状 523
9.4.2 图像和形状 526
9.4.3 处理鼠标事件 527
9.4.4 Timeline类 530
本章小结 532
练习 533
实践程序 534
编程项目 536
自测问题答案 538
第10章 流、文件I/O和网络 542
10.1 流和文件I/O概览 542
10.1.1 流的概念 543
10.1.2 为什么用文件来进行输入/输出 543
10.1.3 文本文件和二进制文件 543
10.2 文本文件I/O 545
10.2.1 创建文本文件 545
10.2.2 在文本文件中追加内容 550
10.2.3 从文本文件中读取内容 551
10.3 适用于所有文件的技术 553
10.3.1 File类 553
10.3.2 编程示例:从键盘读取文件名 554
10.3.3 使用路径名 555
10.3.4 File类的方法 556
10.3.5 定义方法来打开流 558
10.3.6 案例研究:处理由逗号分隔的数值文件 559
10.4 基本的二进制文件I/O 561
10.4.1 创建二进制文件 561
10.4.2 向二进制文件中写入基本类型值 563
10.4.3 向二进制文件中写入字符串 565
10.4.4 有关writeUTF的一些细节 566
10.4.5 从二进制文件中读取内容 566
10.4.6 EOFException类 570
10.4.7 编程示例:处理二进制数据文件 572
10.5 包含对象和数组的二进制文件I/O 576
10.5.1 包含类的对象的二进制文件I/O 576
10.5.2 序列化的一些细节 579
10.5.3 二进制文件中的数组对象 580
10.6 使用流的网络通信 582
10.7 图形化编程补充读物 586
本章小结 591
练习 591
实践程序 593
编程项目 594
自测问题答案 597
第11章 递归 601
11.1 递归基础 601
11.1.1 案例研究:数字位显示成单词 603
11.1.2 递归如何工作 607
11.1.3 无限递归 610
11.1.4 递归方法与迭代方法 612
11.1.5 有返回值的递归方法 614
11.2 运用递归编程 617
11.2.1 编程示例:要求用户输入必须正确 617
11.2.2 案例研究:二分搜索 618
11.2.3 编程示例:归并排序——一种递归排序方法 624
11.3 图形化编程补充读物 627
本章小结 630
练习 630
实践程序 632
编程项目 632
自测问题答案 636
第12章 动态数据结构和泛型 639
12.1 基于数组的数据结构 640
12.1.1 ArrayList类 640
12.1.2 创建ArrayList的实例 641
12.1.3 使用ArrayList的方法 642
12.1.4 编程示例:待办事项列表 645
12.1.5 参数化类和泛化数据类型 647
12.2 Java集合框架 648
12.2.1 Collection接口 648
12.2.2 HashSet类 649
12.2.3 Map接口 650
12.2.4 HashMap类 650
12.3 链式数据结构 653
12.3.1 Li nkedLi st类 653
12.3.2 链表 653
12.3.3 实现链表的操作 655
12.3.4 隐私泄露 660
12.3.5 内部类 661
12.3.6 节点内部类 662
12.3.7 迭代器 662
12.3.8 Java的Iterator接口 670
12.3.9 链表的异常处理 671
12.3.10 链表的变体 673
12.3.11 其他链式数据结构 675
12.4 泛型 675
12.4.1 基础知识 675
12.4.2 编程示例:一个泛化的链表 678
12.5 图形化编程补充读物 682
12.5.1 用场景构建器构建JavaFX应用程序 682
12.5.2 何去何从 686
本章小结 686
练习 687
实践程序 689
编程项目 690
自测问题答案 693
附录A 获取Java 696
附录B 运行Applet 697
附录C protected和包修饰符 698
附录D DecimalFormat类 699
附录E j avadoc 702
附录F C++和Java之间的区别 704
附录G Unicode字符编码 707
附录H Java 8函数式编程简介 708
附录I Iterator接口 712
附录J 克隆 713
附录K Java保留关键词 716