基本信息
- 原书名:Java: The Good Parts
- 原出版社: O'Reilly Media
【插图】

编辑推荐
深入挖掘JAVA之精华
内容简介
计算机书籍
这是一本几乎只讲Java优点的书。
Jim Waldo先生是原Sun微系统公司实验室的杰出工程师,他亲历并参与了Java从技术萌生、发展到崛起的整个过程。在这《Java语言精粹》里,Jim总结了他所认为的Java语言及其环境的诸多精良部分,包括:类型系统、异常处理、包机制、垃圾回收、Java虚拟机、Javadoc、集合、远程方法调用和并发机制。另外,他还从开发者的角度分析了在Java技术周围发展起来的“开发者生态环境”。如果要把Java技术精炼到只含有它的最佳部分,在Jim看来,以上这些就是必须保留的部分。
作者还从历史的视角阐述了Java中某些技术的发展历程,解释了某些问题之所以存在的原因,使人读后有一种“知其所以然”的通透感。阅读《Java语言精粹》不但能使你重温Java的核心机制,还可以使你了解语言的设计者和实现者们是如何权衡、折中并维护各种不同的语言特性,从而成就了这门流行的系统级通用编程语言的。
相信不管是Java语言的学习者,还是使用Java语言构建软件系统的开发者,以及对程序设计语言感兴趣的技术爱好者,都可以从《Java语言精粹》中汲取营养。
作译者
目录
第1章 Java简介 1
Java好在哪里 2
第2章 类型系统 7
类型系统概述 7
为何有三种 9
内在和外表 15
使用须知 16
真实问题 18
第3章 异常 21
导常概述 21
设计理念 25
工作原理 26
使用和滥用 30
异常的另一面 33
第4章 包 37
包概述 37
包和访问控制 40
一个例子 41
包和文件系统 44
译者序
这是一本几乎只讲Java 优点的书。作者总结了他所认为的Java 语言及其环境的诸多精良部分,包括:类型系统、异常处理、包机制、垃圾回收、Java 虚拟机、Javadoc、集合、远程方法调用和并发机制。此外,作者还从开发者的角度分析了在Java 技术周围发展起来的“开发者生态环境”。如果要把Java 技术精炼到只含有它的最佳部分,在作者看来,以上就是必须保留的部分。
作者还从历史的视角阐述了Java 中某些技术的发展历程,解释了某些问题之所以存在的原因,使人读后顿有一种“知其所以然”的通透感。通过翻译《Java语言精粹》,在重温Java 核心机制的同时,译者还了解了语言的设计者和实现者们是如何权衡、折中并维护各种不同语言的特性,从而成就这门广受欢迎的系统级通用编程语言的。相信读者也会有同样的收获。译者认为,不管是Java 语言的学习者,还是使用Java 语言构建软件系统的开发者,以及对程序设计语言感兴趣的技术爱好者,都能从《Java语言精粹》中汲取营养。
我为什么选择翻译这《Java语言精粹》
说起《Java语言精粹》的翻译,自然要提到当时在电子工业出版社博文视点工作的周筠老师。认识周老师是好多年前的事了,但真正面对面坐下来聊天不过是去年的事情。在那之后,周老师更成了我的良师,我常去翻翻她的新浪微博(@ 出版人周筠),而且常常能从中领悟不少有益的东西。有一天,看到周老师在征集新书译者,经过考虑,我很快向她表达了自己的意向,再加上周老师对我的信任,此事便得以促成。在这一过程中,还要好好谢谢当时同在博文视点的鸬东翔编辑,不是因为他让我多认识了一个汉字,而是因为他对我太多的信任和帮助。当然,翻译《Java语言精粹》的另一个重要原因是翻看原书后对精彩内容的喜爱,这些前面已经提到了。还有一个原因:在我个人的技术知识结构中,编程语言的知识占了很大一部分,而之前翻译过的几《Java语言精粹》大都与模式有关,更偏于“坐而论道”。其实我个人一直希望有机会翻译一本语言方面的书注1。
注1 : 为了节省成本和便于读者阅读,我们将原书版式进行了压缩,原书页码用“ ”表示,供读者对照阅读。《Java语言精粹》的索引(包括正文中的交叉索引)所列页码为原英文版页码。
关于勘误
翻译与阅读不同,翻译过程会注重更多的细节。译者在翻译中就发现了原文的一些小问题,对于这些小问题,译者都通过邮件得到了作者的确认,然后直接按确认后的内容翻译的,且没有提供译注。同时,译者也在O’Reilly 网站上提交了这些勘误,说到这个,也要感谢作者Jim Waldo 先生及时的回复。
致谢
除了上面提到的几位,《Java语言精粹》在翻译和出版过程中还应感谢以下一些人。首先是《Java语言精粹》的审校人张伸(新浪微博@loveisbug),之前我翻译《敏捷开发的艺术》和《软件开发者路线图》时,他就热心细致地帮我审校过书稿,这次作为正式的审校人,他更是细致地通读了全稿,从中发现了不少小错误,还提出了大量的改进意见。其次要感谢群硕软件开发(上海)有限公司前高级软件工程师高远(新浪微博@ 狼大人),我翻译过的所有作品都有他的帮助,这《Java语言精粹》也不例外,他协助初译了《Java语言精粹》第11 章的内容。祝愿如今远赴异域的他一切都好。感谢博文视点的李利健编辑,她从整体结构和行文风格方面对译稿提出了许多意见和建议。此外,还有博文视点的丁曼、张春雨、刘皎,以及许多不知道名字的为《Java语言精粹》的出版辛勤工作的人,这《Java语言精粹》能与读者见面,源于他们共同的努力。还有“译言网”和“译网情深”翻译论坛上的一些并不熟悉的朋友,感谢他们帮我拆解了不少疑难杂句。最后,感谢我的家人,从爷爷、奶奶、爸爸、妈妈到我的妹妹,还有许多师长亲朋,从小到大,走过的每一步都饱含着他们的鼓励、支持与期盼。
王江平
2011 年3 月 于上海浦东
前言
写这《Java语言精粹》出于如下考虑:Java 在经历了15 年左右的发展之后,已经变成了巨大的且相当复杂的语言和环境。自从Java 出现以来,仅语言本身就增加了大量的新东西。与语言紧密关联的库增长得更多,而向前兼容的需要意味着尽管增加的东西很多,拿掉的却很少。任何重量级的软件都是被诅咒过的,这个诅咒便是:要生存,必须变得流行;而在逐渐流行的过程中,软件不能有任何改变或打破原来依赖它的东西。如果软件可以从一开始就做得完美,这当然没有问题,但软件开发不是这样的。所有软件的进展都是一次尝试,试图把事情做正确,每一次尝试也都有或多或少的成功。即使一款软件在第一次发行时是完美的,用户也会找到使用软件的新方法(或者使用软件的环境会发生变化),从而使它不再完美。因此,我们(程序员们)都努力把软件做得更好,这意味着我们会增加东西,而这又意味着久而久之,所有的软件都会面临脏乱堆砌的命运。
《Java语言精粹》是一次从Java(包括语言和环境)中挑选出最精良的部分,并就如何使用这部分内容以及它们为什么是精华进行讨论的尝试。但这不是说《Java语言精粹》中没有讨论的那些部分都不好;只是说我将要讨论的这些精良部分能把Java 与其他许多语言区别开来,使得Java对我和许多软件开发者的工作都颇有价值。
Java与我
我个人与Java 相伴的历史可以追溯到1992 年3 月,当我刚加入Sun 实验室注1 的时候,注1 : 正式的名称是“Sun 微系统实验室”(Sun Microsystems Laboratories, Inc)。实验室有一个秘密项目,项目的一部分涉及一种新的编程语言。这门当时称为Oak 的语言是C++ 语言的变种,被设计运行于嵌入式设备上,但它看起来却有成为通用编程语言的苗头。那时有许多项目在寻求其他的面向对象系统语言,当时这个家族的主导语言是C++,但C++ 已开始变得复杂,人们对这种逐渐累积起来的复杂性产生了极大的不满(而这还是在模板加入到C++ 之前)。
我看了一下Oak 语言,那时它似乎太不稳定了,因为我正在着手做分布式系统方面的工作,可它无法成为我的合适工具。如果我们在自己的工作中采用它,那又将出现一次当时实验室里称为“33 号错误”的典型,这个错误是指一个研究项目的成功基于另一个研究项目(而且迄今尚未完成的项目)的成功。把语言文档归置好,我的项目组继续进行我们在Modula-3 注2 方面的研究。
那是18 个月后在一次称为“语言日”的内部审查活动中,我见到了Java,那时Oak 语
言是那个更早的、更大的嵌入式项目中唯一存活下来的部分,项目组也搬进了Sun 实验室,
并把这里作为它的组织家园。Sun 实验室的主任Burt Sutherland 意识到在他的小实验室
中至少有四种语言项目在进行,因此组织了一个语言日,让每个项目都可以在这一天展
示一下。他希望给每个项目一些展现的机会,或许还希望促进跨项目的横向交流、学习
和整合。作为另一个使用第五种语言的项目主管,我也被邀请参加。
我并不确知“语言日”的官方结果是什么,但它确实让我对Oak 刮目相看了,比起我上次见到时,它已经在成熟度和稳定性方面取得了长足进步。当时我的项目组正在寻找一种新的语言,因为我们越来越难获得来自Modula-3 团队的支持。于是我们决定把研究中使用的语言转向Oak。此时,这看起来只是“33 号错误”的一个微不足道(只是有一点冒险)的实例了。我记得自己写了一封邮件给实验室主任,表明在我的项目组中使用Oak 是可接受的,因为作为一个研究性项目组,我们完全可以使用尚不具有商业可行性的语言。
几个月之后,Oak 就成了Java,以小应用程序(applet)的形式首次出现在了浏览器中,而Java 作为一种语言和环境便爆发了。我成了一个负责描绘语言发展道路的公司级团队(由Bill Joy 领导)中的一员。他们也要求我参加另一个对语言进行初次正规审查的项目组,这次审查导致了一些语言基础设计方面的改变。
很难忘记那些日子,Java 从一种晦涩的编程语言一夜之间成了奇迹。对那些知晓Java 语言的一切,或只想参与这份激动的人来说,它成就了一段同舟共济的经历。那也正是万维网(World Wide Web)获得几何级增长的日子,而Web 的成长和Java 的成长在某种注2 : Modula-3 是20 世纪80 年代末由DEC 和Olivetti 两家公司开发的一种编程语言,派生自Modula-2。——译者注程度上似乎交织在一起了。Java 语言的发展成了全国性的新闻,在我的记忆里,那是空前绝后的。
我的项目组很快被调离了Sun 实验室,成为Java 软件组织东海岸分部的核心,致力于Java 语言的一些分布式库的开发。在过去15 年中,我在Sun 公司的各个部门之间四处游荡(如今又回到了开始的地方:Sun 实验室),使用的主要语言却从未改变。我参与了关于将哪些内容添加到语言和库中的内部讨论,见证了JCP(Java Community Process,Java 社区进程)的形成,看到了整个平台被划分成企业版、标准版和微型版。我在JavaOne 大会所发表的演讲比参加所有的JavaOne 大会次数都多,在日本、意大利和英国举行的Java 技术大会上,我也曾发表过演讲。
我曾花费了大量的时间思考:是什么让Java 成为工作中能获得乐趣的语言和环境?又有语言的哪些部分会妨碍这种乐趣?我曾经为包含或排除某些特性而争辩,有的成功了,有的失败了。我也曾编写了相当数量的代码,阅读的代码量更多,通常都是由对Java 语言的表达力运用比我更好的工程师编写的。Java 并非我所使用的唯一语言,但当我转向其他语言,然后再返回来使用Java 时,感觉就像回家一样——我总会感觉舒服,即使有一些需要转变的习惯和需要避开的话题。
《Java语言精粹》的读者
《Java语言精粹》并不打算向读者讲授Java。《Java语言精粹》的读者要求已熟悉Java 语言的语法和面向对象程序设计的基本概念。对于构成语言一部分的Java 库,也要求读者拥有相关的背景知识。《Java语言精粹》的目的不是为读者讲授全新的内容,而是让读者回忆自己已经知道但可能忘却了的内容,或者让读者从新的视角重新看待自己曾经思考过的内容。对那些刚刚起步的Java 新手,希望《Java语言精粹》能向你展示一些应该首先学习的特性。你所认为的语言的精良部分可能与笔者不同,也可能你觉得笔者所喜欢的某种东西恰是使语言糟糕的特性。但如果《Java语言精粹》能使你思考语言中哪些是好的,哪些不是那么好的,那它就达到了目的。
《Java语言精粹》采用的约定
媒体评论
———Guy Steele Oracle公司软件架构师