1.1 计算机与程序 1
1.2 程序与模型 1
第1章 进入Java 1
1.3.3 信息 3
1.3.2 行为 3
1.3 对象、类和消息 3
1.3.1 对象 3
1.3.6 预定义的对象和类 4
1.3.5 类 4
1.3.4 Java程序 4
1.5 发送一个消息到System.out对象 5
1.4 第一个对象 PrintStream对象 5
1.6 一个Java程序 7
1.7.3 关键字 8
1.7.2 标识符 8
1.7 Java小插曲 标识符、语句顺序、格式和注释 8
1.7.1 Java规则 8
1.7.7 包围的注释 9
1.7.6 注释 9
1.7.4 Java的语句顺序 9
1.7.5 程序格式和注释 9
1.8.1 可访问性 10
1.8 例行步骤 10
1.7.8 行注释 10
1.8.3 执行 11
1.8.2 准备执行:翻译 11
1.9 时刻 12
1.10 本章小结 13
1.11 关键术语 14
1.13 练习题 15
1.12 复习题 15
1.14 GUI补充 网页、HTML和小应用程序概述 16
2.2 使用PrintStream对象 22
2.1 简介 22
第2章 发送消息和执行操作 22
2.3 Java小插曲 引用、方法和消息 23
2.4 String类 24
2.3.3 再论标识符 24
2.3.1 方法的重载 24
2.3.2 消息发出后 24
2.6 引用变量 27
2.5 方法、参数以及返回值 27
2.7.1 变量 29
2.7 Java小插曲 变量和赋值 29
2.7.3 赋值语句不是等式 30
2.7.2 赋值 30
2.7.5 引用变量和对象 31
2.7.4 初始化 31
2.7.7 变量是独立的 32
2.7.6 微妙而重要的一点:变量的两种角色 32
2.7.10 变化 33
2.7.9 语句 33
2.7.8 常量不是变量 33
2.8 命令式程序设计 完成任务 34
2.8.1 整数类型和算术运算 35
2.8.2 基本的算术运算符 36
2.8.3 优先级 37
2.8.4 复合赋值运算符 38
2.8.5 自增/自减 39
2.8.6 操作的顺序 40
2.9 使用String方法 41
2.9.1 空串 44
2.10 命令式程序设计 简单的条件 47
2.9.2 灵活且实用的对象 47
2.10.1 if语句 48
2.10.2 条件 49
2.11 本章小结 51
2.12 关键术语 52
2.14 练习题 53
2.13 复习题 53
2.15 GUI补充内容 图形的绘制和定位 56
3.2.1 使用构造方法创建对象 64
3.2 创建对象 64
第3章 应用对象和基本类型 64
3.1 简介 64
3.3.2 对象来自于何处 65
3.3.1 重载的和默认的构造方法 65
3.2.2 引用变量的重要作用 65
3.3 Java小插曲 对象的来源 65
3.3.4 级联 66
3.3.3 不可变对象 66
3.3.5 组合 67
3.4.1 boolean值和变量 68
3.4 命令式程序设计 布尔类型 68
3.5 对象的应用 69
3.4.2 boolean表达式 69
3.6 日期和日历 70
3.7.2 混合类型算术运算 72
3.7.1 为什么我们还要用int 72
3.7 命令式程序设计 其他的整数类型 72
3.8 BigInteger 73
3.7.3 其他的整数类型:short和byte 73
3.10 输入简介 75
3.9 Java小插曲 包和import语句 75
3.10.1 文件输入概要:从磁盘到程序 76
3.11.1 类File:获取硬盘文件信息 77
3.11 文件输入过程 77
3.10.2 从字节到字符:Unicode的例子 77
3.10.3 从char到String:获得文本的行 77
3.11.3 类InputStreamReader:将byte转化成char 79
3.11.2 类FileInputStream:从磁盘文件中读取字节 79
3.11.5 结果:为输入打开一个文件 80
3.11.4 类BufferedReader:从char流到字符串 80
3.12 键盘输入 82
3.13 文件输出 84
3.14.1 网络的概念 85
3.14 网络计算简介 85
3.14.2 网络输入 86
3.15.4 寻找类String 88
3.15.3 文档页的层次 88
3.15 Java小插曲 Java文档 88
3.15.1 Java应用程序接口 88
3.15.2 API文档的内容 88
3.16 本章小结 90
3.18 复习题 91
3.17 关键术语 91
3.19 练习题 92
3.20 GUI补充材料 初识动画 94
4.2 类的定义 方法 98
4.1 简介 98
第4章 定义类 98
4.2.1 使用Logger类 101
4.3 类的定义 实例变量 102
4.2.2 基本的类的定义 102
4.3.1 使用Stopwatch类 105
4.4 关于方法的更多内容 返回值 106
4.3.2 使用实例变量 106
4.4.1 使用Counter类 108
4.4.2 返回值与输出:再谈Stopwatch 109
4.5 命令式编程 寻找最小值 110
4.4.3 使用返回值 110
4.6.2 return语句 112
4.6.1 声明顺序 112
4.6 Java小插曲 变量、声明以及return语句 112
4.6.3 变量及其生存期 113
4.7 关于方法的更多内容 形式参数 114
4.7.1 使用类Minimizer 116
4.8 状态和行为 117
4.7.2 使用参数 117
4.9.1 标识方法 118
4.9 类的定义 综合起来 118
4.9.2 确定状态 119
4.9.3 实现test() 120
4.9.4 实现其他方法 121
4.9.5 使用类TypingTutor 123
4.10.2 访问控制:public与private 125
4.10.1 形参 125
4.9.6 方法模式:get和set 125
4.10 Java小插曲 声明、访问和对象 125
4.10.4 对象及其生存期 126
4.10.3 对象访问自己的方法 126
4.12 关键术语 127
4.11 本章小结 127
4.14 练习题 128
4.13 复习题 128
4.15 GUI补充材料 一个简单的动画 130
5.1.1 TypingTutor类 137
5.1 定制新对象 构造方法 137
第5章 高级类定义 137
5.1.2 定义重载构造方法 139
5.2.2 构造方法和初始化 143
5.2.1 默认构造方法 143
5.2 Java小插曲 构造方法、初始化以及重载 143
5.3.1 确定行为 144
5.3 示例:Name类 144
5.2.3 重载 144
5.3.2 接口 145
5.3.3 Name类的实现 146
5.3.4 完整的Name类 149
5.3.6 输出对象:修改Name类 150
5.3.5 使用Name类 150
5.4 提供类的行为 152
5.5.1 回顾我们的第一个程序 155
5.5 Java小插曲 静态方法 155
5.5.2 预定义的静态方法 156
5.5.3 读取基本类型值 157
5.6 跟踪类范围内的信息 静态变量 158
5.7 定义常量:final 160
5.8.1 “句点”符号 161
5.8 Java小插曲 使用对象 161
5.8.3 关键字this 162
5.8.2 再谈访问控制 162
5.8.4 将对象表示为一个字符串 163
5.8.5 比较两个对象 164
5.9.2 在read()方法中使用null 167
5.9.1 Null值 167
5.9 重温输入方法 测试输入的结束 167
5.12 复习题 168
5.11 关键术语 168
5.10 本章小结 168
5.14 GUI补充材料 创建控制和交互 169
5.13 练习题 169
6.2.1 模拟度量的数值 176
6.2 一个进行米制转换的类 176
第6章 方法内核:命令式程序设计 176
6.1 概述 176
6.2.2 基本数据类型float和 double 177
6.2.3 实现convertFeetToMeters()方法 178
6.2.4 方法printtFeetToMeters Table():迭代 179
6.2.5 使用for来实现一个计数循环 180
6.3.2 float和double封装类 181
6.3.1 float和double的显示 181
6.3 Java小插曲 float、double以及for语句 181
6.3.5 什么时候使用float和double 182
6.3.4 使用float double 182
6.3.3 float double的字面值 182
6.4 π值的逼近 183
6.3.7 for语句的执行 183
6.3.6 混合类型算术 183
6.4.2 编写方法main() 185
6.4.1 模拟镖靶 185
6.4.3 实现Toss类 190
6.5.1 Car类 193
6.5 嵌套和复合的条件语句 193
6.4.4 使用MonteCarloPi类 193
6.5.2 实现chooseWarranty():多分支检测 194
6.5.3 复合条件 195
6.6.2 嵌套的if和悬空的else 196
6.6.1 逻辑运算符 196
6.6 Java小插曲 逻辑运算符和条件语句 196
6.6.3 条件语句格式之间的关系 197
6.6.4 Switch语句 198
6.7 本章小结 199
6.10 练习题 200
6.9 复习题 200
6.8 关键术语 200
6.11 GUI补充材料 关于交互的更多内容 202
7.3 重温Counter类 207
7.2 类设计概述 207
第7章 类设计 207
7.1 概述 207
7.4.2 一个示例 209
7.4.1 问题的描述 209
7.4 自动取款机 209
7.4.5 定义ATM类的接口 210
7.4.4 确定ATM类所需要的行为 210
7.4.3 寻找首要对象 210
7.4.7 实现ATM类的方法 211
7.4.6 定义ATM类的实例变量 211
7.4.9 定义Account类实例变量 212
7.4.8 确定Account类的行为和定义接口 212
7.4.11 确定并实现Account类的“辅助”方法 213
7.4.10 实现Account类的方法 213
7.4.12 完整地实现Account类 215
7.4.13 使用这些类 216
7.4.14 讨论 217
7.5.4 确定所求的行为动作—类RepairPerson 218
7.5.3 寻找首要对象 218
7.5 调度修理工人的例子 218
7.5.1 问题的描述 218
7.5.2 情景举例 218
7.5.5 定义类RepairPerson的接口 219
7.5.7 实现类RepairPerson的方法 220
7.5.6 定义类RepairPerson的实例变量 220
7.5.9 定义类Location的接口 222
7.5.8 确定类Location所需的行为动作 222
7.5.11 实现类Location的方法 223
7.5.10 定义类Location的实例变量 223
7.5.12 使用这些类 225
7.6 本章小结 226
7.9 练习题 227
7.8 复习题 227
7.7 关键术语 227
7.10 GUI补充材料 多个控件:布局以及事件处理 228
8.1 概述 245
第8章 验证对象的行为 245
8.2.1 编译时的语法和语义错误 246
8.2 错误的分类 246
8.2.3 逻辑错误 248
8.2.2 运行时错误 248
8.4 测试驱动 249
8.3 Java小插曲 Java的断言机制 249
8.5 自动测试 251
8.6.2 所有的行为都必须被测试 254
8.6.1 一个好的、完整的测试应该由什么组成 254
8.6 测试什么以及如何测试 254
8.6.4 确保每条语句至少被执行了一次 255
8.6.3 试着寻找逻辑测试顺序 255
8.6.6 寻找并测试特例 257
8.6.7 不要关心测试的效率 257
8.6.5 不同的测试中应该使用什么样的值 257
8.7.1 发现bug 258
8.7 调试的方法 258
8.8 本章小结 259
8.7.2 搜寻错误 259
8.10 复习题 260
8.9 关键术语 260
8.12 GUI补充材料 分离显示和控制 261
8.11 练习题 261
9.2 处理多个对象 272
9.1 简介 272
第9章 多个对象的处理 272
9.3 循环模式 275
9.4 循环在测试中的作用 276
9.5.2 情景示例 277
9.5.1 问题的描述 277
9.5 电话簿 277
9.5.7 方法的实现 278
9.5.6 定义实例变量 278
9.5.3 确定主要对象 278
9.5.4 确定所需要的行为 278
9.5.5 定义接口 278
9.5.9 定义Entry类的接口 280
9.5.8 确定Entry类希望的行为 280
9.5.13 讨论 281
9.5.12 使用Entry类的方法 281
9.5.10 定义Entry类的实例变量 281
9.5.11 实现Entry类的方法 281
9.6.1 再谈TelephoneBook 282
9.6 保存多个值 282
9.5.14 类开发过程的本质 282
9.7 Vector——一个简单的集合类 283
9.6.2 相关对象的集合 283
9.8 使用for循环来遍历Vector 284
9.9.3 实现方法 287
9.9.2 定义实例变量 287
9.9 再谈TelephoneBook类 287
9.9.1 一个更好的实现方法 287
9.10 Java小插曲 基本类型与集合:再谈封装类 288
9.9.4 讨论 288
9.11.1 问题的描述 289
9.11 一个例子——确定学生的相对表现 289
9.11.4 定义接口 290
9.11.3 行为的确定 290
9.11.2 确定主要对象 290
9.11.6 方法的实现 291
9.11.5 定义实例变量 291
9.11.7 类的使用 292
9.12 另一个Vector的应用 293
9.11.8 讨论 293
9.12.2 doOutput()方法 295
9.12.1 doExperiment()方法 295
9.13 Java小插曲 Object的方法 298
9.14 数组介绍 300
9.14.1 声明并创建数组 301
9.15.1 使用数组还是Vector 302
9.15 Vector和数组 302
9.14.2 数组元素 302
9.15.2 从Vector到数组 303
9.16 使用数组来处理抛掷硬币 304
9.18 关键术语 305
9.17 本章小结 305
9.20 练习题 306
9.19 复习题 306
9.21 GUI补充材料 文本的放置 307
10.2 设计循环 321
10.1 概述 321
第10章 设计迭代 321
10.2.3 代码框架 322
10.2.2 选择和定义变量 322
10.2.1 非正式过程 322
10.2.4 while条件 323
10.2.7 完成循环体 324
10.2.6 确保循环终止 324
10.2.5 初始化 324
10.2.9 讨论 325
10.2.8 重新检查初始化 325
10.3.2 for语句的灵活性 326
10.3.1 for等价于while 326
10.3 Java小插曲 两个循环语句 326
10.4.1 乘法 327
10.4 另一个简单例子 327
10.4.5 while条件 328
10.4.4 代码框架 328
10.4.2 非正式过程 328
10.4.3 选择和定义变量 328
10.4.7 确保终止 329
10.4.6 初始化 329
10.5 重新考察循环模式 330
10.4.10 讨论 330
10.4.8 完成循环体 330
10.4.9 重新检查初始化 330
10.5.1 遍历模式:查寻记录项 331
10.5.2 读/处理模式:修理工距离 333
10.6.1 统计30个街区内的修理工人数 336
10.6 修理工循环的变种 336
10.6.2 寻找最近的修理工 337
10.7 合计银行账号 338
10.8.2 循环模式:累计器 340
10.8.1 循环模式:计数器 340
10.8 更多循环模式:计数器、累计器与极值 340
10.8.3 循环模式:对象极值 341
10.8.4 循环模式:基本类型数据中的极值 342
10.9 遍历数组的迭代 343
10.10.1 短路 345
10.10 Java小插曲 短路、break和continue 345
10.10.2 break和continue语句 346
10.11 循环设计策略 精化不完美的解决方案 348
10.12 示例LOGO海龟 352
10.15 复习题 364
10.14 关键术语 364
10.13 本章小结 364
10.16 练习题 365
10.17 GUI补充材料 更多文本操作 367
11.2 搜索 381
11.1 概述 381
第11章 维护对象集合 381
11.3 二分搜索 385
11.4 寻找极值的下标 392
11.5 排序 394
11.6 搜索文件 399
11.7 线程 并行计算 403
11.7.1 引入Thread类 404
11.7.2 一个简单的线程示例 405
11.8 线程 并行文件搜索 407
11.9 本章小结 408
11.12 练习题 409
11.11 复习题 409
11.10 关键术语 409
11.13 GUI补充材料 线程 410
12.1 概述 420
第12章 扩展类的行为 420
12.2 扩展类——继承Ⅰ 421
12.3.5 定义接口 422
12.3.4 确定行为 422
12.3 一个更好的BufferedReader 422
12.3.1 问题陈述 422
12.3.2 情景 422
12.3.3 寻找主体 422
12.3.7 实现方法 423
12.3.6 定义实例变量 423
12.3.8 类的完整实现 424
12.5 回顾Name类——添加额外状态 426
12.4 为子类添加状态——访问父类状态 426
12.6.1 基本机制与术语 430
12.6 Java小插曲 继承 430
12.6.2 构造器 431
12.6.3 继承和is-a关系 432
12.6.5 继承与合成 433
12.6.4 protected关键字 433
12.6.7 常见错误 434
12.6.6 继承还是合成 434
12.6.9 Object类 435
12.6.8 类的层次结构 435
12.8.1 覆盖机制 436
12.8 Java小插曲 多态 436
12.7 覆盖方法 436
12.8.2 多态 437
12.8.3 覆盖与重载 438
12.9 抽取共同行为——继承Ⅱ 439
12.10 抽象方法和抽象类 442
12.11 规定公共行为——接口 444
12.12 一种通用排序算法 446
12.13 本章小结 449
12.14 关键术语 450
12.16 练习题 451
12.15 复习题 451
12.17 GUI补充材料 探究Java类层次结构中的抽象窗口工具箱(Abstract Window Toolkit) 452
13.2 遇到异常 460
13.1 预计异常 460
第13章 异常 460
13.2.1 抛出异常 461
13.3.2 Checked Exception与RuntimeException 463
13.3.1 标注异常 463
13.2.2 throws子句 463
13.3 Java小插曲 Exception类 463
13.4 处理异常 464
13.5 对异常的责任 468
13.6 异常并非总是错误 469
13.7 本章小结 470
13.10 练习题 471
13.9 复习题 471
13.8 关键术语 471
13.11 GUI补充材料 模型-视图-控制器(MVC)范式 472
14.1 概述 482
第14章 递归 482
14.2 示例 求幂 483
14.2.1 递归调用 484
14.3.1 读取数据来构造一个Repair Person对象的集合 485
14.3 如何设计递归方法 485
14. 2.2 结束 485
14.3.2 在集合中寻找最近的修理工 486
14.3.3 两种递归模式 487
14.4 递归方法——幕后探秘 488
14.5 在向量、数组和字符串中使用递归 492
14.6 排列 495
14.7.1 智力游戏 498
14.7 Hanoi塔 498
14.7.2 找出简单的方法 499
14.7.4 场景 502
14.7.3 问题阐述 502
14.7.5 实现方法 504
14.8 递归和迭代 510
14.9 本章小结 512
14.10 关键术语 512
14.11 复习题 513
14.12 练习题 513
14.13 GUI补充材料 Hanoi塔小应用程序 515
第15章 客户-服务器计算 533
15.1 客户端和服务器 533
15.2 Internet通信 533
15.2.1 套接字 534
15.2.2 TCPConnection类 535
15.3 客户-服务器计算 537
15.4 一些简单的客户端类 539
15.4.1 WebClient类 539
15.4.2 MailClient类 541
15.4.3 处理客户端异常 544
15.6 关键术语 547
15.7 复习题 547
15.5 本章小结 547
15.8 练习题 548
15.9 GUI补充材料 Swing 548
A.2 Macintosh环境 558
A.1 引言 558
A.3 UNIX/Linux环境 558
附录A 三个Java环境 558
A.4 Windows环境 559
B.2 使用AWIO进行输出 561
B.1 引言 561
B.2.1 AWPrinter类 561
附录B AWIO 561
B.2.2 什么东西会出错呢 562
B.3 使用AWIO进行键盘输入 563
B.4 交互式输入/输出 565
B.5 使用AWIO进行磁盘文件输入 565
B.6 在本书的其余部分使用AWIO 566
附录C 使用Enumeration遍历集合 568
C.1 遍历矢量——Enumeration 568
C.2 另一个循环模式——列举集合元素 569