刚过完自己 69 岁生日的两个月后,Java 之父 James Gosling(詹姆斯·高斯林)在领英上官宣了自己退休的消息。他表示,“我终于退休了。在做了这么多年软件工程师之后,是时候让我好好玩玩了。”
在退休前,Java 之父高司令(James Gosling)在推荐《Effective Java》时评价道:“如果说我需要一本 Java 编程的书,那就是它了。”
这本书豆瓣评分高达 9.5,读者们纷纷表达了对这本书的敬意。有读者留言说“Java 程序员分两种,读过《Effective Java》的和没读过的,严格来说,没读过的不算是Java程序员。”这本书2024年全新翻译终于上市了!市面上学习 Java 的书汗牛充栋,Java 技术也在不断发展变化,为什么这本神作却能畅销20多年?
01
Jolt 大奖神作
《Effective Java》在 2001 年就一举夺得当年度的 Jolt 大奖,这项“软件业界的奥斯卡奖”就是对这本书的价值,以及对作者 Joshua Bloch 超强技术功力的最好肯定。本书结构独具匠心,一个关键知识点就是一条单独条目,在有些条目内也会交叉引用其他条目的知识,从而缀点成线,形成知识的网络。从第 1 版的 57 个条目扩展到第 2 版的 78 个条目,直至第 3 版达到了 90 条。这些条目是作者总结出来的特定规则,并精心编写了代码示例,是为了帮助程序员改进程序和设计。所以对于有一些 Java 编程经验,却又不知如何提升代码水准的读者来说,这本书是 Java 编程的最佳实践指导。相比之前的版本,这一版增加了 Lambda 表达式、流、Optional 类、接口默认方法、try-with-resources、@SafeVarargs 注解、模块等 Java 7 及后续版本所引入的新特性。本书所涉及的特性都可以应用在目前国内主流 Java 环境中。本书作者 Joshua Bloch 大神,2001 年度 Jolt 大奖得主,美国卡内基-梅隆大学(Carnegie Mellon University,CMU)教授,曾担任Google公司首席 Java 架构师、Sun 公司杰出工程师和 Transarc 公司高级系统设计师。Bloch 大神主导了 Java 平台多项特性的设计和实现,包括 JDK 5.0 语言增强版,以及通用容器 Java Collections Framework(JCF)。可以说,在 Java 语言的标准实现中,处处闪耀着 Bloch 大神的智慧。得益于先后在 Sun 和 Google的工作经历,Bloch 大神既熟知 Java 的内部实现,又能从用户的角度来思考 Java 编程实践,无形中他成为跨越编程工具和实际应用的一座桥梁,《Effective Java》的横空出世也就是水到渠成之事。本书译者也是一名优秀的技术人,臧秀涛具有多年研发经验,曾先后在完美世界等公司从事软件开发工作。2014年开始从事技术内容方面的工作,曾在InfoQ担任会议内容总监,后在涛思数据负责开源项目TDengine的社区运营。他翻译出版过《Java性能权威指南》和《On Java 中文版》等技术图书。相信他能为中文读者们表达出《Effective Java》神作的精髓。这部神作到底有何天机?我们来领略一番吧。02
学会这90条规则,成为真正的Java程序员
本书的 90 个条目分布在 11 个主题中,包括创建和销毁对象、类和接口、Lambda 表达式和流等。这些条目讲透了高效使用 Java 编程语言及其基础类库 java.lang、java.util 和 java.io,以及诸如 java.util.concurrent 和 java.util.function 等子包。读者不用按顺序阅读,可以根据自己的问题查找主题,再对某个条目细读。当然,如果读者闲暇时间充裕,对这 90 条规则都能学习实践,那么Java 编程功力一定暴涨。针对上一版本增加的新特性,书中列出了这些主要特性会在哪些条目中讲解,读者可以参考下表。我们来纵览一下这 11 个主题与一些关键知识。1. 创建和销毁对象:用静态工厂方法代替构造器;优先考虑通过依赖注入来连接资源;与 try-finally 相比,首选 try-with-resources。
2. 对所有对象都通用的方法:在重写 equals 方法时要遵守通用约定;总是重写 toString 方法。
3. 类和接口:组合优先于继承;与抽象类相比,优先选择接口;为传诸后世而设计接口。
4. 泛型:列表优先于数组;首选泛型方法;使用有限制的通配符增加 API 的灵活性。
5. 枚举和注解:使用 enum 代替 int 常量;使用接口模拟可扩展的枚举。
6. Lambda 表达式和流:与匿名类相比,优先选择 Lambda表达式;首选标准的函数式接口。
7. 方法:检查参数的有效性;仔细设计方法签名;为所有导出的 API 元素编写文档注释。
8. 通用编程:与传统的 for 循环相比,首选 for-each 循环;首选基本类型,而不是其封装类;通过接口来引用对象。
9. 异常:异常机制应该仅用于异常的情况;优先使用标准异常;抛出适合当前抽象的异常。
10. 并发:同步对共享可变数据的访问;与线程相比,首选执行器、任务和流;将线程安全性写在文档中。
11. 序列化:在实现 Serializable 接口时要特别谨慎;考虑使用序列化代理代替序列化实例。
程序员在进行代码设计遇到举棋不定的难题时,就可以直接翻开这本书,找到与问题相关的主题,定能豁然开朗,找到最佳实践方案。
03
结语
《Effective Java 中文版(原书第 3 版)》真的是很值得 Java 程序员 N 刷的经典,本书每个条目都讲述了 Bloch 大神对 Java 的独到见解,阐明了如何编写高效、优雅的程序,并且提供了清晰、易懂的示例代码。对于书中的代码,有个突出的特点,就是包含了很多用来说明设计模式(Design Pattern)和习惯用法(Idiom)的代码示例。对这些示例,书中还提供了与这一领域的神作《设计模式:可复用面向对象软件的基础》一书的交叉引用。精彩书摘这就是说,对于非 Java 语言的程序员,本书同样极具参考价值。所以通用性也是本书能够经久不衰的原因,代码设计的诸多原则都是共通的,看懂这一本书,在其他语言上都可以复用这些最佳编程实践。本书配套资源丰富,包含实战项目源码、视频教程、资源文件等,新版赠送了Java学习效率手册(电子版)。读者在阅读过程中结合使用这些资源,可以将知识融汇贯通,在工作中应用起来更加得心应手。如果你刚好在学Java!买它!