Java 类参考包

作者:Dave Dittrich

出版社: Specialized Systems Consultants (SSC)

ISBN 0-916151-95-6

价格 $7.00

评论者: Dave Dittrich

早在 80 年代中期,当我第一次从波音公司的一个壁橱里拉出一台 Unix 工作站——一台运行 System V Unix 的 Intergraph InterPro——并开始自学 Unix 系统管理时,我需要一些东西来帮助我记住 shell 命令选项。我买的第一本参考书是 Specialized Systems Consultants 出版的 System V 命令参考。直到今天,它还放在我的办公桌抽屉里,而且每当我遇到“在 System V 系统上,foobar 命令我需要使用哪个选项?”这个问题时,它仍然能派上用场。如果我没记错的话,这张参考卡当时花了我大约 5 美元,这和十年后的今天价格差不多。

SSC 推出 Java 类库参考并不令人惊讶。这些参考是他们出版业务的支柱,现在已扩展到 Linux 文档、CD-ROM 软件合集、Linux 和 WWW 杂志——甚至还有 T 恤!在 Java 存在的这个新的“互联网一日千里”的世界里,我非常怀疑这些卡片是否会像我的 System V 参考那样有相同的保质期,但 System V 也和那时不一样了。但我相信许多人仍然会觉得它们同样有用。

在尝试评估这些新的 Java 参考卡之前,我认为有必要考虑这些参考是什么,不是什么,以及哪些人可能会使用它们。

这些参考卡不是 Java 语言的入门概述,不像今天书架上的绝大多数 Java 书籍那样。它们不包含像 O'Reilly & Associates 的 Java in a Nutshell 那样针对每个包的教程或入门文本。它们也不是 API 文档,不像 Addison-Wesley 的 The Java API(共两卷)那样。我不认为它们与目前市面上的任何其他东西(也许除了 Java API 超文本页面本身,这些页面有时使用起来有点笨拙)是“竞争对手”。那么它们是什么,它们的工作做得如何呢?

Java 参考卡——一张用于 java.applet、java.awt 和 java.util 包,另一张用于 java.lang、java.io 和 java.net 包——是对这些包中每个类的方法和重要常量的简洁、分类(此处没有双关语)列表。不多也不少(嗯,至少没有少太多)。

这两张参考卡总共包含 38 个面板。虽然没有明确说明,但它们使用的语法有点类似于 Unix man 页面,其中可选参数用方括号括起来。例如,与其为每个方法签名列出两行,像这样

BufferedInputStream(InputStream dest);BufferedInputStream(InputStream dest, int buffersize);

它们只包含一行,像这样

BufferedInputStream(InputStream dest [,int buffersize]);

虽然这种语法与你在其他 Java 书籍中找到的语法不完全相同,但你很快就会习惯它,而且大多数人可能会欣赏它为列表带来的简洁性。

每个包都构成自己的部分,包中的类位于自己的图形框中。这使得每个包中的类之间的界限清晰。框标题仅包含类名。例如,仅标题 Class 就位于 JAVA.LANG 部分的框的顶部(我不确定为什么他们要大写),而不是像编译器期望的那样明确标记为 java.lang.Class。在实际使用中,可能很难确定你需要导入什么才能在代码中使用这个类。当你翻到卡片的第十三页并找到 Color 类时,你必须逐页回溯才能找到 ColorJAVA.AWT 包中,并且知道要将 import java.awt.Color;(或更通用的 import java.awt.*;)添加到你的代码中。(这是一个很小的抱怨。如果它真的困扰你,你总是可以用笔写上包名)。

仔细阅读一些类描述也发现了一些明显的遗漏错误和一个参数混淆。例如,在 JAVA.AWTComponent 部分,缺少的方法有:checkImage()getPeer()location()prepareImage()size()toString()repaint() 方法的 maxWait 参数放在列表的末尾,而它应该放在开头。由于这些方法中的大多数都涉及复杂的图像生产者/消费者机制,或者是对布局管理器编程的人比那些仅仅构建简单 GUI 的人更感兴趣的辅助功能,因此这些遗漏可能对大多数 Java 程序员来说无关紧要。Label 中缺少 addNotify(),但 1.0.2 JDK API 文档本身就这个方法说,“大多数应用程序不会直接调用此方法。”

更明显的遗漏是缺少两个完整的包,java.awt.imagejava.awt.peer。诚然,这两个包对于那些进行非常复杂的图形编程,或为 Windows、Macintosh 和 Motif 以外的窗口管理器编写新的 AWT peers 的人来说更有趣,但它们仍然是程序员可能使用的 JDK 类库的一部分。图像生产者/消费者范例非常令人困惑,有时在 Java 书籍中也因此而受到批评,但如果程序员还必须手边有一本 Java in a Nutshell 才能获得完整的 API 图景,那么许多人可能会选择直接使用这本书。

作者 Randy Chapman 通过他参与 Linux 移植的工作,对 JDK 非常熟悉,我从他在华盛顿大学学术计算机中心工作的时候就认识他,他是一位非常细心和严谨的程序员。我不确定这些遗漏是由于使用了较旧的 API,还是因为目的是为了简化普通程序员的使用,或者仅仅是时间压力的结果。(毕竟,他仍然是一名学生,教育需求在他的优先事项列表中名列前茅。我不会因此责怪他。)由于没有明确说明,我将假设目的是简化卡片,并得出结论,目标受众将是初级到中级程序员,他们坚持编写“普通”的 Java 应用程序或小程序,而不是那些认为应该成对购买三倍浓缩咖啡的 Java 狂热者。(这些人更喜欢编写 Perl 脚本来直接从 JDK 源代码树中提取这些信息,并通过 nroff 运行结果!)

总的来说,这些卡片放在键盘旁边非常方便,并且将被证明非常物有所值,SSC 对它们收取的价格很低。我希望更多的书能有这么高的实用性与价格比。

Dave Dittrich (dyittrich@cac.washington.edu) 在华盛顿大学的客户服务、计算与通信部门工作。访问他的网页: http://www.washington.edu/People/dad/.

加载 Disqus 评论