Effective Java 3rd Edition -- Introduction

港控/mmm° 2022-05-29 07:40 233阅读 0赞

本书意在助你高效使用 Java 编程语言及其基础库:java.langjava.utiljava.io 以及它们的子包如:java.util.concurrentjava.util.function。也不时地讨论到其他地类库。

本书由 90 个条目组成,每个条目讨论一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益做法。这些条目大值分为十一章,每章都涵盖软件设计的一个方面。本书并不一定要按部就班地从头读到尾:每个条目都有一定程度的独立性。这些条目相互之间交叉引用,因此您你可以轻松地在本书中找到自己需要的内容。

自本书上一版发布以来,Java 平台中增加了许多新功能。本书中的大部分内容都以某种方式使用这些功能。下表显示了主要功能的主要覆盖范围:














































Feature Items Release
Lambdas Items 42–44 Java 8
Streams Items 45–48 Java 8
Optionals Item 55 Java 8
Default methods in interfaces Item 21 Java 8
try-with-resources Item 9 Java 7
@SafeVarargs Item 32 Java 7
Modules Item 15 Java 9

大多数项目都通过程序示例进行说明。本书一个突出特点是,它包含了许多代码示例,这些示例说明了许多设计模式和习惯用法的。当需要参考设计模式领域的标准参考书[Gamma 95]时,还为这些设计模式和习惯用法提供了交叉引用。

很多条目包含一个或多个程序示例来说明一些要避免的做法。比如,有些被称为反例的清楚的有注释像 // Never do this! 这种。在每个种情况下,该条目解释了这个例子不好的原因,并提出了一种替代方法。

本书并不适用于初学者:本书假设读者已经熟悉了 Java 程序设计语言。如果你还没有做到,请考虑先参阅一本很好的 Java 入门书籍比如 Peter Sestoft 的《Java Precisely》。《Effective Java》的目标是适用于任何具有实际 Java 工作经验的程序员,对于高级程序员,也应该能一共一些发人深省的东西。

本书的大部分规则都来源于一些基本原则。清晰和简洁时最重要的。组件的用户不应该对其行为感到惊讶。组件应该尽可能的精简但不能过于简单。如本书所用,术语“组件”是指任何可重用的软件组件,从单个方法到由多个软件包组成的复杂框架。代码应该被重用,而不是被复制。组件之间的依赖关系应保持在最低限度。错误发生后应尽快排查,理想情况下时在编译时进行。

虽然本书中的规则不是 100% 的时间下都适用,但在绝大多数情况下,它们确实体现了最佳编程实践。你不应该完全遵守这些规则,而是在有充分理由的情况下偶尔违反规则。学习编程艺术,就像大多数其他学科一样,首先要学习规则,然后才学习何时打破它们。

大多数情况下,这本书不是关于表现,而是源于编写清晰、正确、可用、健壮、灵活和可维护的程序。如果你能做到这一点,实现你需要的表现通常是一件相对简单的事情(条目 67)。有些条目讨论性能问题,其中一些条目提供性能数字。这些被引用的带上短语“On my machine”的数字,应该被视为近似的。

我的机器是一款老化的 3.5GHz 四核英特尔酷睿i7-4770K,配备16GB DDR3-1866 CL9内存的组装机。在Microsoft Windows 7 Professional SP1(64位版本)上运行 Azul 的 Zulu 9.0.0.15 发行版 OpenJDK。

在讨论 Java 编程语言及其库的功能时,有时需要参考特定版本。为方便起见,本书使用昵称而非正式版本名称。下表显示了发行版名称和昵称之间的映射关系:


















































Official Release Name Nickname
JDK 1.0.x Java 1.0
JDK 1.1.x Java 1.1
Java 2 Platform, Standard Edition, v1.2 Java 2
Java 2 Platform, Standard Edition, v1.3 Java 3
Java 2 Platform, Standard Edition, v1.4 Java 4
Java 2 Platform, Standard Edition, v5.0 Java 5
Java Platform, Standard Edition 6 Java 6
Java Platform, Standard Edition 7 Java 7
Java Platform, Standard Edition 8 Java 8
Java Platform, Standard Edition 9 Java 9

这些例子相当完整,但可读性高于完整性。它们自由使用 java.utiljava.io 包中的类。为了编译示例,你可能需要添加一个或多个导入声明或其他此类样板。本书网站 http://joshbloch.com/effectivejava 包含每个示例的扩展样本,你可以编译和运行该示例。

大多数情况下,本书使用技术术语 ,如 Java 语言规范 Java SE 8 Edition [JLS] 中所定义的那样。有几个术语值得特别提及。该语言支持四种类型:接口(包括注解),类(包括枚举),数组和基本类型。前三种被称为参考类型。类示例和数组时对象,基本类型不是。一个类的成员由它的字段、方法、成员类和成员接口组成。方法的签名由其名称和形式参数的类型组成;签名不包括方法的返回类型。

本书使用了一些不同于“Java 语言规范”的术语。与 Java 语言规范不同,本书使用继承作为子类的同义词。不再使用接口继承的术语,本书简单表述一个类实现了一个接口或一个接口扩展了另一个接口。为了描述没有指定访问级别的情况,本书使用描述术语包私有代替技术上正确的术语缺省访问[JLS, 6.6.1]。

本书使用一些Java语言规范没有定义的术语。术语exported APIsimply API,指的是类、接口、构造函数、成员、序列化形式,程序员通过它们访问类、接口或包。(术语 API,是应用程序接口的缩写,优先使用 API 而不是其他人更喜欢的术语接口,是为了避免与 Java 语言中的接口相混淆。)程序员写程序使用 API 指的是 API 的用户。类中实现使用了 API 的称为 API 的客户。

类、接口、构造函数、成员和序列化形式统称为 API 元素。导出 API 由定义 API 的包的包外能访问的 API 元素组成。这些 API 元素是任何客户都能使用的并且 API 的作者提供支持。无独有偶,Java 工具类默认操作模式下也为这些元素产生了文档。不严格的说,包的导出 API 由公有成员、保护成员和每个公有类的构造函数或包中的接口组成。

Java 9 平台添加了一个模块系统。如果一个类库使用了模块系统,它的导出 API 是由库的模块声明导出的所有包的导出 API 的并集。

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读