译者序

Java从诞生到日趋完善,经过了不断的发展壮大,目前全世界拥有了成千上万的Java开发人员。如何编写出更清晰、更正确、更健壮且更易于重用的代码,是大家所追求的目标之一。作为经典Jolt获奖作品的新版书,它已经进行了彻底的更新,涵盖了自第1版之后所引入的Java SE 5和Java SE 6的新特性。作者探索了新的设计模式和语言习惯用法,介绍了如何充分利用从泛型到枚举、从注解到自动装箱的各种个性。本书的作者Joshua Bloch曾经是Sun公司的杰出工程师,带领团队设计和实现过无数的Java平台特性,包括JDK 5.0语言增强版和获奖的Java Collections Framework。他也是Jolt奖的获得者,现在担任Google公司的首席Java架构师。他为我们带来了共78条程序员必备的经验法则:针对你每天都会遇到的编程问题提出了最有效、最实用的解决方案。

书中的每一章都包含几个“条目”,以简洁的形式呈现,自成独立的短文,它们提出了具体的建议、对于Java平台精妙之处的独到见解,并提供优秀的代码范例。每个条目的综合描述和解释都阐明了应该怎么做、不应该怎么做,以及为什么。通过贯穿全书透彻的技术剖析与完整的示例代码,仔细研读并加以理解与实践,必定会从中受益匪浅。书中介绍的示例代码清晰易懂,也可以作为日常工作的参考指南。

适合人群

本书不是针对初学者的,读者至少需要熟悉Java程序设计语言。如果你连equlas()toString()hashCode()都还不了解的话,建议先去看些优秀的Java入门书籍之后再来阅读本书。如果你现在已经在Java开发方面有了一定的经验,而且想更加深入地了解Java编程语言,成为一名更优秀、更高效的Java开发人员,那么,建议你用心的研读本书。

内容形式

本书分为11章共78个条目,涵盖了Java 5.0/6.0的种种技术要点。与第1版相比,本书删除了“C语言结构的替代”一章,增加了Java 5所引入的“泛型”、“枚举和注解”各一章。数量上从57个条目发展到了78个,不仅增加了23个条目,并对原来的所有资料都进行了全面的修改,删去了一些已经过时的条目。但是,各章节没有严格的前后顺序关系,你可以随意选择感兴趣的章节进行阅读。当然,如果你想马上知道第2版究竟有哪些变化,可以参阅附录中第2版与第1版详细的对照情况。

本书重点讲述了Java 5所引入的全新的泛型、枚举、注解、自动装箱、for-each循环、可变参数、并发机制,还包括对象、类、类库、方法和序列化这些经典主题的全新技术和最佳实践,如何避免Java语言中常被误解的细微之处:陷阱和缺陷,并重点关注Java语言本身和最基本的类库:java.langjava.util,以及一些扩展:java.util.concurrentjava.io等等。

章节简介

第2章阐述何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够被适时地销毁,以及如何管理销毁之前必须进行的所有清除动作。

第3章阐述对于所有对象都通用的方法,你会从中获知对equalshashCodetoStringclonefinalize相当深入的分析,从而避免今后在这些问题上再次犯错。

第4章阐述作为Java程序设计语言的核心以及Java语言的基本抽象单元(类和接口),在使用上的一些指导原则,帮助你更好地利用这些元素,设计出更加有用、健壮和灵活的类和接口。

第5章和第6章中分别阐述在Java 1.5发行版本中新增加的泛型(Generic)以及枚举和注解的最佳实践,教你如何最大限度地享有这些优势,又能使整个过程尽可能地简单化。

第7章讨论方法设计的几个方面:如何处理参数和返回值,如何设计方法签名,如何为方法编写文档。从而在可用性、健壮性和灵活性上有进一步的提升。

第8章主要讨论Java语言的具体细节,讨论了局部变量的处理、控制结构、类库的使用、各种数据类型和用法,以及两种不是由语言本身提供的机制(reflection和native method,反射机制和本地方法)的用法,并讨论了优化和命名惯例。

第9章阐述如何充分发挥异常的优点,可以提高程序的可读性、可靠性和可维护性,以及减少使用不当所带来的负面影响。并提供了一些关于有效使用异常的知道原则。

第10章阐述如何帮助你编写出清晰、正确、文档组织良好的并发程序。

第11章阐述序列化方面的技术,并且有一项值得特别提及的特性,就是序列化代理(serialization proxy)模式,它可以帮助你避免对象序列化的许多缺陷。

举个例子,就序列化技术来讲,HTTP会话状态为什么可以被缓存?RMI的异常为什么可以从服务端传递到客户端呢?GUI组件为什么可以被发现、保存和恢复呢?是因为他们实现了Serializable接口吗?如果超类没有提供一个可访问的无参构造器,它的子类可以被序列化吗?当一个实例采用默认的序列化形式,并且给某些域标记为transient,那么当实例反序列化回来后,这些标志为transient域的值各是些什么呢?……这些问题如果你现在不能马上回答,或者不不能很确定,没有关系,仔细阅读本书,你会对它们有更深入与透彻的理解。

技术范围

虽然本书是讨论更深层次的Java开发技术,讲述的内容深入,涉及面又相当广泛,但是它并没有涉及图形用户界面编程、企业级API以及移动设备方面的技术,不过在各个章节与条目中会不时地讨论到其他相关的类库。

这是一本分享经验并指引你避免走弯路的经典著作,针对如何编写搞笑、设计优良的程序提出了最实用、最权威的指导方针,是Java开发人员案头上的一本不可或缺的参考书。

本书由我组织进行翻译,第1章到第8章由杨春花负责、我负责前言、附录以及第9章到第11章的翻译,并负责本书所有章节的全面审校。参与翻译和审校的还有:荣浩、邱庆举、万国辉、陆志平、姜法有、王琳、林仪明、凌家亮、李勇、师文丽、刘传飞、王建旭、程旭文、罗兴、翟育明、黄华,在此深表感谢。

虽然我们在翻译过程中竭力追求信、达、雅,但限于自身水平,也许仍有不足,还望各位读者不吝指正。关于本书的翻译和翻译时采用的术语表以及相关的技术讨论大家可以访问我的博客http://blog.csdn.net/YuLimin,也可以发送邮件到[email protected]与我交流。

在这里,我要感谢在翻译过程中一起讨论和帮助我的朋友们,他们是:崔毅,郑晖,左轻侯,郭晓刚,满江红开放技术研究组织创始人曹晓刚,Spring中文站创始人杨戈(Yanger),SpringSide创始人肖桦(江南白衣)和来自宝岛台湾的李日贵(jini)、林康司(koji)、林信良(caterpillar),还有责任编辑陈佳媛也为本书出版做了大量工作,在此再次深表感谢。

快乐分享,实践出真知,最后,祝大家能够像我一样在阅读中享受本书带来的乐趣!

Read a bit and take it out, then come back read some more.

俞黎敏

2008年11月

results matching ""

    No results matching ""