Effective Java 3rd Edition -- Introduction

本書意在助你高效使用 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 的並集。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章