标题：Java程序设计与问题解决（第6版）
图书简介
本书是一部适用于高校多个专业运用Java讲授计算机科学课程的理想教材。本书向学生传授了面向对象的编程以及与此相关的一些重要概念，比如设计、测试与调试、编程风格、接口继承以及异常处理。它涵盖了Java的关键特性，并在全书自始至终贯穿了对象的思想。除了介绍小应用程序之外，本书将重点放在了讲授应用程序编程上。 [1]
图书信息
ISBN：9787302296508定价：98元印次：1-1装帧：平装印刷日期：2012-11-23
作者：Walter Savitch 著 张长富 等译 
图书前言
本书用于传授Java编程语言，更为重要的是，传授基本的编程技巧。它不要求具备任何编程经验，对数学的要求也不超过高中的简单代数。但是，要全面享用本书的收获，读者应该在自己的计算机上已经安装了Java，这样就能够练习给出的示例和技巧。最好采用Java的最新版本，但版本5的Java也依然可用。
如果读者以前曾经编写过程序
使用本书不需要读者具备先前的任何编程经验，本书专为初学者设计。如果读者碰巧具备某些其他编程语言的经验，那么不要想当然地认为Java像你已经熟悉使用的那个编程语言一样。所有的语言都不相同，都存在差异，即使这些差别很小，但也足以带来问题。浏览一下前四章，至少要阅读一下“扼要重述”部分。当你阅读到第5章时，最好阅读整个章节。
如果读者以前曾经使用C或C++编过程序，那么到Java的转换可能是既舒服又麻烦不断。初看起来，Java几乎与C或C++相同。但是，Java与这些语言存在很大的差异，读者需要清醒地意识到这些差异。附录6比较了Java与C++，以便帮助读者了解这些差异是 什么。
获取Java的拷贝
附录1提供了下载Java编译器和编程环境的站点链接。对于初学者来说，我们推荐使用Oracle的Java JDK作为你的Java编译器，相关软件和TextPad作为编写Java代码的简单编辑器环境，当下载Java JDK时，确保获取最新的可用版本。
用于学生的支持材料
* 本书中程序以及额外示例的源代码
* 学生实验室手册
* VideoNotes：编程示例和练习的视频解决方案 
学习援助
每一章都包含了帮助读者学习本书的数个特性：
* 开篇概述：包括简要内容列表、本章目标、必备知识以及一到两段读者将学习什么的说明。
* 扼要重述精确地总结了Java语法以及其他重要概念的主要内容。
* FAQ，或者称作“常问问题”，回答了其他学生已经提出的疑问。
* 谨记突出强调了你应该牢记在心的概念。
* 编程技巧给出了提高你的编程技能的途径。
* 疑难杂症标识了编程过程中你可能会犯——也应该避免——的潜在错误。
* 旁白提供了相关问题的简短阐述。
* 自测题全面测试你的知识，其答案放在每一章的末尾。练习你所学东西的最佳途径之一是在查看答案之前完成自测题。
* 每一章的末尾给出了重要概念的概要。
使用MyProgrammingLab的联机练习
MyProgrammingLab是一个自学和实践工具，它由数百个小型练习组成，这些练习围绕本书的体系组织。系统自动检测你提交代码中的逻辑和语法错误，并给出有针对性的提示，让你能够明白什么地方发生了错误——以及为什么发生这样的错误。
VideoNotes
这些简短的循序渐进视频演示了如何从设计到编码的整个过程来解决问题。VideoNotes支持易于导航的自主控制，包括每一个练习都具备选择、播放、重放、快进以及停止等能力。
本教材也是一部参考书
除了将本书用做教材之外，你能够也应该将它用作一部参考书。当你需要查阅某个遗忘的要点，或者听别人提及过、但你自己还没有学到的某个要点时，以索引为向导查阅一下。很多索引条目都给出了“扼要重述”所在的页码。翻到相应的页面，页面中将包含简短、醒目的条目，它给出了该主题的所有基本要点。你可以以这种方式查阅Java语言的细节以及编程技巧的细节。
每一章的扼要重述为你提供了该章主要内容的简短概要。并且，你能够使用这些特性复习该章内容或者查阅Java语言的细节。
图书目录
第1章 计算机和Java引论1
1.1 计算机基础1
1.1.1 硬件和内存1
1.1.2 程序3
1.1.3 编程语言、编译器、
解释器4
1.1.4 Java字节代码6
1.1.5 类加载器7
1.2 品尝Java8
1.2.1 Java语言的历史8
1.2.2 应用程序和小应用
程序9
1.2.3 第一个Java应用
程序9
1.2.4 编写、编译和运行
Java程序14
1.3 编程基础15
1.3.1 面向对象编程15
1.3.2 算法18
1.3.3 测试与调试19
1.3.4 软件重用20
1.4 图形补充材料21
1.4.1 一个示例图形小
应用程序22
1.4.2 图案的大小和
位置23
1.4.3 绘制椭圆和圆25
1.4.4 绘制弧形25
1.4.5 运行小应用程序27
1.5 本章小结28
练习题28
编程项目30
自测题答案31
第2章 基础计算34
2.1 变量和表达式34
2.1.1 变量34
2.1.2 数据类型36
2.1.3 Java标识符38
2.1.4 赋值语句40
2.1.5 简单输入42
2.1.6 简单屏幕输出43
2.1.7 常量44
2.1.8 命名常量46
2.1.9 赋值兼容性47
2.1.10 类型强制转换47
2.1.11 数学运算符50
2.1.12 小括号和优先级
规则53
2.1.13 特殊赋值运算符54
2.1.14 增量和减量运算符59
2.1.15 增量和减量运算符的
更多介绍60
2.2 String类61
2.2.1 字符串常量和变量61
2.2.2 字符串的拼接62
2.2.3 String方法63
2.2.4 字符串处理66
2.2.5 转义字符67
2.2.6 Unicode字符串68
2.3 键盘和屏幕的输入输出69
2.3.1 屏幕输出69
2.3.2 键盘输入72
2.3.3 其他输入分隔符
（选读）77
2.3.4 使用printf的格式化
输出（选读）78
2.4 文档和风格80
2.4.1 有意义的变量名称80
2.4.2 注释81
2.4.3 缩进83
2.4.4 使用命名常量84
2.5 图形补充材料86
2.5.1 运用到图形小应用
程序上的样式规则86
2.5.2 使用JFrame类创建
Java GUI应用程序87
2.5.3 类JOptionPane概述90
2.5.4 以其他数值类型方式
读取输入97
2.6 本章小结100
练习题101
编程项目103
自测题答案105
第3章 控制流：分支110
3.1 if-else语句110
3.1.1 基本if-else语句110
3.1.2 布尔表达式116
3.1.3 比较字符串120
3.1.4 嵌套if-else语句124
3.1.5 多分支if-else语句126
3.1.6 条件运算符
（选读）133
3.1.7 exit方法134
3.2 boolean类型135
3.2.1 布尔变量135
3.2.2 优先级规则136
3.2.3 布尔值的输入和
输出138
3.3 switch语句140
3.3.1 枚举146
3.4 图形补充材料147
3.4.1 指定绘图颜色147
3.4.2 表达“是”或“否”
提问的对话框151
3.5 本章小结152
练习题153
编程项目155
自测题答案156
第4章 控制流：循环160
4.1 Java循环语句160
4.1.1 while语句160
4.1.2 do-while语句164
4.1.3 for语句175
4.1.4 在for语句内部声明
变量180
4.1.5 在for语句中使用
逗号（选读）181
4.1.6 for-each语句182
4.2 使用循环编程183
4.2.1 循环体183
4.2.2 初始化语句184
4.2.3 控制循环迭代次数185
4.2.4 循环中的break语句
和continue语句
（选读）192
4.2.5 循环错误195
4.2.6 跟踪变量196
4.2.7 断言检查198
4.3 图形补充材料199
4.3.1 drawString方法204
4.4 本章小结205
练习题205
编程项目207
自测题答案211
第5章 定义类和方法216
5.1 类和方法定义216
5.1.1 类文件和独立
编译218
5.1.2 实例变量219
5.1.3 方法221
5.1.4 定义void方法224
5.1.5 定义返回一个值的
方法225
5.1.6 关键字this232
5.1.7 局部变量234
5.1.8 语句块236
5.1.9 基本类型参数237
5.2 信息隐藏和封装242
5.2.1 信息隐藏242
5.2.2 前置条件注释和
后置条件注释243
5.2.3 public和private
修饰符244
5.2.4 访问器方法和
修改器方法249
5.2.5 调用方法的方法257
5.2.6 封装262
5.2.7 使用javadoc完成
自动文档264
5.2.8 UML类图265
5.3 对象和引用265
5.3.1 类类型变量266
5.3.2 为类定义相等
方法271
5.3.3 布尔值方法276
5.3.4 类类型参数280
5.4 图形补充材料286
5.4.1 Graphics类287
5.4.2 init方法291
5.4.3 向小应用程序中
添加标签292
5.5 本章小结295
练习题296
编程项目299
自测题答案303
第6章 对象和方法的更详细讨论310
6.1 构造器311
6.1.1 定义构造器311
6.1.2 在构造器中调用
方法319
6.1.3 从一个构造器中调
用另一个构造器
（选读）322
6.2 静态变量和静态方法323
6.2.1 静态变量323
6.2.2 静态方法325
6.2.3 将main方法的任务
划分为子任务330
6.2.4 将main方法添加
到类中332
6.2.5 Math类334
6.2.6 包装类336
6.3 编写方法340
6.3.1 分解346
6.3.2 解决编译器的
关注347
6.3.3 测试方法349
6.4 重载351
6.4.1 重载基础351
6.4.2 重载和自动类型
转换353
6.4.3 重载和返回类型355
6.5 再论信息隐藏364
6.5.1 私有性泄露364
6.6 将枚举看做类368
6.7 包370
6.7.1 包和移入370
6.7.2 包名称和目录371
6.7.3 名称冲突373
6.8 图形补充材料374
6.8.1 添加按钮375
6.8.2 事件驱动编程376
6.8.3 编程按钮377
6.8.4 添加图标382
6.8.5 改变可见性384
6.9 本章小结387
练习题388
编程项目390
自测题答案394
第7章 数组401
7.1 数组基础402
7.1.1 创建和访问数组402
7.1.2 数组细节405
7.1.3 实例变量length408
7.1.4 数组下标的深入
介绍410
7.1.5 初始化数组413
7.2 类和方法中的数组414
7.2.1 下标变量作为
方法参量422
7.2.2 整个数组作为方法的
参量424
7.2.3 方法main的参量425
7.2.4 数组赋值和相等426
7.2.5 返回数组的方法429
7.3 使用数组和类编程433
7.3.1 部分填充数组440
7.4 排序和搜索数组441
7.4.1 选择排序442
7.4.2 其他排序算法446
7.4.3 搜索数组446
7.5 多维数组447
7.5.1 多维数组基础448
7.5.2 多维数组参数和
返回值451
7.5.3 多维数组的Java
表示453
7.5.4 不规则数组
（选读）454
7.6 图形补充材料461
7.6.1 文本域和文本
字段461
7.6.2 类JTextArea和
JTextField464
7.6.3 绘制多边形465
7.7 本章小结467
练习题468
编程项目472
自测题答案477
第8章 继承、多态和接口484
8.1 继承基础484
8.1.1 派生类485
8.1.2 覆盖方法定义489
8.1.3 覆盖和重载490
8.1.4 final修饰符490
8.1.5 基类的私有实例
变量和私有方法491
8.1.6 UML继承图492
8.2 使用继承编程494
8.2.1 派生类中的
构造器494
8.2.2 再论this方法496
8.2.3 调用覆盖方法496
8.2.4 在Undergraduate中
定义equals方法的
另一种途径501
8.2.5 类型兼容性501
8.2.6 Object类505
8.2.7 更好的equals
方法507
8.3 多态509
8.3.1 动态绑定和继承509
8.3.2 使用toString的
动态绑定512
8.4 接口和抽象类513
8.4.1 类接口513
8.4.2 Java接口514
8.4.3 实现接口515
8.4.4 接口作为类型使用517
8.4.5 扩展接口520
8.4.6 抽象类537
8.5 图形补充材料539
8.5.1 JApplet类539
8.5.2 JFrame类539
8.5.3 窗口事件和窗口
侦听器542
8.5.4 ActionLisener接口543
8.5.5 下一步做什么544
8.6 本章小结544
练习题545
编程项目546
自测题答案549
第9章 异常处理553
9.1 基本异常处理553
9.1.1 Java中的异常553
9.1.2 预定义异常类562
9.2 定义自己的异常类564
9.3 异常类的更多细节573
9.3.1 声明异常（把责任
转移出去）573
9.3.2 异常的种类576
9.3.3 出错578
9.3.4 多个抛出和多个
捕获578
9.3.5 finally语句块584
9.3.6 重新抛出异常
（选读）584
9.4 图形补充材料595
9.4.1 GUI中的异常596
9.5 本章小结599
练习题600
编程项目602
自测题答案606
第10章 流和文件I/O611
10.1 流和文件I/O概览611
10.1.1 流的概念612
10.1.2 为什么使用
文件进行I/O612
10.1.3 文本文件和
二进制文件612
10.2 文本文件I/O614
10.2.1 创建文本文件614
10.2.2 添加到文本
文件上619
10.2.3 从文本文件读取
数据621
10.3 使用任意文件的技巧623
10.3.1 File类623
10.3.2 使用路径名称625
10.3.3 File类的方法626
10.3.4 定义打开流的
方法628
10.4 基本二进制文件I/O632
10.4.1 创建二进制文件632
10.4.2 将基本类型的值
写入二进制文件634
10.4.3 将字符串写入
二进制文件637
10.4.4 writeUTF的
一些细节637
10.4.5 读取二进制文件638
10.4.6 EOFException类642
10.5 对象和数组的二进制
文件I/O649
10.5.1 类的对象的
二进制文件I/O649
10.5.2 串行化的一些
细节653
10.5.3 二进制文件中的
数组对象654
10.6 图形补充材料656
10.7 本章小结662
练习题663
编程项目665
自测题答案668
第11章 递归674
11.1 递归基础674
11.1.1 递归是如何
工作的681
11.1.2 无限递归684
11.1.3 递归方法与迭代
方法的对比687
11.1.4 返回值的递归
方法689
11.2 使用递归编程692
11.3 本章小结705
练习题705
编程项目707
自测题答案711
第12章 动态数据结构和泛型715
12.1 基于数组的数据结构716
12.1.1 类ArrayList716
12.1.2 创建ArrayList的
实例717
12.1.3 使用ArrayList的
方法718
12.1.4 参数化类和通用
数据类型724
12.2 Java集合框架724
12.2.1 Collection接口725
12.2.2 HashSet类725
12.2.3 Map接口727
12.2.4 HashMap类727
12.3 链接数据结构729
12.3.1 类LinkedList729
12.3.2 链表730
12.3.3 实现链表操作732
12.3.4 隐私泄露739
12.3.5 内部类739
12.3.6 结点内部类740
12.3.7 迭代器741
12.3.8 Java Iterator接口752
12.3.9 链表的异常处理752
12.3.10 链表的变化754
12.3.11 其他链接数据
结构756
12.4 泛型756
12.4.1 基础756
12.5 本章小结764
练习题765
编程项目767
自测题答案771
附录776
附录1 得到Java776
附录2 运行小应用程序776
附录3 protected和包修饰符777
附录4 DecimalFormat类778
附录5 Javadoc781
附录6 C++和Java之间的
差别783
附录7 Unicode字符编码786[1]