- 定价:¥52.00
- 评分:
(已有118条评价)
基本信息
- 原书名:Effective Java (2nd Edition)
- 原出版社: Prentice Hall PTR
- 作者: (美)Joshua Bloch
- 译者: 杨春花 俞黎敏
- 丛书名: Sun公司核心技术丛书
- 出版社:机械工业出版社
- ISBN:9787111255833
- 上架时间:2009-1-14
- 出版日期:2009 年1月
- 开本:16开
- 页码:287
- 版次:2-1
- 所属分类:计算机 > 软件与程序设计 > JAVA(J#) > 综合

【插图】

编辑推荐
著译双优,完美组合
java之父隆重推荐
CSDN java大版主倾情翻译
内容简介
作译者
目录
序
前言
致谢
第1章 引言
第2章 创建和销毁对象
第1条:考虑用静态工厂方法代替构造器
第2条:遇到多个构造器参数时要考虑用构建器
第3条:用私有构造器或者枚举类型强化Singleton属性
第4条:通过私有构造器强化不可实例化的能力
第5条:避免创建不必要的对象
第6条:消除过期的对象引用
第7条:避免使用终结函数
第3章 对于所有对象都通用的方法
第8条:改写equals时请遵守通用约定
第9条:改写equals时总要改写hashCode
第10条:始终要改写toString
第11条:谨慎地改写clone
第12条:考虑实现Comparable接口
第4章 类和接口
前言
自从我于2001年写了本书的第一版之后,Java平台又发生了很多变化,是该出第二版的时候了。Java 5中最为重要的变化是增加了泛型、枚举类型、注解、自动装箱和for-each循环。其次是增加了新的并发类库:java.util.concurrent,也在Java 5中进行了发布。我和Gilad Bracha一起,有幸带领团队设计了最新的语言特性。我还有幸参加了设计和开发并发类库的团队,这个团队由Doug Lea领导。
Java平台中另一个大的变化在于广泛采用了现代的IDE(Integrated Development Environment),例如Eclipse、IntelliJ IDEA和NetBeans,以及静态分析工具的IDE,如FindBugs。虽然我还未参与到这部分工作,但已经从中受益匪浅,并且很清楚它们对Java开发经历所带来的影响。
2004年,我从Sun公司换到了Google公司,但在过去的4年中,我仍然继续参与Java平台的开发,在Google公司和JCP(Java Community Process)的大力帮助下,继续并发和集合API的开发。我还有幸利用Java平台去开发供Google内部使用的类库。现在我了解了作为一名用户的感受。
我在2001年编写第一版的时候,主要目的是与读者分享我的经验,便于让大家能够避免我所走过的弯路,使大家更容易成功。新版仍然大量采用来自Java平台类库的真实范例。
第一版所带来的反应远远超出了我最大的预期。我在收集所有新的资料以使本书保持最新时,尽可能地保持了资料的真实。毫无疑问,本书的篇幅肯定会增加,从57个条目发展到了78个。我不仅增加了23个条目,并且修改了原来的所有资料,并删去了一些已经过时的条目。在附录中,你可以看到本书中的内容与第一版的内容的对照情况。
在第一版的前言中我说过:Java程序设计语言和它的类库非常有益于代码质量和效率的提高,并且使得用Java进行编码成为一种乐趣。Java 5和6发行版本中的变化是好事,也使得Java平台日趋完善。现在这个平台比2001年的要大得多,也复杂得多,但是一旦掌握了使用新特性的模式和惯用模式,它们就会使你的程序变得更完美,使你的工作变得更轻松。我希望第二版能够体现出我对Java平台持续的热情,并将这种热情传递给你,帮助你更加高效和愉快地使用Java平台及其新的特性。
Joshua Bloch
San Jose, California 2008年4月
初版前言
1996年,我打点行囊,西行来到了当时的JavaSoft工作,因为我很清楚那里将会出现奇迹。在那5年间,我担任Java平台类库的架构师。我曾经设计、实现和维护过许多类库,同时也担任过其他一些类库的技术顾问。能够主持这些类库的设计工作,并伴随着Java平台一起成熟和壮大,这是人生中难得的机会。毫不夸张地说,我有幸与一些当代最杰出的软件工程师一起工作过。在这个过程中,我学到了许多关于Java程序设计语言的知识——它能够做什么,不能够做什么,以及如何最有效地使用这门语言和它的类库。
本书是我的一次尝试,我希望与你分享我的经验,你可以因此而吸取我的经验,避免重蹈覆辙。我在本书中借鉴了Scott Meyers的《Effective C++》[Meyers98]一书的格式,该书中包含有50个条目,每个条目给出了一条用于改进程序性能和设计方案的规则。我觉得这种格式非常有效,希望你也有这样的感觉。
在许多例子中,我冒昧地使用了Java平台类库中的真实例子来说明相应的条目。在介绍那些做得不是很完美的工作时,我尽量使用我自己编写的代码,但是偶尔也会使用其他同事的代码。虽然我尽了最大的努力,但如果还是冒犯了他人,我在这里致以最诚挚的歉意。引用反面例子是出于协作的考虑,而不是要羞辱例子中的做法,我希望大家都能够从我们过去的错误经历中得到启发。
尽管本书并不是专门针对可重用组件的开发人员,但是过去20多年来我编写此类组件的经历一定会影响到这本书。我很自然地会按照可导出API(Application Programming Interfaces,应用程序编程接口)的方式来思考问题,而且我鼓励你也这样做。即使你并不是在开发可重用的组件,但是这样的思考方法往往能够提高你所编写的软件的质量。进一步来说,毫无意识地编写可重用组件的情形并不少见:你编写了一些很有用的代码,然后在同伴之间共享,不久之后你就有了很多用户。这时候,你就不能随心所欲地改变API了。如果你刚开始编写软件的时候在API的设计上尽了力,那么这时你就会非常庆幸了。
我把焦点放在API的设计上,这对于那些热衷于新兴的轻量化软件开发方法学(比如Extreme Programming[Beck99],中文译为“极限编程”,简称XP)的读者来说,也许会感到有点不舒服。这些方法学强调编写最简单的、能够工作的程序。如果你正在使用这其中的某种程序设计方法,那么你会发现,把焦点放在API设计上对于“重构(Refactoring)”过程是多么有益。重构的根本目标是改进系统结构,避免代码重复。如果系统的组件没有设计良好的API,要达到这样的目标则是不可能的。
任何一门语言都不是完美的,但是有些语言非常优秀。我认为Java程序设计语言以及它的类库就非常有益于代码质量和效率的提高,并且使得编码工作成为一种乐趣。我希望本书能够体现出我的热情并传递给你,帮助你更有效地使用Java语言,工作更为愉快。
Joshua Bloch Cupertino, California 2001年4月..
再版致谢
序言
程序设计语言也是如此。你需要理解语言的核心:它是面向算法的,还是面向函数的,或者是面向对象的?你需要知道词汇表:标准类库提供了哪些数据结构、操作和功能设施(Facility)?你还需要熟悉如何用习惯和高效的方式来构建代码。关于程序设计语言的书籍通常只是涉及到前面两点,或者只是蜻蜓点水般地介绍一下用法。也许是因为前面两点比较容易编写。语法和词汇是语言本身固有的特性,但是用法则反映了使用这门语言的群体的特征。 例如,Java程序设计语言是一门支持单继承的面向对象程序设计语言,在每个方法的内部,它也支持命令式的(面向语句的,Statement-Oriented)编码风格。Java类库提供了对图形显示、网络、分布式计算和安全性的支持。但是,如何把这门语言以最佳的方式运用到实践中呢?..
还有一点:程序与口头的句子以及大多数书籍和杂志都不同,它会随着时间的推移而发生变化。仅仅编写出能够有效地工作并且能够被别人理解的代码往往是不够的,我们还必须把代码组织成易于修改的形式。针对某个任务T可能会有10种不同的编码方法,而在这10种方法中,有7种方法是笨拙的、低效的或者是难以理解的。而在剩下的3种编码方法中,哪一种会是最接近该任务T的下一年度发行版本的代码呢?
目前有大量的书籍可以供你学习Java程序设计语言的语法,包括《The JavaTM Programming Language》[Arnold05](作者Arnold、Gosling和Holmes),以及《The JavaTM Language Specification》[JLS](作者Gosling、Joy和Bracha)。同样地,有关与Java程序设计语言相关的类库和API的书籍也不少。
本书解决了你的第三种需求:习惯和高效的用法。作者Joshua Bloch在Sun Microsystems公司多年来一直从事Java语言的扩展、实现和使用的工作;他还大量地阅读了其他人的代码,包括我的代码。他在本书中提出了许多很好的建议,他系统地把这些建议组织起来,旨在告诉读者如何更好地构造代码以便它们能工作得更好,也便于其他人能够理解这些代码,便于将来对代码进行修改和改善的时候不至于那么头疼。甚至,你的程序也会因此而变得更加令人愉悦、更加优美和雅致。...
Guy L. Steele Jr. Burlington, Massachusetts 2001年4月
媒体评论
——Java之父 James Gosling