本书通过78个有效案例,旨在帮助读者深入理解Java,以写出更加清楚、健壮、可重复使用的代码。书中每个章节均包含小论文,针对Java平台和杰出的代码样例,提供了具体的分析和建议,这些综合的描述和解释为程序员们明确指出了做什么、不做什么以及为什么这样。
本书亮点:
新的内容覆盖泛型、枚举、注释、自动装箱、for-each循环、可变参数、并发机制……
最新的技术和最佳实践的经典主题,包括对象、类、库、方法和序列化
如何避免Java编程语言中常见的陷阱和缺陷
注重Java语言本身和最基本的类库及其扩展:java.lang、java.util、java.util.concurrent和java.io
推荐序
如果有同事对你说,“Spouse of me this night today manufactures the unusual meal in a home. You will join?”这时候你脑子里可能会浮现出三件事情:同事在邀请你参加他的家庭晚宴,英语肯定不是你这位同事的母语,更多的则是满脑子的疑惑。
如果你曾经学习过第二种语言,并且尝试过在课堂之外使用这种语言,你就该知道有三件事情是必须掌握的:这门语言的结构如何(语法)、如何命名你想谈论的事物(词汇),以及如何以惯用和高效的方式来表达日常的事物(用法)。在课堂上大多只涉及到前面两点,当你使出浑身解数想让对方明白你的意思时,常常会发现当地人对你的表述忍俊不禁。
程序设计语言也是如此。你需要理解语言的核心:它是面向算法的,还是面向函数的,或者是面向对象的?你需要知道词汇表:标准类库提供了哪些数据结构、操作和功能设施(Facility)?你还需要熟悉如何用习惯和高效的方式来构建代码。也许是因为前面两点比较容易编写,所以关于程序设计语言的书籍通常只涉及这两点,或者只是蜻蜓点水般地介绍一下用法。语法和词汇是语言本身固有的特性,但是用法则反映了使用这门语言的群体特征。
例如,Java程序设计语言是一门支持单继承的面向对象程序设计语言,在每个方法的内部,它都支持命令式的(面向语句的,Statement-Oriented)编码风格。Java类库提供了对图形显示、网络、分布式计算和安全性的支持。但是,如何把这门语言以最佳的方式运用到实践中呢?
还有一点,程序与口头的句子以及大多数书籍和杂志都不同,它会随着时间的推移而发生变化。仅仅编写出能够有效地工作并且能够被别人理解的代码往往是不够的,我们还必须把代码组织成易于修改的形式。针对某个任务可能会有10种不同的编码方法,而在这10种编码方法中,有7种编码方法是笨拙的、低效的或者是难以理解的。而在剩下的3种编码方法中,哪一种会是最接近该任务的下一年度发行版本的代码呢?
目前有大量的书籍可以供你学习Java程序设计语言的语法,包括The Java Programming Language [Arnold05](作者Arnold、Gosling和Holmes),以及The Java Language Specification [JLS](作者Gosling、Joy和Bracha)。同样地,与Java程序设计语言相关的类库和API的书籍也有很多。
本书解决了你的第三种需求,即如何以惯用和高效的方式来表达日常的事物(用法)。多年来,作者Joshua Bloch在Sun Microsystems公司一直从事Java语言的扩展、实现和使用的工作;他还大量地阅读了其他人的代码,包括我的代码。他在本书中提出了许多很好的建议,他系统地把这些建议组织起来,旨在告诉读者如何更好地构造代码以便它们能工作得更好,也便于其他人能够理解这些代码,而且将来对代码进行修改和改善时也不至于那么头疼。甚至,你的程序也会因此而变得更加令人愉悦、更加优美和雅致。
Guy L. Steele Jr
Burlington, Massachusetts
前言
我于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和Java 6发行版本中的变化是好事,也使得Java平台日趋完善。现在这个平台比2001年的要大得多,也复杂得多,但是一旦掌握了使用新特性的模式和惯用模式,它们就会使你的程序变得更完美,使你的工作变得更轻松。我希望第二版能够体现出我对Java平台持续的热情,并将这种热情传递给你,帮助你更加高效和愉快地使用Java平台及其新的特性。
San Jose, California