第一部分 对象和类的编程 3
第1章 简介 3
1.1 从这里开始 3
1.2 Java简史 3
目录 3
1.3 Java生逢其时 5
1.4 Java是什么 5
1.5 Java2平台 7
1.7 Java的体系结构是平台无关的 8
1.6 Java的应用程序和小应用程序 8
1.8 Java不是玩笑 9
1.9 小结 9
第2章 程序设计基础 10
2.1 引言 10
2.2 语句的顺序 11
2.3 迭代 13
2.3.1 Java的while语句和复合语句 14
2.4 选择语句 15
2.3.2 Java的do语句 15
2.4.1 Java的if语句 16
2.4.2 Java的break语句 17
2.5 变量 18
2.5.1 变量的命名 18
2.5.2 赋值 19
2.5.3 变量的类型 19
2.5.4 初始化变量 20
2.5.6 变量的比较 21
2.5.5 变量和类型检查 21
2.6 编写一个简单的Java程序(程序1) 22
2.7 使用注释 24
2.8 输出语句 25
2.9 输入语句 26
2.10 交互式程序 27
2.10.1 程序2——基本的输入输出 27
2.10.2 程序3——使用字符串 28
2.10.3 程序4——使用表达式 30
2.12 复习题 34
2.11 小结 34
2.13 练习题 35
2.14 挑战题 36
第3章 向程序中增加结构 37
3.1 引言 37
3.2 抽象和封装 38
3.3 方法 38
3.3.1 从方法返回值 40
3.3.3 方法的参数 41
3.3.2 void方法和类型 41
3.3.4 多个方法参数 42
3.3.5 递归 43
3.4 如何在程序中使用方法 44
3.4.1 例程:乘法表程序 44
3.4.2 例程:回文程序 46
3.5 过程分解 50
3.6 封装 51
3.6.1 作用域与生存期 52
3.6.2 命名与作用域 53
3.7.1 递增,递减和赋值运算符 54
3.7 更多的运算符 54
3.7.2 算术表达式和类型 55
3.8 更多的控制语句 55
3.8.1 for循环语句 55
3.8.2 例程:字符三角形程序 56
3.8.3 例程:字符矩形(CharacterRectangle)程序 57
3.8.4 switch语句 59
3.8.5 例程:二进制转十进制程序 60
3.10 复习题 64
3.9 小结 64
3.11 练习题 65
3.12 挑战题 66
第4章 画图 68
4.1 引言 68
4.2 绘图 68
4.2.1 画一条线段 70
4.2.2 画矩形、正方形、椭圆和圆 72
4.2.4 创建新的图形 73
4.2.3 其他的标准图形 73
4.3 绘图的属性 74
4.3.1 颜色 74
4.3.2 线宽 75
4.3.3 图形的填充 75
4.4 绘制文本 76
4.5 程序例程 77
4.5.1 例程:棋盘程序 77
4.5.2 例程:螺旋线程序 79
4.5.3 曲线图 81
4.6 小结 83
4.7 复习题 84
4.8 练习题 84
4.9 挑战题 85
第5章 容器类介绍 86
5.1 引言 86
5.2 数组 86
5.2.1 声明数组 87
5.2.2 数组索引 88
5.2.3 数组用作参数和返回值 89
5.2.4 例程:求平均数程序 90
5.2.5 Array类 91
5.2.6 多维数组 91
5.2.7 数组初始化表达式 93
5.2.8 AddUpColumns程序 93
5.2.9 字符和字节数组 94
5.2.10 main方法的参数 95
5.3 容器(Container)类 96
5.3.1 ArrayList类 97
5.3.2 把数值存入容器 98
5.3.3 例程:AverageUsingArrayList 99
5.4 数据文件 100
5.4.1 基于文本的数据 100
5.4.2 用FileInput类读取数据 100
5.4.3 用FileOutput类写数据 102
5.4.4 例程:显示文本文件 103
5.4.5 例程:文件复制 104
5.4.6 例程:单词统计 107
5.4.7 例程:图形文件 108
5.5 小结 109
5.6 复习题 110
5.7 练习题 111
5.8 挑战题 111
第6章 类和对象程序设计 112
6.1 引言 112
6.2 创建新的数据类型 112
6.2.1 栈对象 113
6.2.2 Stack类 114
6.2.3 Java栈类——第一个版本 115
6.3 类与类型的关系 116
6. 4方法的命名和作用域 117
6.5 对象初始化 119
6.5.1 实例变量的直接初始化 120
6.5.2 构造函数(Constructor) 120
6.5.3 实例初始化块 121
6.6 对象引用 122
6.5.4 多种方法如何选择 122
6.6.1 删除旧的对象 123
6.6.2 对象与基本类型 124
6.6.3 对象与方法参数 124
6.6.4 null 126
6.6.5 this操作符 126
6.6.6 静态变量和静态方法 127
6.7 类的几个例子 129
6.7.1 例程:Name类 129
6.7.2 例程:Matrix类 130
6.7.3 例程:Graph类 132
6.8 用类和对象进行程序设计 136
6.8.1 对象用来提供服务 137
6.8.2 类与封装 137
6.9 小结 138
6.10 复习题 138
6.11 练习题 139
6.12 挑战题 139
7.1 引言 140
7.2 关联 140
第7章 类关系详述 140
7.2.1 对象所有权(OwnerShip) 141
7.2.2 有效地使用关联 141
7.3 继承性 141
7.3.1 使用继承 142
7.3.2 protected 143
7.3.3 继承和构造函数 144
7.3.4 超类 144
7.3.5 IntQueue与IntDequeue的实现 145
7.3.6 隐藏名称 147
7.3.7 静态变量和继承 147
7.4 关联与继承之间的抉择 148
7.5 继承与类型 149
7.6 Object类 151
7.6.1 容器类和对象 151
7.6.2 Class类和Instanceof运算符 154
7.7 方法的覆盖 155
7.8 继承的层次体系 157
7.9 接口 158
7.10 对象的复制和比较 160
7.11 嵌入类 161
7.12 包 161
7.13 例程:再次研究Matrix类 163
7.14 可复用性与组件 168
7.15 小结 169
7.17 练习题 170
7.18 挑战题 170
7.16 复习题 170
第8章 异常和线程 171
8.1 异常 171
8.1.1 错误的种类 171
8.1.2 捕获异常 172
8.1.3 抛出异常 173
8.1.4 finally块 174
8.1.5 使用异常的重要性 175
8.1.6 例程:Queue类中使用异常 175
8.2 线程——可以一次做多件事情 177
8.2.1 使用线程 178
8.2.3 线程调度 179
8.2.2 线程同步 179
8.2.4 一个线程的例子 180
8.3 小结 183
8.4 复习题 183
8.5 练习题 184
8.6 挑战题 184
9.1 引言 185
9.2 面向对象的软件工程 185
第9章 程序设计过程 185
9.3 为什么要用面向对象方法 186
9.3.1 一个比喻——路由计划 186
9.3.2 问题域概念 187
9.4 编写程序 187
9.4.1 概览 187
9.4.2 收集用户需求 189
9.4.3 分析 190
9.4.4 设计、实现和测试 194
9.4.6 程序测试与交付 195
9.4.5 复审和迭代 195
9.4.7 调试 196
9.5 维护 197
9.6 实践和经验 198
9.7 小结和问题 198
9.8 复习题 199
9.9 练习题 199
9.10 挑战题 200
10.2 需求和任务场景 201
10.1 引言 201
第10章 一个程序设计实例 201
10.2.1 场景1——开一个新账户 202
10.2.2 场景2——结清账户 202
10.2.3 场景3——查询账户余额 203
10.2.4 场景4——向账户中存款 203
10.2.5 场景5——从账户中取款 203
10.2.6 场景结果 203
10.3 面向对象分析 204
10.3.1 寻找合适的类 204
10.3.2 修正类 206
10.3.3 回顾类的动态行为 208
10.3.4 使用CRC 209
10.4 程序设计——第一次迭代 209
10.4.1 Bank类 209
10.4.2 Account类 210
10.4.3 Account的子类 211
10.4.4 Customer类 211
10.4.5 第一次回顾 211
10.5.1 Bank类的第二次设计 212
10.5 程序设计——第二次迭代 212
10.5.2 Account类第二次设计 214
10.6 main方法 214
10.7 测试 215
10.8 设计中不尽人意的地方 215
10.9 小结 216
10.10 复习题 216
10.11 练习题 217
10.12 挑战题 217
11.1.1 可视化组件和Swing库 218
第11章 用户界面设计 218
11.1 引言 218
11.1.2 Swing和AWT 219
11.2 核心的GUI概念 219
11.2.1 例程:HelloGoodbye 219
11.2.2 创建窗口 220
11.2.3 创建Swing GUI组件 221
11.2.4 容器和布局(Layout)管理器 222
11.2.5 布局管理器优点 223
11.2.6 不同的布局管理器 224
11.2.7 窗口显示 225
11.2.8 事件 225
11.2.9 运行和终止HelloGoodbye程序 227
11.2.10 HelloGoodbye程序的总结 227
11.3 使用GUI作为文本输入 228
11.4 实例:一个非常简单的文本编辑器 230
11.5 菜单 234
11.6 绘图 236
11.8 复习题 237
11.7 小结 237
11.9 练习题 238
11.10 挑战题 238
第二部分 建立用户类库 243
第12章 建立类库 243
12.1 引言 243
12.2 介绍一个包的体系结构 245
12.3 避免假定 246
12.4 包的名称 247
12.5 如何迭代 248
12.6 进行假设 251
12.7 次序关系 254
12.7.1 第一种实现方式 256
12.7.2 另一种替代的实现方法 258
12.7.3 第三次实现 261
12.7.4 什么样的设计是最好的 264
12.8 最重要的问题 265
12.9 更多的异常 268
12.10 文档和风格 268
12.12 复习题 269
12.11 小结 269
12.13 练习题 270
12.14 挑战题 270
第13章 序列、Array和List 271
13.1 引言 271
13.2 Sequence 272
13.3 AbstractSequence 276
13.4 Array类 278
13.5 链表 286
13.6 使用单链表 287
13.7 使用双向链表 296
13.8 如何选择使用 305
13.9 小结 306
13.10 复习题 306
13.11 练习题 307
13.12 挑战题 307
第14章 队列和栈 308
14.1 引言 308
14.2 通过一致性来使用抽象 309
14.2.1 基于序列的实现 310
14.2.2 循环数组的实现 315
14.2.3 链表的实现 319
14.2.4 使用队列的例子 319
14.3 通过继承来使用抽象 321
14.4 通过关联来使用抽象 321
14.5 类型安全的队列 326
14.6 双端队列 328
14.7 关于设计方法的思考 333
14.8 栈 334
14.9 使用栈的例子 335
14.10 小结 337
14.11 复习题 337
14.12 练习题 337
14.13 挑战题 337
第15章 树 338
15.1 引言 338
15.2 树的操作 340
15.3 有序二叉树 353
15.4 其他二叉树 360
15.5 小结 361
15.6 复习题 361
15.7 练习题 362
15.8 挑战题 362
第16章 堆结构 363
16.1 引言 363
16.2 插入数据 365
16.3 删除数据 366
16.4 类的声明 367
16.5 使用堆的例子 375
16.6 堆的其他方面 376
16.7 小结 376
16.8 复习题 377
16.9 练习题 377
第17章 优先级队列 378
17.1 引言 378
17.2 基于队列数组的优先级队列 378
17.3 基于单链表的优先级队列 383
17.4 基于堆的优先级队列 388
17.5 实现中的一些问题 388
17.6 小结 389
17.7 复习题 389
17.8 练习题 389
第18章 集合、关系和映射 391
18.1 引言 391
18.2 序言:数学术语 391
18.3 集合 392
18.4 关系 398
18.5 映射 404
18.6 映射、过程和数组 407
18.7 哈希算法 409
18.8 开放哈希表 411
18.9 链式哈希表 412
18.10 利用哈希表构造集合、关系和映射 419
18.12 复习题 424
18.13 练习题 424
18.11 小结 424
18.14 挑战题 425
第19章 查找 426
19.1 引言 426
19.2 一些限制 426
19.3 线性查找 427
19.4 对数查找 429
19.5 Collection和JGL中的查找 432
19.6 二叉查找树 433
19.8 小结 434
19.7 利用Hash表进行查找 434
19.9 复习题 435
19.10 练习题 435
19.11 挑战题 435
第20章 排序——比较的方法 436
20.1 引言 436
20.2 比较排序 436
20.3 选择排序 437
20.4 冒泡排序 439
20.5 插入排序 440
20.6 快速排序 443
20.7 二叉树排序 448
20.8 堆排序 449
20.9 归并排序 450
20.10 在JGL和Collection中的排序 453
20.11 小结 454
20.12 复习题 454
20.13 练习题 454
20.14 挑战题 455
21.2 分配式排序 456
第21章 排序——分配的方法 456
21.1 引言 456
21.3 统计排序 457
21.4 基数排序 458
21.5 小结 461
21.6 复习题 461
21.7 练习题 461
21.8 挑战题 461
22.1 引言 462
第22章 排序——外部排序 462
22.2 一些体系结构方面的问题 463
22.3 多路平衡归并排序 466
22.4 多相归并排序 471
22.5 小结 477
22.6 复习题 477
22.7 练习题 477
22.8 挑战题 478
23.1 引言 481
第23章 案例研究概述 481
第三部分 程序开发案例 481
23.2 案例研究 482
23.3 案例研究的介绍 483
第24章 邮件合并系统 484
24.1 引言 484
24.2 对问题的理解 485
24.2.1 初始分析 485
24.2.2 初始的设计 486
24.2.3 对象 488
24.2.4 更详细的设计 489
24.2.5 文件和流 490
24.3 命令行版本的实现 491
24.4 图形用户界面版本的实现 492
24.4.1 简介 492
24.4.2 用户界面 493
24.4.3 可移植性问题 497
24.4.4 源代码 498
24.4.5 测试 518
24.5 小结 520
24.6 复习题 520
24.7 练习题 520
24.8 挑战题 520
第25章 行人交叉路口模拟 521
25.1 引言 521
25.2 最初的问题定义 521
25.3.1 交通灯 522
25.3.2 车辆指挥灯 522
25.3 最初的思考 522
25.3.3 行人指挥灯 523
25.4 首轮设计 524
25.5 第二轮设计 534
25.6 第三轮设计 546
25.7 第四轮是第三轮的回顾 547
25.8 第五轮设计 556
25.9 小结 556
25.10 复习题 556
25.12 挑战题 557
25.11 练习题 557
第26章 蚁群的模拟 558
26.1 引言 558
26.2 模拟模型 559
26.3 程序说明 560
26.4 首次分析和设计 561
26.5 第二次设计 562
26.6 抽象类框架 563
26.6.1 Grid类 563
26.6.2 Factory接口 566
26.6.3 Patch类 567
26.6.4 Turtle类 569
26.6.5 Display类 570
26.6.6 Control类 571
26.6.7 MainLoop类 572
26.6.8 RandomGen类 573
26.6.9 最后完成的框架 573
26.7 具体的类 574
26.7.1 AntPath类 575
26.7.2 Ant类 575
26.7.3 AntWotld类 577
26.7.4 AntFactory类 578
26.7.5 AntApp类——应用程序类 579
26.7.6 AntDisplay类 581
26.8 AntStatus类 582
26.9 最终完成的程序 584
26.11 复习题 585
26.10 小结 585
26.12 练习题 586
26.13 挑战题 586
第四部分 Java语言参考 589
第27章 Java语言参考 589
27.1 简介 589
27.2 语法和语义 589
27.3 基本描述 590
27.4 示例程序 590
27.5 小结 591
第28章 变量、类型和表达式 592
28.1 引言 592
28.2 注释 592
28.3 标识符 596
28.4 Unicode转义符 597
28.5 字面量 597
28.6 类型(Types) 599
28.6.1 基本类型 599
28.6.2 引用类型 600
28.7 作用域 601
28.6.3 自动类型转换 601
28.8 变量 603
28.8.1 变量声明 603
28.8.2 变量初始化 604
28.8.3 数组变量 606
28.9 表达式和运算符 609
28.9.1 基本表达式 609
28.9.2 运算符 611
28.12 复习题 620
28.10 源文件 620
28.11 小结 620
28.13 练习题 621
第29章 程序流程控制 622
29.1 引言 622
29.2 选择 622
29.2.1 If语句 622
29.2.2 switch语句 626
29.3.1 While循环语句 630
29.3 迭代 630
29.3.2 do循环语句 632
29.3.3 for循环语句 634
29.3.4 循环行为检验 637
29.4 跳转语句 638
29.4.1 break语句 638
29.4.2 Continue语句 640
29.4.3 return语句 642
29.5 递归 643
29.8 练习题 645
29.6 小结 645
29.7 复习题 645
第30章 类和包 646
30.1 引言 646
30.2 类 646
30.2.1 类声明 646
30.2.2 public、private和protected 648
30.2.3 实例变量 649
30.2.4 静态变量或类变量 650
30.2.5 方法 651
30.2.6 静态方法或类方法 654
30.2.7 构造函数 656
30.2.8 静态初始化器 658
30.2.9 关键字this 660
30.3 顶层类 661
30.4 嵌套类 662
30.4.1 嵌套顶层类 662
30.4.2 成员类 664
30.4.3 局部类 667
30.4.4 匿名类 670
30.5 包 672
30.6 小结 674
30.7 复习题 674
30.8 练习题 675
第31章 继承和接口 676
31.1 引言 676
31.2 继承 676
31.2.1 继承的概念 676
31.2.2 关键字Private和Protected与继承性 678
31.2.4 方法覆盖(Overriding) 680
31.2.3 Final类 680
31.2.5 Final方法 682
31.2.6 方法调用表达式 683
31.2.7 修改后的成员类名字查找 688
31.2.8 构造函数与继承 690
31.2.9 超类(Super)和隐含命名 691
31.2.10 抽象(Abstract)类 693
31.2.11 抽象(Abstract)方法 694
31.2.12 从类对象继承的方法 695
31.3 接口 699
31.3.1 接口声明 700
31.3.2 实现 703
31.4 小结 705
31.5 复习题 705
31.6 练习题 705
第32章 异常处理 706
32.1 引言 706
32.1.1 异常类 706
32.1.2 Try、Catch与Finally 708
32.1.4 抛出(Throws)异常声明 712
32.1.3 异常的传递 712
32.1.5 关键字throw 714
32.2 小结 716
32.3 复习题 716
第33章 线程与并发 717
33.1 引言 717
33.2 Thread类 718
33.3 同步方法 722
33.4 同步语句 726
33.5 小结 727
33.6 复习题 727
33.7 练习题 727
第五部分 附录 731
附录A 术语表 731
B.2 基本概念 736
B.3 CRC卡片 736
附录B CRC分析设计方法 736
B.1 引言 736
B.4 CRC方法过程 737
B.5 一些问题 738
B.6 文档 738
B.7 设计 738
附录C 在线文档 740
附录D Java关键字 743
E.1 从这里开始 744
E.2 编译和运行Java程序 744
附录E Java程序编写过程 744
E.3 使用Keyboardlnput、Filelnput和FileOutput类 745
E.4 使用DrawFrame和Drawpanel类 745
E.5 使用CLASSPATH 745
附录F Keyboardlnput类 747
附录G DrawFrame类 750
附录H DrawPanel类 752
附录I FileInput类 754
附录J FileOutput类 758
附录K ADS库 761
附录L 参考资料 763