写给教师们的序
本版中的改变
若大家未使用过本书的第2版,请直接跳过这一小节。若大家使用过第2版,则本小节将能阐明第3版和第2版之间有何不同。
对教师们而言,从第2版转化至第3版是比较容易的。你仍然教授同样的课程,基本上还是按照同样的次序讲授同样的主题,只是在内容覆盖面上有一点微小的差别。
除了技术方面的改变之外(这一点我们只做简短探讨),在这一版中,我们进行了彻头彻尾地改变,并对内容进行了精炼。我们放弃了原来那种易于学生使用、理解的写作风格,对本书进行了全面重写,使本书更简练。曾经有读者对本书以前版本的编辑质量提出了抱怨,这一次我们花了很大力气请到了一位极为优秀的编辑。下面是本书与上一版之间的主要不同点。
增加了Java中现在内建的新断言检查功能的论述
二进制文件I/O现在是用类ObjectInputStream和ObjectOutputStream,而不是用DataInputStream和DataOutputStream。对于原型和字符串的I/O来说,这两种情况是相同的。但对于类对象来说,ObjectInputStream和ObjectOutputStream面向对象的意味更重一些;而且更重要的是,ObjectInputStream和ObjectOutputStream使用更简便,执行速度更快。
本书的上一版本可选择先介绍文本文件或先介绍二进制文件,但这样就造成了内容上的重复,而某些教师不喜欢这种重复,并且就我们所了解的情况来看,没有人会选择先介绍二进制文件。因此,本书要求先介绍文本文件,再介绍二进制文件。这样,我们的讨论就会更加简练,内容的组织方式就更受教师们的欢迎(当然也可以完全跳过二进制文件的介绍)。
本书增加了对统一建模语言(Unified Modeling language,UML)的介绍。有关UML的内容都是可选的。
第二版中有关JOptionPane的内容在第2章,而本书将其移到了附录10中。因为有些教师告诉我们他们不会讲授这些内容,所以我们将这部分内容从第2章中拿出去,来简化这一章。如果有哪位教师想讲授这部分内容的话,可以在讲授完第2章后,从附录中讲授这部分内容。
上一版中的第15章讲述了一些更高级的图形方面的技巧,如绘制图像、高级色彩填充,以及字体的控制。这一章在本书中已经删去。有些教师告诉我们,他们从来也不讲授这方面的知识,而且他们更喜欢书薄一点。然而在本书的第12章、第13章和第14章中,仍然包含了Swing窗口界面和小程序方面的扩展知识。
可运行于Windows系统和Linux系统的Java 2 SDK 1.4版本,以及可运行于Windows系统和Linux系统的Sun ONE Studio 4的社团版集成开发环境(以前称为Forte for Java 4,Community Edition)可到Sun公司的网站下载。本书中的练习还将用到一个名为TextPad的共享软件,该软件是一种更简单的集成开发环境,运行于Windows环境中。初学者会发现该软件界面友好而且很容易学,此软件可在本书的代码下载压缩包中找到。因为我们增加了Sun ONE Studio 4,所以我们就不再需要JBuilder。尽管JBuilder也是一种非常优秀的集成开发环境,但我们觉得一本书中出现三种集成开发环境的选择会让这些刚接触Java的学生们无所适从。如果你喜欢使用JBuilder,那么可以让你的学生从Borland公司的网站上下载JBuilder的试用版。网址是http://www.borland.com/。
Java 2涵盖
本书针对Java的最新特性对内容进行了升级,包括断言检查、Swing和文件I/O类的最新版本。本书中的代码均在Sun的Java 2 1.4版本上测试通过。
主题顺序的灵活性
对于教师而言,本书能适应教师教学的方式,而不是让教师适应本书。本书没有严格地指明课程中各个话题必须遵从的讲授次序,另外也没有规定课程内必须要使用的特定库。教师们可以很容易地改变各个章节的讲授次序。本序末尾有一个表格解释了资料重排的细节,而且每章开头的"必备知识"一节更详细地讲述了这一点。
因为Java甚至都没有简单的控制台输入,所以很多课本(甚至包括较高级的课本)都提供了用于控制台输入的某种补充类。本书希望尽可能少地新增非标准软件,因此这里只补充了一个简单的类(用于控制台输入)。即使是这样一个控制台输入类(本书较早地引入了该类),对学生而言也是全书中一个容易理解的编程示例。其他所有软件都来自标准Java库,这些库则是任何Java安装中的一部分。
问题求解与编程技术
本书的目标是向学生们讲授基本的问题求解及编程技术,而不仅仅是一本Java语法书。本书含有大量的案例学习及编程技巧,另外还有很多章节阐述了重要的问题求解及编程技术,如循环设计技术、调试技术、样式技术、抽象数据类型、基本的面向对象编程(包括事件驱动编程),及其他计算机科学话题。
面向对象技术与传统技术
所有真正要教授Java的课程都必须较早地讲授类,这是因为几乎Java中的所有东西都涉及到类。一个Java程序就是一个类。字符串的数据类型也是一个类。甚至等于运算符(=)的行为也依赖于比较的对象是类还是较简单的数据项。类无可避免,除非利用极长而又复杂的"神奇公式(magic formulas)"方式。本书很早就引入了类。第1、2章就引入了一些类的用法示例。第4章讨论了定义类。此外,到第7章末尾之前已给出了所有类相关的基本知识(包括继承),这中间省略第6章亦可。不过,有些类及继承方面的话题也可推延到课程稍后再阐述。
虽然本书很早就引入了类方面的内容,但它并没有忽视传统的编程技术,如自顶向下的设计技术、循环设计技术等。这些古老的话题不再是焦点,但它们仍是所有初学者都需要的知识。
UML
本书中新增了对UML的介绍,这部分内容起自第4章。想把UML知识放到更后面一点来讲授的教师们可以跳过这部分内容,继续讲授下面的知识。
Swing GUI和Applet
自Java 2的第一版开始,Java就带有一种名为Swing的改进型GUI(graphical user interface,图形用户界面)库,程序员们利用Swing能设计出轻便的GUI。本书利用Swing向学生们传授如何生成专业外观的窗口式界面。在学习过程中,学生们能学到事件驱动编程,另外还能实践面向对象编程。
在对这些材料进行了课堂试验并收集了教师们的意见后,我们发现正规的Swing GUI和applet相比,前者是教授面向对象编程的更可行的方式。因此我们更强调Swing GUI。这有原可据,因为几乎所有的高级applet工具其实往往就是Swing工具。但是,考虑到那些仍希望较早接触applet的人,第1章有一节(可选)大概介绍了applet。第13章则详细讨论了applet,这部分内容也许应提前论及(不按章节编号)。教师们可以选择较早介绍GUI,也可以延后介绍,甚至根本就不介绍。
除了第1章中这部分可选的GUI内容之外,本书还有整整三章都和GUI有关,内容涉及Swing GUI和applet。
语言细节及示例代码
本书会讲授编程技术,而不仅仅是讲授Java语言。但是,不管是学生还是教师,都不会满足于一门不讲授编程语言的介绍性编程课程。除非抚慰了学生对语言细节的恐惧感,否则常常不可能让他们专心讨论较大的问题。基于这个原因,本书完整地解释了Java语言特征,并给出了大量的示例代码。考虑到程序的完整性,甚至还给出了示例的输入和输出。除了书中的完整示例外,甚至在本书的代码下载压缩包中还有特别完整的示例。
自测题
每章均有自测题,这些题目难度相差甚大。有些问题的答案只需一个词即可,而有些则需要读者编写一个完整的、有一定难度的程序。各章的末尾给出了所有自测题(包括那些要编写完整程序的问题)的完整答案。
课堂检验
本书内容已经通过了充分的课堂检验。其中很多内容和表述方式都根据课堂检验而进行了修订。
补充材料
下面所讲的补充材料是本书中没有包含的,可以从出版商或Internet获取这些内容。
本书的代码下载压缩包
本书的代码下载压缩包中包含着本书中所有的程序及类。本书还用到了一个名为TextPad的共享软件,该软件是一种更简单的集成开发环境,运行于Windows环境中。学生们会发现该软件比Sun ONE Studio 4(以前称为Forte)更容易掌握。该软件的下载地址为:http: //www.textpad.com。
教师资源指南及公司网站
教师们能获得的工具包括一个按章编排的教师资源指南,该指南含有大量的教学提示、带答案的小测试题,以及很多编程练习的答案。公司的网站上有代码、PowerPoint幻灯片及其他教学资源。教师们可以联系相应的Prentice Hall销售代理去取得一份教师资源指南,以及如何访问公司网站的相关信息。至于销售代理的名称及电话,请打电话给Prentice Hall公司的售后服务热线,电话是1-800-526-0485。本书补充信息及其他Prentice Hall产品可以在Prentice Hall的网站上找到,网址是http://www.prenhal1.com/。
其他资源
还可以从其他很多我们没有提及的供应商那里获得更多的Java资源,但这些资源可能是要收费的。我们介绍其中一种资源,来自Public Static Void Main公司的JJ环境。这种环境包含一个简单的集成开发环境和一个可通过互联网访问的课程管理软件。JJ环境与本书内容十分吻合。尤其是本书中用于键盘输入的SavitchIn类就是JJ安装库中的类。更多详情,请访问该公司的网站,网址如下。
http://www.learnjavanow.org/
Walter Savitch
wsavitch@ucsd.edu
http://www.cse.ucsd.edu/users/savitch
