编写第2版
自出版了本书第1版之后,Sun认证程序员:Java 2(Sun Certified Programmer for Java 2, SCPJ2)考试的平台有了相当大的变化。当前考试(SCPJ2 1.4)中最引人瞩目的变化就是去除了GUI和I/O,并将重点移到了语言的核心特征上。我们的看法是,新的考试要求对语言有更精辟的理解及更多的实践经验,而不是纯粹地复述事实。语言的熟练程度是成功的关键。
我们删除了第1版中的I/O及GUI等主题,因为现在它们与SCPJ2考试不再有关系。这些主题更多地与Sun认证开发人员:Java 2(Sun Certified Developer for Java 2, SCDJ2)平台考试相关,将来也许会在一本讨论开发人员考试专题的著作中涉及这些主题。
由于SCPJ2考试的重点放在Java的核心特征上,因此第2版对相关主题提供了更为深入的阐述。本书不仅仅涵盖了考试目标,还涉及了一些有助于掌握考试主题的辅助话题。
第2版仍是SCPJ2考试的一站式指南。它同时提供了考试所需的理论原理及实践知识。使用本书可以学习Java、通过SCPJ2考试,以及今后将它作为一本便携式语言指南。本书还专为SCPJ2升级考试准备了一个附录。为了方便做好考试准备,第2版还带有一张补充资源CD,其中包括了Whizlabs Software开发的几套模拟试题。
我们也考虑了读者发过来的反馈。处理大量电子邮件所花费的很多时间并不是一无是处。我们欣赏每封电子邮件,在此也深表感谢。
在第2版的准备过程中,我们原来关于第2版的所有设想(打算自然流畅地随手写出来)都变得支离破碎。我们仔细权衡了第1版中的每句话,很多段落都没有逃脱被改写的命运。第2版中还广泛地运用了UML(Unified Modeling Language,统一建模语言)。我们还添加了大量的新复习题。在涵盖新主题、扩展现有主题的同时,第2版还特意创造了一些新的例子、示意图及表格。
关于本书
本书广泛地涵盖了Java编程语言及其核心应用程序编程接口(API,Application Programming Interface),另外还特别强调了Java的语法和用法。本书主要打算面向那些准备参加Sun认证程序员:Java 2平台(1.4考试)(也被称做SCPJ2考试)的专业人员,不过它也适用于任何希望掌握Java语言的程序员。为了满足这两大目标,本书深入地涵盖了Java语言的基本特征及其核心API。
目前对认证Java程序员的需求量很大而且还在不断增长。Sun Microsystems公司将SCPJ2考试定义为一种专业人员参加的、以验证参与人技能的考试。该证书为IT业界提供了雇用这类专业人员的标准,并且使得专业人员将他们的Java技巧转变成一种对职场发展很重要的通行证。
本书能帮助读者掌握Java语言的所有核心特征,而这种对语言的掌握因通过考试而达到极致。本书广泛地涵盖了Sun为考试而定义的所有目标。由于考试目标是选择性的,它们也就没有涵盖到Java的很多基本特征。本书同样也广泛涵盖了一些附加主题,每个Java程序员都应该掌握这些主题才能在该领域游刃有余。因此,本书也是学习Java编程语言的一种综合性初级读本。
本书并不是Java的完整参考手册,因为它并没有试图列出Java系统开发工具包(SDK, System Development Kit)API文档中各个类的各个成员。本书的目标并不是归档Java SDK API。本书同样也不是一本教授编程技术的书。本书的重点在于Java编程语言特征及其语法、正确用法等。
本书假定读者有一定的编程背景。我们相信,任何通览本书的程序员都能通过考试。一位Java程序员可以轻易跳过那些已经理解了的材料,而去关注那些有待增强的部分;而那些新接触Java的程序员也会找到一些从基本原理开始解释的概念。
每个主题都通过示例加以解释、讨论,随后会通过复习题和练习进行回顾以巩固这些概念。本书并不倾向于任何具体的平台,不过在必要时也会提供特定平台的细节。
本书的用法
读者根据自己的编程背景,可以选择顺序地,或非顺序地通览本书。那些希望移植至Java的非Java程序员可以阅读第1章,这里简略地介绍了面向对象编程概念及编译、运行Java应用程序的流程。对那些准备参加SCPJ2考试的人来说,本书单独用一个附录给出了参加考试的所有相关信息。
目录、表格清单、示例、示意图及综合索引等方便了读者定位本书中讨论的主题。
特别地,我们希望读者注意本书的下列特征:
考试目标与附加目标
· 在每章开头会明确列出考试目标,附带地还会列出所有附加目标。· 这些目标是由Sun定义的,它们会被分解到各个主要区块中,从而细化了考试课程。· 本书按章节组织,这些章节逻辑上与这些主要区块的次序相同。· 另外有个单独的索引重新列出了这些目标,其中对课程提纲中的各个区块会加上一些学习笔记,以此向读者指出考试中主要的话题。· 我们认为附加目标对掌握语言这一终极目标而言是很重要的。
复习题
每个主要话题之后提供了复习题,其目的是测试、巩固那些材料。这些复习题反映了实际考试中会提问的问题类型。本书单独用一个附录给出了复习题的注释式答案。
示例0.1 源代码示例
我们鼓励用代码示例进行试验以巩固本书中的材料。从本书的网站上可以下载这些 示例。
书写Java代码时用到了mono-spaced字体。代码示例或代码片断中的代码在正文中是通过行号引用的,而行号则是利用代码中的单行式注释指出的。举个例子,在如下代码片断中,(1)行处的doSomethingInteresting( )方法调用可能会做一些有趣的事。
// ...
doSomethingInteresting(); // (1)
// ...
类名和接口名都以大写字母开头,包名、变量名及方法名都以小写字母开头,常量名则全部为大写字母。
章节小结
每章结尾是话题的小结,这里指出了各章中讨论的主要概念。
编程练习
各章末尾的编程练习提供了实践这些概念的机会。本书同样单独用一个附录给出了编程练习的解答。
模拟考试
本书单独用一个附录给出了一套完整的模拟试题,读者在觉得学有所成时可以尝试一下。另外,本书附带CD上也有几套SCPJ2 1.4考试的模拟试题。
Java 2 SDK和API文档
本书会用灰色竖条来强调那些能在核心Java API类中找到的方法和字段。
另外也会类似地强调API信息后跟的任何解释。
为了最好地利用本书来准备SCPJ2考试,我们强烈推荐安装最新版(最低版1.4)的SDK及其附带的API文档。本书只关注Java 2,并不认同早期的那些版本。
Java 2平台升级考试
对那些已经参加Sun认证程序员:Java 2平台(1.2考试)的人,假设他们还希望准备参加Sun认证程序员:Java 2平台升级考试,于是我们又给出了一个附录详述了升级考试。这个附录包含了升级考试的目标,另外还对课程大纲的各个区块给出了学习笔记,以向读者指出升级考试中最主要的那些主题。附带CD上含有升级考试的模拟试题。
附带CD
附带CD上包含了很多有助于做好考试准备的信息,另外还为参试人员提供了大量的模拟试题以测试这些人的技能。CD上包含的软件模拟了近似考试时的情况,这能让应试人员熟悉该考试环境。附录H给出了CD内容的细节。
本书的网站
本书还有一些支持网站提供了辅助材料。
http://www.ii.uib.no/~khalid/pgjc2e/
http://www.awprofessional.com/ (搜索ISBN 0201728281)
网站上的内容包括:
· 本书中所有示例及编程练习的源代码
· 模拟试题引擎
· 勘误表
· 指向各种Java资源(证书、讨论组、工具等)的链接
在如下网站上可以找到Java 2 SDK标准版及其文档的相关信息:
http://java.sun.com/j2se/
而在如下网站上可以找到当前权威的Java编程语言技术参考,即Java Language Specification, Second Edition(同样由Addison-Wesley出版):
http://java.sun.com/docs/books/jls/
请求你的反馈
我们已经投入了可观的精力以确保本书内容的精确性。有多位Java专家校对过本书的手稿,所有代码示例(包括代码片断)都已经在各种平台上加以编译及测试通过。本书如果还剩下任何错误,那也完全是作者的责任。
欢迎任何问题、评论、建议及更正。不管本书对你而言是好是坏,我们都希望得到你的评价。任何反馈都是有价值的。通过如下电子邮件地址可以联系本书的作者:
pgjc2e@ii.uib.no
关于作者
Khalid A. Mughal
Khalid A. Mughal是挪威Bergen大学信息情报系的副教授。Mughal教授负责设计并实施信息情报系的各种课程(有些用到了Java)。多来年,他执教过编程语言(Java、C/C++及Pascal)、软件工程(面向对象的系统开发)、数据库(数据建模和数据库管理系统)及编译器技术。Mughal教授还在面向对象的编程和系统开发(其中用到了Java及Java相关技术)中承担了不同层次的大量课程和讨论会,既有学校的也有IT业界的。Mughal教授是本书的主要作者,他负责编写涉及到Java主题的那些材料。
Mughal教授同样还是挪威一本Java编程方面介绍性课本的主要作者(Java som f?rste programmeringsspr?k/Java as First Programming Language, Cappelen Akademisk Forlag, ISBN 82-02-21782-2, 2002),该书是他与Torill Hamre、Rolf W.Rasmussen两人合著的。
Mughal教授的主要研究领域是编程语言及工具(编程环境)的理论、设计与实现。他目前的工作涉及到在学习型内容管理系统开发中应用对象技术。在过去3年中,Mughal教授主持开发并运营着一门基于Web的Java编程课程--该课程是为校外学生提供的。
Mughal教授还是ACM会员。
Rolf W. Rasmussen
Rolf W.Rasmussen是一位软件工程师,他多年来在学术上、专业上都一直使用着多种编程语言,其中就包括Java。Rasmussen就职于vizrt的System Creator公司,该公司致力于为TV广播业开发解决方案,其中包括了实时的3D图形渲染器及内容和控制系统等。
Rasmussen主要从事于控制和自动系统、视频处理、版式设计及实时可视化。他过去曾参与了Java类库的净室实现,他也是一位Free Software Foundation(自由软件同盟)的撰稿者。
Rasmussen主要负责编写本书中给出的复习题及其答案、编程练习及其解答、模拟试题,还有所有与参加SCPJ2考试相关的实用知识。
正如前面提到的,Rasmussen还是一本Java编程语言方面介绍性课本的合著者。
致谢(第1版)
本书中稍稍应用了几个简单图形的绘制以展示GUI构建的各个方面。就我们所知,这种应用的思路首先出自于Data Structures and Problem Solving Using Java(M.A. Weiss, Addison-Wesley, 1998)一书的附录D中。
在Addison-Wesley-Longman(AWL)公司,我们希望感谢Emma Mitchell,感谢她在本书写作一开始就给予的支持与指导;还要感谢AWL的Martin Klopstock,感谢他容忍了怪异的流程而使本书最终能够付梓;另外要感谢CRB Associates的Clive Birks,感谢他以专业的眼光审阅了本书的内容;最后还要感谢AWL的Sally Mortimore,感谢她注视着我们终于完成本书。我们同样对AWL公司其他幕后专业人员所付出的努力表示感谢。
在本书编写过程中涉及了很多评审人员。首先,我们想感谢AWL委托的5位匿名评审人员来审阅最初的草稿。他们的介入对本书后续的编写非常有用。
还有一些人对各个阶段中材料的不同部分提供了反馈,他们是:Jon Christian L?nningdal、Tord K?lsrud、Kjetil Iversen、Roy Oma及Arne L?kketangen。这里也对他们的帮助表示衷心的感谢。
我们同样非常感谢Laurence Vanhelsuwé、Kris Laporte、Anita Jacob及Torill Hamre,只能在此以只言片语感谢他们承担了最终稿件的繁琐评审任务并提供了如此广泛的反馈。我们还想感谢Marit Mughal,感谢他以一位资深英语教师的独到眼光阅读了本书的手稿。
我们现在也理解了为什么前言中不得不提到家庭成员。如果没有家庭的爱、支持及理解,本书仍将只是想像中的事物。Khalid希望感谢Marit、Nina及Laila,感谢他们的爱,感谢他们在本书编写过程充当了最重要的支持者。另外还要感谢Birmingham的那些人鼓励我们这么做。Rolf希望感谢Liv、Rolf V.、Knut及Elisabeth,感谢他们在Rolf承担本书写作期间那些怪异的工作时间,特别要Marit准备了美味的晚餐以供他在午夜工作时享用。
致谢(第2版)
大量读者反馈帮助我们改进了第1版。我们想感谢下列读者为此而付出的努力:
Michael F. Adolf、Tony Alicea、K?re Augl?nd、Jorge L. Barroso、Andre Beland、Darren Bruning、Paul Campbell、Roger Chang、Joanna Chappel、Laurian M Chirica、Arkadi Choufrine、Barry Colston、John Cotter、Frédéric Demers、Arthur De Souza、djc、William Ekiel、Darryl Failla、John Finlay、Christopher R. Gardner、Marco Garcia、Peter Gieser、George、Paul Graf、Shyamsundar Gururaj、Ray Ho、Leonardo Holanda、Zhu Hongjun、Kara Van Horn、Peter Horst、Nain Hwu、Kent Johnson、Samir Kanparia、Oleksiy Karpenko、Jeffrey Kenyon、Young Jin Kim、Kenneth Kisser、Billy Kutulas、Yi-Ming Lai、Robert M. Languedoc、Steve Lasley、Winser Lo、Naga Madipalli、Craig Main、Avinash Mandsaurwale、Thomas Mathai、S. Mehra、Yuan Meng、Simon Miller、William Moore、Anders Morch、George A. Murakami、Sandy Nemecek、Chun Pan、Abigail García Pati?o、Anil Philip、Alfred Raouf、Peter Rorden、Christian Seifert、Gurpreet Singh、Christopher Stanwood、Swaminathan Subramanian、Siva Sundaram、Manju Swamy、John Sweeney、Harmon Taylor、Andrew Tolopko、Ravi Verma、Per J. Walstr?m、Chun Wang、James Ward、Winky、Chun Wang、Jimmy Yang、Jennie Yip、Yanqu Zhou及Yingting Zhou。
在Addison-Wesley/Pearson Education的UK分部中,我们希望感谢我们的前编辑Simon Plumtree,感谢他在我们"磨蹭"第2版时给予的不断支持及无尽的耐心。我们还想感谢London分部中下列专业人员(过去的及现在的)的帮助和支持:Alison Birtwell、Sally Carter、Karen Sellwood及Katherin Ekstrom。特别要感谢Karen Mosman(她后来转到另一个岗位上了)的鼓励和建议。
在本书临近付梓的时候,我们得到了Addison-Wesley/Pearson Education US分部中Ann Sellers的有力支持。我们想感谢她的努力以及其他专业人员的投入--特别是Greg Doench、Jacquelyn Doucette、Amy Fleischer、Michael Mullen及Dianne Russell--正是他们让本书迈上货架的。同样还要感谢Mike Hendrickson,他总是在OOPSLA会议上侧耳聆听,并且给我们指出正确的出书计划方向。
我们还想感谢Whizlabs Software的那些人,正是因为他们的合作才有了本书附带的CD。这些人当然熟知开发Java技术认证考试模拟器之类的事务。
我们很幸运地有两位Java高手--Laurence Vanhelsuwé和Marcus Green,他们承担了第2版的技术评审工作。同对第1版所做的那样,Laurence始终相伴并提供了无价的反馈,从编写技术书籍的琐碎细节直至很多与Java编程语言有关的技术问题。Marcus根据SCPJ2考试的特殊之处对手稿做出了严格的认证详细审查。我们很抱歉搅乱了他们的复活节度假计划,诚惶诚恐地、最衷心地感谢他们承担了本书的审查任务。
我们无尽感谢自己的内部专任审稿编辑Marit Seljeflot Mughal。她勤奋而苛刻地阅读了本书的大量草稿,通常连极微小的细节都不放过。Marit认为,如果她都能理解我们所写的东西,那么有计算机背景的人无论如何也不会有问题了。不过这种看法仍然有待证实。但如果有任何逗号使用得不正确,则完全是我们的错误--尽管Marit不断地告诉过我们如何使用这些逗号。
我们还亏欠了很多支持Java的个人,他们对第2版手稿的部分内容提供了无价的反馈。这些人有Whizlabs Software的Pradeep Chopra、Seema R.及Gaurav Kohli。令我们觉得遗憾的是,他们的时间仅仅够阅读部分手稿。同样还要感谢Bergen市南森环境与远程感应中心(Nansen Environmental and Remote Sensing Center)的Torill Hamre,感谢她的正确批注和建议。我们也要感谢Bergen大学信息情报系下列硕士生提出的有用反馈:Mikal Carlsen、Yngve Espelid、Yngve A. Aas、Sigmund Nys?ter、Torkel Holm及Eskil Saatvedt。
家庭的支持也始终见证着我们编写本书的过程。家庭成员容忍了我们怪异而冗长的工作时间,包涵了我们餐桌上的先尝为快与先行退席。Khalid想对妻子Marit在本书写作期间给予的爱与支持表示感谢,另外还要感谢他的女儿Nina和Laila。Rolf希望感谢Liv、Rolf V.、Knut和Elisabeth,感谢他们的爱、耐心和支持。
--Khalid A. Mughal,
Rolf W. Rasmussen
2003年3月
挪威,Bergen市