現在已經步入了21世紀,我們很難想象曾經Java相關的圖書是那樣的稀少,但這就是Java剛出現時的情況。那時所有與Java相關的圖書基本上都是由Sun公司的幾個工程師們所發布的,比如說Arthur Van Hoff et.al所寫的“Hooked on Java”以及Patrick Naughton所寫的“The Java Handbook”。
當然了,這些圖書填補了Java的空白,不過每本書都有3、400頁,這些圖書都假設讀者了解程序,特別是面向對象程序設計。
1996年Cay Horstmann與Gary Cornell出版了名為“Java核心編程”的圖書,這本書有600多頁,它沒有做任何假定,從頭開始教授讀者Java,這本書的風格清晰且可讀性強,不禁讓我們回想起早期Brian Kernighan與Patrick Henry Winston的編程課程。
17年轉瞬即逝,Horstmann與Cornell又出版了Java核心編程第9版。該版共分為兩卷,卷1(基礎)有974頁,卷2(高級特性)甚至達到了1128頁。你可以在書中找到有關Java 7(最新的JDK版本)的一切內容,包括集合、泛型、並發以及從JDK的首個版本發布以來Java的所有特性。
新版的編寫風格依然清晰且具有很強的可讀性,並且提供了大量的示例,這些示例雖然基本但卻很重要。顯然,作者在創建這些示例時經過了大量的思考,示例非常詳盡,為讀者提供了很有價值的參考。書中充斥了大量的“C++注釋”,旨在以Java的方式來指導C++程序員。
卷1首先介紹了Java的歷史以及語言設計者的最高訴求(健壯、可移植、多線程等等)。然後是一個簡潔的上手指南,包括下載與安裝Java語言環境(包括JDK與Eclipse IDE)的說明。這部分提供了一些可靠的代碼示例,你可以通過一些可視化的Applets來測試安裝環境。
接下來介紹了最基本的數據類型以及語法、程序結構和控制流,詳細解釋了BigNumber、BigDecimal與BigInteger。
本欄目
介紹完基礎內容後,本書又開始詳細介紹面向對象編程(OOP)。擁有C語言等過程式背景的程序員一般都會覺得向OO轉變是個比較困難的過程。Java核心編程這本書在這方面做得非常棒。討論首先從一些基本的UML、直觀的示例以及Java中的類與對象開始。接下來繼續深入到Java風格的OO中,包括類文件與構造方法。本章最後給出了一些“類設計提示”,這是用於創建良好、可讀且可重用代碼的最佳實踐。
OO討論之後的幾章會開始介紹繼承、接口與內部類,並給出了相應的Java實現。
接下來的4章有300頁,是關於圖形編程開發的,包括主要的Swing組件、字體、使用顏色、處理鼠標與鍵盤事件、布局管理器、Applets以及部署策略,如浏覽器、Java Web Start與JAR文件。我比較失望的是書中並未提及JavaFX,因為JavaFX現在已經成為Java核心庫的一部分了,並且作為Swing的擴展使用。
再往下的一章介紹了異常處理,顯然這裡會介紹調試技巧、日志以及如何使用調試器。後面的一章介紹了泛型編程。即便是有經驗的Java程序員在這個主題上也會遇到問題,不過介紹的過程卻是非常清晰的。本書還介紹了Java 7“Project Coin”中所引入的新的鑽石表示法。然後開始介紹Java Collections與Maps,包括一些算法,並且簡要介紹了老式的Collections與Maps,如Hashtable、Vector與Enumeration。
本書最後通過108頁的篇幅從頭開始介紹多線程。該章以“什麼是線程”開始,然後介紹“線程狀態”,給出一個漂亮的狀態圖,介紹了通過“同步”進行的轉換並討論了競態條件。接下來介紹了Java 5中引入的java.util.concurrent組件。然後介紹了Executors與線程池,“同步”組件,通過使用線程來確保Swing UI的響應性討論了SwingWorker的概念。
我認為加入多線程一章是個很好的決定,而在之前的版本中這一章被放到了卷2中。並發對於所有重要的Java代碼來說都是很必要的,並不應該被當作高級特性。然而,我很遺憾地看到關於Streams與Readers的章節被放到了卷2中,因為他們也是基礎的主題,卷2在今年3月出版。
自從1995年首次發布以來Java得到了長足的發展,這不僅體現在表達性方面,周邊的生態系統亦是如此。Java核心編程內容很多但卻十分詳盡,讀起來沒有壓力,對於程序員新手、來自其他語言的程序員、甚至是高級Java開發者(想要在手邊放一本能夠清晰展現Java核心的各個主題的圖書)來說都是一本非常不錯的圖書。