和以前的版本一样,有效Java的每一章,第三版,由几个“项目”组成,每一章都以一篇简短的、独立的文章形式呈现,提供了具体的建议,深入了解Java平台的微妙之处,以及更新的代码示例。对每一项的综合描述和解释说明了该做什么,不该做什么,以及为什么第三版涵盖了在Java 7、8和9中添加的语言和库特性,包括添加到面向对象的根中的函数编程结构。添加了许多新项目,包括专门用于lambdas和streams的章节。
涵盖Java 7、Java 8和Java 9中语言和库的各种新特性。深入了解Java平台的细微之处。
Joshua Bloch是卡耐基梅隆大学的教授。他曾经是Google首席Java架构师、Sun公司的杰出工程师以及Transarc公司的高级系统设计师。Bloch曾带领团队设计和实现过无数的Java平台特性,包括JDK 5.0语言增强版,并且在Java集合框架上屡获殊荣。他拥有卡耐基梅隆大学的计算机科学博士学位以及哥伦比亚大学的计算机科学学士学位。
前言
1997年,Java还年轻时,James Gosling(Java 之父)称它为“蓝领的语言”(blue collar language),以此来表达它“十分简单”[Gosling97]。几乎与此同时,Bjarne Stroustrup(C++之父)将C++称为“多范式语言”(multi-paradigm language),“故意和那些只能用单一方式编写程序的语言区别开来”[Stroustrup95]。Stroustrup警告说:
Java相对的简单性——和大多数新语言一样——一部分是因为错觉,另一部分是因为它的不完整性。随着时间的推移,Java的规模和复杂性将显著增长。它的规模将增加两到三倍,相关的扩展和库也会不断增加。
现在,20年过去了,公平来讲,Gosling和Stroustrup都是正确的。Java现在变得复杂且庞大,从并行执行、迭代,到日期和时间表示法都有多个抽象。
虽然我的热情随着平台的发展已经冷却,但我仍然喜欢Java,鉴于其规模和复杂性的增长,我们迫切需要一个最新的最佳实践指南,这就是本书写作的目的。我希望这个版本能够在延续旧版本理念的前提下满足大家新的需求。
小很美,简单却不易。
圣何塞,加利福尼亚
2017年11月
附言:
如果我没有提及最近占据我大量时间去践行的业内最佳实践,那将是我的疏忽。自20世纪50年代这个行业诞生以来,我们可以自由地重新实现彼此的API。这种做法是计算机技术迅速成功的关键。我以实际行动致力于维护这种自由[CompSci17],我希望你能加入进来。保留彼此可以重新实现API的权利,这对于维持行业健康发展至关重要。
致谢
感谢第1版和第2版的读者用你们的热情来接纳这本书,将它的理念铭记于心,并且让我知道它对你们的工作有那么多积极的影响。感谢众多的讲师在你们的课程中使用这本书,感谢众多的工程师团队采用这本书。
感谢Addison-Wesley和Pearson团队在高强度的工作压力下依旧善良、专业、耐心、优雅。在整个过程中,我的编辑Greg Doench一直保持镇定:他是一位好编辑,同时也是一名优雅的绅士。为了这个项目他恐怕生了不少白发,在此我向他道歉。我的项目经理Julie Nahil和我的项目编辑Dana Wilson像我期望的那样勤奋、准时、有条理、友好。我的文字编辑Kim Wimpsett一丝不苟且极有品味。
我再次拥有了梦寐以求的审校团队,在此致以我诚挚的谢意。几乎检查了每一章的核心团队包括:Cindy Bloch、Brian Kernighan、Kevin Bourrillion、Joe Bowbeer、William Chargin、Joe Darcy、Brian Goetz、Tim Halloran、Stuart Marks、Tim Peierls,以及Yoshiki Shibata。其他审校包括:Marcus Biel、Dan Bloch、Beth Bottos、Martin Buchholz、Michael Diamond、Charlie Garrod、Tom Hawtin、Doug Lea、Aleksey Shipilëv、Lou Wasserman,以及Peter Weinberger。这些审校人员提出了很多建议,大大提升了本书的品质,也避免了很多尴尬的错误。
另外,要专门感谢William Chargin、Doug Lea和Tim Peierls。他们是本书很多理念的“扩音器”。William、Doug和Tim孜孜不倦地为本书付出了他们的时间和智慧。
最后,感谢我的妻子Cindy Bloch一直鼓励我写作、阅读了所有的原始文档、编写了索引,并一直帮助我处理这个项目中会出现的各种事情,以及在我写作时包容我。
“功能接口”应该是“函数式接口”吧?