Java程序设计概念:对象先行(原书第8版)

更多详情

内容简介: 这是一本关于Java和计算机编程的入门教材,书中重点关注基础知识,并强调如何有效地学习。本书共分三部分。第一部分(第1~7章)是基础知识,首先简要介绍了计算机科学和Java编程,展示了如何管理预定义的类以及如何根据给定的规范定义类,之后讲解了基本数据类型、分支、循环和数组;第二部分(第8~12章)讲解面向对象设计,包括类的设计、继承和多态、接口、异常处理和基本文件输入/输出,以及两个重要的案例研究;第三部分(第13~15章)是在线内容,讲解了数据结构与算法,具体包括递归、排序和查找、链表、集合、映射、栈和队列。
本书非常适合作为计算机科学家、工程师和其他学科学生的第一本编程教材。

目录: 出版者的话
译者序
前言
学习辅助手段介绍
致谢
特色内容
第一部分 基础知识
第1章 引言 2
1.1 计算机程序 2
1.2 计算机剖析 3
计算与社会1.1 计算机无处不在 4
1.3 Java编程语言 5
1.4 熟悉你的编程环境 7
编程技巧1.1 备份副本 10
1.5 分析你的第一个程序 10
常见错误1.1 缺少分号 13
1.6 错误 14
常见错误1.2 单词拼写错误 15
1.7 解决问题:算法设计 15
1.7.1 算法概念 16
1.7.2 解决一个投资问题的算法 16
1.7.3 伪代码 17
1.7.4 从算法到程序 18
操作指南1.1 用伪代码描述算法 19
实用示例1.1 编写一个铺地板瓷砖的算法 21
第2章 使用对象 31
2.1 对象和类 31
2.1.1 使用对象 32
2.1.2 类 32
2.2 变量 33
2.2.1 变量声明 33
2.2.2 类型 35
2.2.3 名 35
2.2.4 注释 36
2.2.5 赋值 37
常见错误2.1 使用未声明或未初始化的变量 39
常见错误2.2 混淆变量声明和赋值语句 39
编程技巧2.1 选择描述性的变量名 39
2.3 调用方法 40
2.3.1 类的公共接口 40
2.3.2 方法参数 40
2.3.3 返回值 42
2.3.4 方法声明 43
编程技巧2.2 通过尝试来学习 44
2.4 构造对象 45
常见错误2.3 试图如调用方法一样调用构造函数 47
2.5 访问器和修改器方法 47
2.6 API文档 48
2.6.1 浏览API文档 49
2.6.2 包 50
编程技巧2.3 不要强记,使用在线帮助 51
2.7 实现一个测试程序 51
专题2.1 在交互环境中测试类 53
实用示例2.1 你活了多少天? 54
实用示例2.2 处理图片 54
2.8 对象引用 54
计算与社会2.1 计算机垄断 57
2.9 图形应用 57
2.9.1 帧窗口 58
2.9.2 在组件上绘制 59
2.9.3 在帧窗口中显示组件 61
2.10 椭圆、线、文本和颜色 62
2.10.1 椭圆和圆 63
2.10.2 线 63
2.10.3 绘制文本 64
2.10.4 颜色 64
第3章 实现类 78
3.1 实例变量和封装 78
3.1.1 实例变量 78
3.1.2 Counter类的方法 80
3.1.3 封装 80
3.2 指定类的公共接口 82
3.2.1 指定方法 82
3.2.2 指定构造函数 83
3.2.3 使用公共接口 85
3.2.4 为公共接口加注释 85
常见错误3.1 将构造函数声明为void 88
编程技巧3.1 javadoc工具 88
3.3 提供类实现 89
3.3.1 提供实例变量 89
3.3.2 提供构造函数 89
3.3.3 提供方法 91
常见错误3.2 忽略参数变量 93
操作指南3.1 实现一个类 94
实用示例3.1 建立一个简单的菜单 97
3.4 单元测试 98
计算与社会3.1 电子投票机 99
3.5 解决问题:跟踪对象 100
3.6 局部变量 102
常见错误3.3 在局部变量中重复实例变量 103
常见错误3.4 提供不必要的实例变量 104
常见错误3.5 忘记在构造函数中初始化对象引用 105
3.7 this引用 105
专题3.1 从一个构造函数调用另一个构造函数 108
3.8 图形类 108
操作指南3.2 绘制图形 112
第4章 基本数据类型 127
4.1 数字 127
4.1.1 数字类型 127
4.1.2 常量 129
专题4.1 大数 134
编程技巧4.1 不要使用魔法数 134
4.2 算术运算 135
4.2.1 算术操作符 135
4.2.2 自增和自减 135
4.2.3 整除和求余 135
4.2.4 幂和平方根 136
4.2.5 浮点数转换为整数 138
常见错误4.1 意外的整除 139
常见错误4.2 小括号不匹配 140
编程技巧4.2 表达式中的空格 140
Java 8说明4.1 避免负余数 140
专题4.2 结合赋值和算术运算 141
专题4.3 实例方法和静态方法 141
计算与社会4.1 奔腾处理器的浮点数bug 141
4.3 输入和输出 143
4.3.1 读取输入 143
4.3.2 格式化输出 144
操作指南4.1 完成计算 147
实用示例4.1 计算金字塔的体积和表面积 150
4.4 解决问题:先手动完成 150
实用示例4.2 计算旅行时间 152
4.5 字符串 152
4.5.1 String类型 152
4.5.2 字符串连接 153
4.5.3 字符串输入 154
4.5.4 转义序列 154
4.5.5 字符串和字符 154
4.5.6 子串 155
编程技巧4.3 阅读异常报告 157
专题4.4 使用对话框提供输入和输出 158
计算与社会4.2 国际字母表和Unicode 158
第5章 判断 174
5.1 if语句 174
编程技巧5.1 大括号布局 177
编程技巧5.2 总是使用大括号 178
常见错误5.1 if条件后有分号 178
编程技巧5.3 制表符 178
专题5.1 条件操作符 179
编程技巧5.4 避免不同分支中重复 179
5.2 比较值 180
5.2.1 关系操作符 180
5.2.2 比较浮点数 181
5.2.3 比较字符串 182
5.2.4 比较对象 183
5.2.5 测试null 184
常见错误5.2 使用==比较字符串 185
操作指南5.1 实现一个if语句 186
实用示例5.1 抽取中间字符 188
计算与社会5.1 丹佛机场的行李处理系统 188
5.3 多个候选条件 189
专题5.2 switch语句 192
5.4 嵌套分支 193
编程技巧5.5 手动跟踪 196
常见错误5.3 空悬else问题 197
专题5.3 块作用域 198
专题5.4 枚举类型 199
5.5 解决问题:流程图 200
5.6 解决问题:选择测试用例 202
编程技巧5.6 制订计划并为意料外的问题留出时间 204
专题5.5 记录日志 205
5.7 布尔变量和操作符 205
常见错误5.4 结合多个关系操作符 208
常见错误5.5 混淆&&和||条件 209
专题5.6 布尔操作符的短路计算 209
专题5.7 德·摩根定律 210
5.8 应用:输入验证 211
计算与社会5.2 人工智能 213
第6章 循环 233
6.1 while循环 233
常见错误6.1 不要想“我们到了吗?” 239
常见错误6.2 无限循环 239
常见错误6.3 差一错误 240
6.2 解决问题:手动跟踪 241
计算与社会6.1 数字盗版 244
6.3 for循环 245
编程技巧6.1 按其预期用途使用for循环 250
编程技巧6.2 选择满足任务要求的循环边界 251
编程技巧6.3 统计迭代 251
专题6.1 for循环首部中声明的变量 252
6.4 do循环 253
编程技巧6.4 画出循环的流程图 254
6.5 应用:处理卫哨值 254
专题6.2 输入和输出重定向 257
专题6.3 “半循环”问题 258
专题6.4 break和continue语句 259
6.6 解决问题:故事板 260
6.7 常用循环算法 263
6.7.1 求和与平均值 263
6.7.2 匹配计数 263
6.7.3 找到第一个匹配 264
6.7.4 提示用户输入,直到找到匹配 265
6.7.5 最大值和最小值 265
6.7.6 比较相邻值 265
操作指南6.1 写一个循环 267
实用示例6.1 信用卡处理 270
6.8 嵌套循环 270
实用示例6.2 处理图像中的像素 273
6.9 应用:随机数和仿真 273
6.9.1 生成随机数 273
6.9.2 蒙特卡罗方法 275
6.10 使用调试器 277
操作指南6.2 调试 279
实用示例6.3 示例调试会话 281
计算与社会6.2 第一个bug 281
第7章 数组和数组列表 303
7.1 数组 303
7.1.1 声明和使用数组 303
7.1.2 数组引用 306
7.1.3 利用方法使用数组 307
7.1.4 部分填充的数组 307
常见错误7.1 边界错误 309
常见错误7.2 未初始化和未填充的数组 309
编程技巧7.1 对相关数据项的序列使用数组 309
编程技巧7.2 将并行数组重组为对象数组 310
专题7.1 参数数目可变的方法 311
计算与社会7.1 计算机病毒 311
7.2 增强的for循环 312
7.3 常用数组算法 314
7.3.1 填充 314
7.3.2 求和与平均值 314
7.3.3 最大值和最小值 314
7.3.4 元素分隔符 315
7.3.5 线性查找 315
7.3.6 删除一个元素 316
7.3.7 插入一个元素 316
7.3.8 交换元素 317
7.3.9 复制数组 318
7.3.10 读取输入 319
常见错误7.3 低估数据集的大小 322
专题7.2 利用Java库排序 322
7.4 解决问题:调整算法 323
操作指南7.1 处理数组 325
实用示例7.1 掷骰子 327
7.5 解决问题:通过管理实体对象发现算法 327
7.6 二维数组 330
7.6.1 声明二维数组 331
7.6.2 访问元素 332
7.6.3 定位相邻元素 333
7.6.4 访问行和列 333
实用示例7.2 世界人口表 336
专题7.3 行长度可变的二维数组 336
专题7.4 多维数组 337
7.7 数组列表 338
7.7.1 声明和使用数组列表 338
7.7.2 对数组列表使用增强的for循环 340
7.7.3 复制数组列表 341
7.7.4 包装器和自动装箱 341
7.7.5 对数组列表使用数组算法 342
7.7.6 在数组列表中存储输入值 343
7.7.7 删除匹配元素 343
7.7.8 在数组列表和数组间选择 344
常见错误7.4 长度和大小 346
专题7.5 钻石语法 346
7.8 回归测试 346
编程技巧7.3 批文件和Shell脚本 348
计算与社会7.2 Therac-25事件 349
第二部分 面向对象设计
第8章 设计类 372
8.1 发现类 372
8.2 设计好方法 373
8.2.1 提供一个一致的公共接口 373
8.2.2 最小化依赖 374
8.2.3 区分访问器和修改器 375
8.2.4 最小化副作用 376
编程技巧8.1 一致性 377
专题8.1 按值调用和按引用调用 378
8.3 解决问题:对象数据模式 382
8.3.1 管理总数 382
8.3.2 统计事件 382
8.3.3 收集值 383
8.3.4 管理对象的属性 384
8.3.5 为有不同状态的对象建模 384
8.3.6 描述对象的位置 385
8.4 静态变量和方法 386
编程技巧8.2 尽量减少使用静态方法 389
常见错误8.1 试图在静态方法中访问实例变量 389
专题8.2 初始化实例和静态变量的其他形式 390
专题8.3 静态导入 390
8.5 解决问题:先解决比较简单的问题 391
8.6 包 395
8.6.1 将相关的类组织为包 395
8.6.2 导入包 396
8.6.3 包名 396
8.6.4 包和源文件 397
常见错误8.2 混淆点号 398
专题8.4 包访问 398
操作指南8.1 使用包编程 399
8.7 单元测试框架 400
计算与社会8.1 个人计算 402
第9章 继承 416
9.1 继承层次体系 416
编程技巧9.1 单个类表示值的差异,继承表示行为的差异 419
9.2 实现子类 420
常见错误9.1 从超类复制实例变量 423
常见错误9.2 混淆超类和子类 424
9.3 覆盖方法 424
常见错误9.3 意外重载 428
常见错误9.4 调用超类方法时忘记使用super 429
专题9.1 调用超类构造函数 429
9.4 多态 430
专题9.2 动态方法查找和隐式参数 434
专题9.3 抽象类 434
专题9.4 最终方法和最终类 436
专题9.5 保护访问 436
操作指南9.1 开发一个继承层次体系 437
实用示例9.1 实现一个员工层次结构完成工资处理 442
9.5 Object:所有类的超类 442
9.5.1 覆盖toString方法 442
9.5.2 equals方法 443
9.5.3 instanceof操作符 444
常见错误9.5 不要使用类型测试 446
专题9.6 继承和toString方法 447
专题9.7 继承和equals方法 447
计算与社会9.1 谁在控制互联网? 448
第10章 接口 457
10.1 使用接口实现算法重用 457
10.1.1 发现接口类型 458
10.1.2 声明接口类型 458
10.1.3 实现接口类型 460
10.1.4 比较接口和继承 462
常见错误10.1 忘记将实现方法声明为公共方法 463
常见错误10.2 试图实例化一个接口 463
专题10.1 接口中的常量 464
Java 8说明10.1 接口中的静态方法 464
Java 8说明10.2 默认方法 464
Java 8说明10.3 冲突的默认方法 465
10.2 处理接口类型 466
10.2.1 从类转换为接口 466
10.2.2 在接口变量上调用方法 467
10.2.3 从接口强制转换为类 467
实用示例10.1 研究数字序列 468
10.3 Comparable接口 469
编程技巧10.1 比较整数和浮点数 470
专题10.2 clone方法和Cloneable接口 470
10.4 使用接口实现回调 473
Java 8说明10.4 lambda表达式 477
专题10.3 泛型接口类型 478
10.5 内部类 479
专题10.4 匿名类 480
10.6 模拟对象 481
10.7 事件处理 482
10.7.1 监听事件 483
10.7.2 使用内部类实现监听器 485
常见错误10.3 在实现方法中改变参数类型 488
常见错误10.4 试图调用监听器方法 488
Java 8说明10.5 lambda表达式实现事件处理 488
10.8 用按钮构建应用 488
常见错误10.5 忘记关联监听器 491
编程技巧10.2 不要把容器用作监听器 492
10.9 处理计时器事件 492
常见错误10.6 忘记重绘 495
10.10 鼠标事件 495
专题10.5 键盘事件 499
专题10.6 事件适配器 499
计算与社会10.1 开源和免费软件 500
第11章 输入/输出和异常处理 512
11.1 读写文本文件 512
常见错误11.1 文件名中的反斜线 515
常见错误11.2 用String构造一个Scanner 515
专题11.1 读Web页面 515
专题11.2 文件对话框 516
专题11.3 字符编码 516
11.2 文本输入和输出 517
11.2.1 读取单词 517
11.2.2 读取字符 518
11.2.3 字符分类 518
11.2.4 读取文本行 519
11.2.5 扫描字符串 520
11.2.6 把字符串转换为数字 520
11.2.7 读数字时避免错误 521
11.2.8 混合数字、单词和文本行输入 521
11.2.9 格式化输出 522
专题11.4 正则表达式 524
专题11.5 读取整个文件 524
11.3 命令行参数 525
操作指南11.1 处理文本文件 527
实用示例11.1 分析婴儿名字 530
计算与社会11.1 加密算法 531
11.4 异常处理 532
11.4.1 抛出异常 532
11.4.2 捕获异常 533
11.4.3 受查异常 535
11.4.4 关闭资源 536
11.4.5 设计你自己的异常类型 537
编程技巧11.1 早抛出,晚捕获 539
编程技巧11.2 不要压制异常 539
编程技巧11.3 要抛出特定的异常 540
专题11.6 断言 540
专题11.7 try/finally语句 541
11.5 应用:处理输入错误 541
计算与社会11.2 阿丽亚娜火箭事故 546
第12章 面向对象设计 556
12.1 类及其职责 556
12.1.1 发现类 556
12.1.2 CRC卡方法 557
12.2 类之间的关系 558
12.2.1 依赖 558
12.2.2 聚合 559
12.2.3 继承 560
操作指南12.1 程序设计中使用CRC卡和UML图 561
专题12.1 UML图中的属性和方法 562
专题12.2 重数 563
专题12.3 聚合、关联和组合 563
12.3 应用:打印一个发货单 564
12.3.1 需求 564
12.3.2 CRC卡 565
12.3.3 UML图 567
12.3.4 方法文档 567
12.3.5 实现 569
计算与社会12.1 数据库和隐私 574
实用示例12.1 模拟一个自动柜员机 575
附录A Unicode基本拉丁语和拉丁语-1子集 581
附录B Java操作符小结 583
附录C Java保留字小结 585
附录D Java库 587
附录E Java语言编码指南 608
术语表 614

译者序: 这是一本让人惊喜的Java入门书。
它不仅能让你轻松进入Java世界,更重要的是,通过学习本书,能够把面向对象的设计理念自然而然地融入你的学习和编程中。“对象先行”正是本书倡导的一个重要方面,这也是本书区别于其他教材的一个突出特点。我们很多人最早学习Java时都经历了从面向过程到面向对象的概念转换,由于前期养成了一些不好的编程习惯,所以往往饱受纠正错误的痛苦。如果那时能有这样一本书,我们会少走很多弯路。从这个意义上讲,你真的很幸运!
本书的目的是介绍基本概念,为Java编程奠定基础。本书分为基础知识、面向对象设计以及数据结构和算法三部分,看似平常,但内容绝不枯燥。每一章每一节都精心设计,以通俗易懂的方式清晰地讲解概念,更通过实用示例强化理解。另外,作为第一线的教师,本书作者深谙教学之道,将课堂设计中的多种教学元素很好地贯穿在了本书中。每一章首先给出学习目标,并提供大量提示和详细说明来强调重点,这些内容就像我们上课时所记的笔记,能帮助我们真正掌握所学的内容。不仅如此,本书的版式也让人眼前一亮,不同层次的读者可以按照学习要求灵活地安排学习内容和顺序,更能感受学习的乐趣。
本书特别设置了“计算与社会”“专题”及“科学和商业练习”等板块,来提高学生的学习兴趣。更重要的是,通过这些贴近生活的实用主题,书中介绍的知识不再只是生硬的书本概念,而直接对应于切切实实的具体实践,这会让学习过程更加有的放矢。还有一点需要指出的是,本书中的练习覆盖面很广,可能涉及一些对你来说很生疏的领域,以至于让一些人望而却步,但这些练习并不要求你掌握那些领域的理论背景,它们只是用来提供一些“场景”,使你能够在这些场景下实际操练你学到的Java编程知识。
希望本书能为你开启Java编程世界的大门,帮你踏出坚实的第一步。
本书由林琪和肖斌主译,朱涛江、杜志秀、杨春生、刘亮、王宇、张伶、王志淋、刘跃邦参与了全书的修改整理,程芳、吴忠望、张练达、陈峰、杨健康、姚勇、张莹、牛亚峰、高强、赵蓓、荆涛、刘恒完善了关键部分的翻译。全体人员共同完成了本书的翻译工作。不过由于水平有限,译文肯定有不当之处,敬请批评指正。
林琪
2017年11月

前言: 这是一本关于Java和计算机编程的入门教材,书中重点关注基础知识,并强调如何有效地学习。本书面向有不同兴趣和能力层次不同的广大学生,非常适合作为计算机科学家、工程师和其他学科学生的第一本编程教材。本书不要求读者有任何编程经验,只需要掌握一定的高中代数知识就可以学习。
本书有以下主要特点。
对象先行,渐进地讲授面向对象知识。
第2章将讲解如何使用标准库中的对象和类。第3章会介绍根据给定规范实现类的基本机制,这样学生就可以在掌握分支、循环和数组的同时使用简单的对象。面向对象设计将从第8章开始介绍。这种渐进的方法可以让学生在研究核心算法有关内容的整个过程中使用对象,而不会养成一些坏习惯,否则以后还得花很大力气才能改掉这些坏习惯。
指导和实用示例可以帮助学生达成学习目标。
初学的程序员通常会问“怎么开始?现在我要做什么?”当然,作为一种十分复杂的活动,编程肯定无法简化成一组菜谱式的指令。不过,逐步指导对于建立自信很有帮助,还有助于为当前任务提供一个大致的轮廓。这种“操作指南”可以帮助学生完成常见的编程任务。我们还在线提供了另外一些实用示例。
明确指出解决问题的策略。
实用、循序渐进的技术讲解可以帮助学生为编程问题设计解决方案并做出评价。书中会在合适的位置介绍解决问题的策略,这些策略可以帮助学生克服障碍,获得成功。具体包括:
算法设计(利用伪代码)
跟踪对象
先手动处理(手写演算)
流程图
选择测试用例
手动跟踪
故事板
先解决比较简单的问题
调整算法
通过管理实体对象发现算法
对象数据模式
递归地思考
估计一个算法的运行时间
实践锻造完美。
当然,学习编程的学生还要能够实现不太简单的程序,不过首先他们要有能够成功的信心。本书每一节最后都有大量自查问题。“实践”环节指出了每一节之后可以尝试的练习。另外我们还在线提供了额外的实践机会,包括一些自动评分的编程练习和强调技能的多选题。
形象直观的方法促进并方便读者阅读。
照片以类比的方式形象地解释了计算机概念的内涵和行为。循序渐进的图表详细展示了复杂的程序操作。语法框和示例表以一种紧凑的格式提供了大量典型和特殊的用例。借助这些视觉手段,在集中精力学习文字内容之前就能对大致情况有所了解。
强调基础,同时保证技术准确。
对于刚开始学习编程的人来说,百科全书式的面面俱到并没有太大帮助,不过也不能矫枉过正,将内容缩减为一个过于简化的要点列表对初学者同样没有好处。本书会成块地介绍基础知识,方便读者消化吸收。另外,在读者希望获得更多信息时,我们会提供单独的说明,更深入地介绍一些好的实践做法或语言特性。这里不会人为地过于简化来给人以知识的幻觉。
加强工程实践。
书中关于软件质量和常见错误给出了大量很有用的提示,这些将鼓励读者养成良好的编程习惯。可选的测试活动强调测试驱动开发,鼓励学生系统地测试程序。
提供一个可选的图形活动。
图形是对象的一个非常好的例子。很多学生喜欢编写创建图形或使用图形用户界面的程序。如果需要,可以使用第2章、第3章和第10章最后的材料在课程中加入这些内容。
包含可选的科学和商业练习。
每一章最后都会针对科学和商业领域的问题给出一些高级练习。设计这些练习是为了让学生更多地参与,这些练习体现了编程在应用领域的作用和意义。
本版新增内容
针对Java 8全面更新
Java 8引入了很多令人兴奋的新特性,本书这一版已经全面更新来利用这些特性。现在接口可以有默认和静态方法,另外由于引入了lambda表达式,所以可以很容易地为只有一个方法的接口提供实例。关于接口的一章和介绍排序的章节也已经更新,以便根据需要利用这些新特性。
另外,如try-with-resources语句等Java 7特性会放在正文中介绍。
交互式学习
Codecheck(代码检查)是一个创新的在线服务,学生可以利用这个服务解决编程问题。你可以布置已准备的练习,也可以很容易地增加你自己的练习。有关的更多内容请访问http://codecheck.it。
本书结构
本书很自然地分为三大部分,如图1所示。各章的组织与前一版同样灵活;图中还展示了各章之间的依赖关系。
第一部分  基础知识(第1章~第7章)
第1章是对计算机科学和Java编程的一个简要介绍。第2章展示如何管理预定义类的对象。第3章中介绍根据给定的规范构建你自己的简单类。第4章~第7章介绍基本数据类型、分支、循环和数组。
第二部分  面向对象设计(第8章~第12章)
第8章用系统的方式开始介绍类设计这一主题,还会介绍UML记法的一个非常简单的子集。关于多态和继承的讨论分为两章。第9章介绍继承和多态,第10章介绍接口。异常处理和基本文件输入/输出在第11章介绍。异常层次体系提供了继承的一个很有用的例子。第12章提供了面向对象设计的一个介绍,还包括两个重要的案例研究。
第三部分 数据结构与算法(第13章~第15章)
第13章~第15章(本书网站上提供)是对算法和数据结构的介绍,具体包括递归、排序和查找、链表、集合、映射、栈和队列。一学期的课程可能无法全面介绍这些主题。不过,可以在第7章之后根据需要选学(见图1)。第13章介绍递归,首先从简单的例子开始,逐步过渡到更有意思的应用(这些应用采用迭代方式实现可能很困难)。第14章介绍二分排序算法和归并排序,还会非正式地介绍大O记法。各个数据结构会在标准Java集合库上下文中介绍。你会了解标准库的基本抽象(如迭代器、集合和映射),还会了解不同集合的性能特点。
图1 各章之间的依赖关系
附录
很多教师发现要求所有作业采用一致的风格会有很多好处。不过,如果附录E中的风格指南与教师的偏好或当地的习惯有出入,可以使用这个风格指南的电子版并相应地修改。附录F~附录J可以在网上找到。
A. Unicode基本拉丁语和拉丁语-1子集
B. Java操作符小结
C. Java保留字小结
D. Java库
E. Java语言编码指南
F. 工具小结
G. 数字系统
H. UML小结
I. Java语法小结
J. HTML小结
Web资源
本书有一整套在线资源作为补充。可以访问www.wiley.com/college/horstmann在线配套网站,其中包括:
本书所有示例程序和实用示例(Worked Example)的源代码,以及其他示例程序。
实用示例,在其他实际例子中应用本书介绍的解决问题的步骤。
课程幻灯片(仅限教师)。
所有复习和编程练习的答案(仅限教师)。
一个强调技能而不只是术语的试题库(仅限教师)。这是一个庞大的多选题题集,可以用字处理工具编辑,也可以导入课程管理系统中。
“代码检查”(CodeCheck)作业,这是一个创新的在线服务,允许学生完成其中给出的编程问题,并立即得到反馈。教师可以布置已准备的练习,也可以很容易地增加他们自己设计的练习。