━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

译者序

《java编程思想》已๐经成为ฦ了广大java程序员和爱好者们手中必备的宝典,它在广大

读者心目中的地位已经无຀可替代。其作者uceeckel也๣已经成为了众多java程序员顶礼

膜拜的大师。随着java技术的展以及对jaທvaທ认识的不断深入,uceecນkel推出了《jaທva

编程思想》第三版,在这里我们应该向他致敬,他不断精益求精、锐意进取的精神正是我们

应该努力学习的榜样。

随着软件开技术,尤其是9eb应用的开技术的展,java越来越受到เ人们的青睐,

越来越多的企业都选择使用java及其相关技术,例如j2๐ee技术来构建它们的应用系统。

但是,掌握好java语言并不是一件可以轻松完成的任务,如何真正掌握javaທ语言,从而

编写出健壮的、高效的、灵活的程序是jaທvaທ程序员们面临的重大挑战。

《java编程思想》就是一本能ม够让java程序员轻松面对这一挑战,并最终取得胜利的

经典书籍。本书๰深入浅出、循序渐进地把我们领ๆ入java的世界,让我们在不知不觉中就学

会了用java的思想去考虑问题、解决问题。本书๰不仅适合java的初学者,对于有经验的

java程序员来说,每次阅读本书也๣总是能ม够有新的体会,这正是本书的魅力所在。

本书的第二版由侯捷先生翻译,他已经把翻译原着这项工作做到了极致,我们在翻译过

程中ณ总是诚惶诚恐,一方面害怕曲解了原着的意思,另一方面也๣害怕破坏了第二版译着已经

做出的让广大中国读者认可本书๰的种种努力。

我们在翻译本书的过程中力求终于原着。对于本书中出现的大量的专业术语尽量遵循标

准的译法,并在有可能ม引起歧义之处着上了英文原文,以方便读者的对照理解。

全书的翻译由陈昊鹏和饶若楠合作完成,薛翔、郭嘉和方แ小丽ษ也参与了全书的翻译工ื作。

由于我们水平有限,书中出现错误与不妥之处在所难免,恳请读者批评指正。

前言

我的兄弟托德正准备从硬件工ื业转移到程序设计领域,我曾向他建议,下一次技术革命的重

点将是基因工程。

我们将使用微生物来制造食品、燃料é和塑料;这些微生物不仅能清除污染,还能让我们付出

比现有少得多的代价就能主宰整个物质世界。我曾以为ฦ,相比之下计算机革命将显得微不足

道。

后来我意识到自己้犯了科幻家常犯的错误:迷信技术的力量当然,这在科幻里司

空见惯。有经验的作家都知道,故事的重点不是技术,而在于人。基因工程将对我们的生

活造成深远的影响,但它未必就会使计算机革命或者至少是信息革命黯然失色,因为ฦ正

是计算机技术推动了基因工程的展。信息指的是人与人之间的沟通。当然,汽车、鞋子、

包括基因疗法,这些都很重要,但它们最终都只是表面现象。人类如何与世界ศ相处才是问题

的本质。这个相处的过程就是沟通。

本书恰好就是一个例子。很多人认为ฦ我很大胆、或者有点狂妄,因为我把所有资料都放在网

络上。“还有谁会购买呢?”他们这样问。如果我的性格保守谨慎一些,我就不会这么做。但

是我真的不想再用传统方式来编写一本新的计算机书籍。我不知道这么做会有什么后果,但

结果表明,这是我在写书经历中ณ做过的最明智的一件事。

先,人们开始把改正后的意见反馈给我。这是个ฐ令人惊叹的过程,因为ฦ人们仔细检查每个ฐ

角落、每个缝隙,找出技术上和语法上的种种问题๤,让我得以改正所有错误,而这些错误单

凭我个人是很难觉察到的。人们对这种作法还有些顾虑,他们常常说“我并无冒犯之意…”,

然后扔给我一大堆错误。无疑我自己้从未察觉过这些错误。我很喜欢这种集体参与的过程,

这也使这本书更加特别。这些反馈很有价值,所以我使用称为ฦ“bacນktalk”的系统创建了一

些应用,来对这些建议进行收集和分类。

但是,很快我就开始听到“嗯,很好。把书做成电子版放到网络上是个好主ว意,可是我希๶望

购买印刷出版并装订成册的书๰籍”。我曾经作出努力,让每个人都能很容易地打印出美观的

书๰籍,但这样仍然无法满足人们对印刷书籍的需求。大多数人都不习惯在计算机屏幕上阅读

整本书๰,也不喜欢总是带着一捆捆的纸,所以即使这些打印出来的书籍再美观,也吸引不了

他们而且激光打印机的碳粉并不便宜。看来即使是计算机革命,也๣难以抢走出版商的生

意。不过,有个学生提出这也许会在未来成为一种出版模式:先在网络上出版书๰籍,当它引

起足够的关注以后,才考虑制ๆ作纸质版本。目前๩,绝大多数书๰籍都不赚钱,这种新方式或许

可以给整个出版业带来更多的利ำ润๰。

在另一方面,这本书๰也带给我一些启迪。开始,我认为java“只不过是另一种程序设计语言”。

从许多方面看的确如此。但随着时间流逝,以及对java学习的深入,我才开始明白,这个

编程语言的目的,与我所见过的其它语言根本不同。

程序设计就是对复杂度的管理。它包括:待解问题的复杂度和所依赖的底层机器的复杂度。

正是因为这种复杂度的存在,导致了大多数项目的失败。并且据我所知,还没有哪个程序设

计语言全力将主ว要设计目标放在“征服程序开与维护过程中的种种复杂度”上

1

。当然,许

多编程语言设计时也确实考虑到了复杂度问题,但它总是与被视为更本质的问题๤混在一起。

当然,那些也都是会让程序员感到困扰的问题。比如,cນ++必须向上兼容于cນ为使cນ程序

员容易过渡,并具有执行效率高的优点。这两ä点都很有用,并且帮助cນ++取得了成功。

不过,两ä者也๣引入了额๩外的复杂度,使得某些项目无法完成。当然,你可以归咎于开或

管理人员,但如果有某种语言可以帮助我们找到错误,何乐而不为呢?visualbຘasicນvb

是另一个ฐ例子,它被局限于basic语言它并不把可扩展能力作为设计目标,这就使得

所有堆积于vb之上的扩充功能ม,都造成了可怕且难以维护的语法。perl也๣向上兼容于

aທ9k、色d、grep、以及其它unix工具,这就导致了被诟病为“能写不能读”的程序代码也

就是说,一段时间之后,你就无法看懂这些代码。另一方面,c++ใ、vbຘ、perl、smaທlltalk

之类的编程语言,都为复杂度问题付出了相当大的努力,在解决特定类型问题๤的时候非常成

功。

当我开始理解javaທ之后,印象最深的莫过在java上体现出的sun公司的设计目标:为ฦ

程序员降低复杂度。就好象说:“我们关注的是降低编写健壮代码的困难程度和需要的时间”。

以前๩,编写健壮代码将导致性能ม降低尽管有许多承诺,jaທva总有一天能够执行得足够快,

不过java的确大大缩短了开时间;相比同等功能ม的c++ใ程序,它只需一半甚至更少的

时间。只凭这一点,就足以省下大量的时间与金钱。不过,java并不仅仅如此。它又持续

引入了一些日益重要的复杂任务,比如多线程和网络编程。并且通过语言本身的特性和程序

库,使得这些工作变得轻而易举。最后,javaທ还着眼于某些有着极高复杂度的问题:跨平