編輯推薦
本書是全球程式設計師必備圖書《Java編程思想》的最新版本
本書曾獲:
被china-pub會員評為“2007年我最喜愛的十大技術圖書”之一
2003年《Software Development》雜誌最佳書籍Jolt大獎
2003年《Java Developer’s Journal》讀者選擇最佳書籍獎
2001年《Java World》編輯選擇最佳書籍獎
2000年《Java World》讀者選擇最佳書籍獎
1999年《Software Development》雜誌最佳產品獎
1998年《Java Developer’s Journal》編輯選擇最佳書籍獎
內容簡介
本書贏得了全球程式設計師的廣泛讚譽,即使是最晦澀的概念,在bruce eckel的文字親和力和小而直接的編程示例面前也會化解於無形。從java的基礎語法到最高級特性(深入的面向對象概念、多執行緒、自動項目構建、單元測試和調試等),本書都能逐步指導你輕鬆掌握。
從本書獲得的各項大獎以及來自世界各地的讀者評論中,不難看出這是一本經典之作。本書的作者擁有多年教學經驗,對c、c++以及java語言都有獨到、深入的見解,以通俗易懂及小而直接的示例解釋了一個個晦澀抽象的概念。本書共22章,包括操作符、控制執行流程、訪問許可權控制、復用類、多態、接口、通過異常處理錯誤、字元串、泛型、數組、容器深入研究、java i/o系統、枚舉類型、並發以及圖形化用戶界面等內容。
本書適合各個層次的java程式設計師閱讀,同時也是高等院校講授面向對象程式設計語言以及java語言的絕佳教材和參考書。
第4版特點:
適合初學者與專業人員的經典的面向對象敘述方式,為更新的java se5/6增加了新的示例和章節。
測驗框架顯示程式輸出。
設計模式貫穿於眾多示例中:適配器、橋接器、職責鏈、命令、裝飾器、外觀、工廠方法、享元、點名、數據傳輸對象、空對象、代理、單例、狀態、策略、模板方法以及訪問者。
為數據傳輸引入了xml,為用戶界面引入了swt和flash。
重新撰寫了有關並發的章節,有助於讀者掌握執行緒的相關知識。
專門為第4版以及java se5/6重寫了700多個編譯檔案中的500多個程式。
支持網站包含了所有原始碼、帶註解的解決方案指南、網路日誌以及多媒體學習資料。
覆蓋了所有基礎知識,同時論述了高級特性。
詳細地闡述了面向對象原理。
線上可獲得java講座cd,其中包含bruce eckel的全部多媒體講座。
網站上可以觀看現場講座、諮詢和評論。
專門為第4版以及java se5/6重寫了700多個編譯檔案中的500多個程式。
支持網站包含了所有原始碼、帶註解的解決方案指南、網路日誌以及多媒體學習資料。
覆蓋了所有基礎知識,同時論述了高級特性。
詳細地闡述了面向對象原理。
線上可獲得java講座cd,其中包含bruce eckel的全部多媒體講座。
網站上可以觀看現場講座、諮詢和評論。
目錄
讀者評論
前言
簡介
第1章 對象導論
1.1 抽象過程
1.2 每個對象都有一個接口
1.3 每個對象都提供服務
1.4 被隱藏的具體實現
1.5 復用具體實現
1.6 繼承
1.6.1 “是一個”(is-a)與“像是一個”(is-like-a)關係
1.7 伴隨多態的可互換對象
1.8 單根繼承結構
1.9 容器
1.9.1 參數化類型(范型)
1.10 對象的創建和生命期
1.11 異常處理:處理錯誤
1.12 並發編程
1.13 java與internet
1.13.1 web是什麼
1.13.2 客戶端編程
1.13.3 伺服器端編程
1.22 總結
第2章 一切都是對象
2.1 用引用操縱對象
2.2 必須由你創建所有對象
2.2.1 存儲到什麼地方
2.2.2 特例:基本類型
2.2.3 java中的數組
2.3 永遠不需要銷毀對象
2.3.1 作用域
2.3.2 對象的作用域
2.4 創建新的數據類型:類
2.4.1 域和方法
2.4.2 基本成員默認值
2.5 方法、參數和返回值
2.5.1 參數列表
2.6 構建一個java程式
2.6.1 名字可見性
2.6.2 運用其他構件
2.6.3 static 關鍵字
2.7 你的第一個java程式
編譯和運行
2.8 注釋和嵌入式文檔
2.8.1 注釋文檔
2.8.2 語法
2.8.3 嵌入式html
2.8.4 一些標籤示例
2.8.5 文檔示例
2.9 編碼風格
2.10 總結
2.11 練習
第3章 操作符
3.1 更簡單的列印語句
3.2 使用java操作符
3.3 優先權
3.4 賦值
3.4.1 方法調用中的別名問題
3.5 算術操作符
3.5.1 一元加、減操作符
3.6 自動遞增和遞減
3.7 關係操作符
3.7.1 測試對象的等價性
3.8 邏輯操作符
3.8.1 短路
3.9 直接常量
3.9.1 指數記數法
3.10 按位操作符
3.11 移位操作符
3.12 三元操作符 if-else
3.13 字元串操作符 + 和 +=
3.14 使用操作符時常犯的錯誤
3.15 類型轉換操作符
3.15.1 截尾和捨入
3.15.2提升
3.16 java沒有“sizeof”
3.17 操作符小結
3.18 總結
第4章 控制執行流程
4.1 true和false
4.2 if-else
4.3 疊代
4.3.1 do-while
4.3.2 for
4.3.3 逗號操作符
4.4 foreach語法
4.5 return
4.6 break和 continue
4.7 臭名昭著的“goto”
4.8 switch
4.9 總結
第5章 初始化與清理
5.1 用構造器確保初始化
5.2 方法重載
5.2.1 區分重載方法
5.2.2 涉及基本類型的重載
5.2.3 以返回值區分重載方法
5.3 預設構造器
5.4 this關鍵字
5.4.1 在構造器中調用構造器
5.4.2 static的含義
5.5 清理:終結處理和垃圾回收
5.5.1 finalize()的用途何在
5.5.2 你必須實施清理
5.5.3 終結條件
5.5.4 垃圾回收器如何工作
5.6 成員初始化
5.6.1 指定初始化
5.7 構造器初始化
5.7.1 初始化順序
5.7.2. 靜態數據的初始化
5.7.3. 顯式的靜態初始化
5.7.4. 非靜態實例初始化
5.8 數組初始化
5.8.1 可變參數列表
5.9 枚舉類型
5.10 總結
第6章 訪問許可權控制
第7章 復用類
第8章 多態
第9章 接口
第10章 內部類
第11章 持有對象
第12章 通過異常處理錯誤
第13章 字元串
第14章 類型信息
第15章 泛型
第16章 數組
第17章 容器深入研究
第18章 java i/o系統
第19章 枚舉類型
第20章 註解
第21章 並發
第22章 圖形化用戶界面
附錄a 補充材料
可下載的補充材料
thinking in c:java的基礎
java編程思想 研討課
hands-on java研討課cd
thinking in objects研討課
thinking in enterprise java
thinking in patterns(with java)
thinking in patterns研討課
設計諮詢與複審
附錄b 資源
軟體
編輯器與ide
書籍
分析與設計
python
我的著作列表
索引
譯者序
時隔兩年多,《Java編程思想(第4版)》的中文版又要和廣大Java程式設計師和愛好者們見面了。這是Java語言本身不斷發展和完善的必然要求,也是本書作者Bruce Eckel孜孜不倦的創作激情和靈感所結出的碩果。.
《Java編程思想(第4版)》以Java最新的版本JDK5.0為基礎,在第3版的基礎上,添加了最新的語言特性,並且對第3版的結構進行了調整,使得所有章節的安排更加遵照循序漸進的特點,同時每一章的內容在分量上也都更加均衡,這使讀者能夠更加容易地閱讀本書並充分了解每章所講述的內容。在這裡我們再次向Bruce Eckel致敬,他不但向我們展示了什麼樣的書籍才是經典書籍,而且還展示了經典書籍怎樣才能精益求精,長盛不衰。
Java已經成為了程式語言的驕子。我們可以看到,越來越多的大學在教授數據結構、程式設計和算法分析等課程時,選擇以Java語言為載體。這說明Java語言已經是人們構建軟體系統時主要使用的一種程式語言。但是,掌握好Java語言並不是一件可以輕鬆完成的任務,如何真正掌握Java語言,從而編寫出健壯的、高效的以及靈活的程式是Java程式設計師們面臨的重大挑戰。..
《Java編程思想(第4版)》就是一本能夠讓Java程式設計師輕鬆面對這一挑戰,並最終取得勝利的經典書籍。本書深入淺出、循序漸進地把我們領入Java的世界,讓我們在不知不覺中就學會了用Java的思想去考慮問題、解決問題。本書不僅適合Java的初學者,更適合於有經驗的Java程式設計師,這正是本書的魅力所在。但是,書中並沒有涵蓋Java所有的類、接口和方法,因此,如果你希望將它當作Java的字典來使用,那么顯然就要失望了。
我們在翻譯本書的過程中力求忠於原著,為了保持連貫性,對原書第3版中仍然保持不變的部分,我們對譯文除了個別地方之外,也沒做修改。對於本書中出現的大量的專業術語儘量遵循標準的譯法,並在有可能引起歧義之處注有英文原文,以方便讀者對照與理解。
全書由陳昊鵬翻譯,郭嘉也參與了部分翻譯工作。由於水平有限,書中出現錯誤與不妥之處在所難免,懇請讀者批評指正。...
譯 者
2007年5月
前言
一開始,我只是將Java看作“又一種程式設計語言”。從許多方面看,它也的確如此。.
但隨著時間流逝,以及對Java的深入研究,我漸漸發現,與我所見過的其他程式語言相比,Java有著完全不同的核心目的。
程式設計其實是對複雜性的管理:待解決問題的複雜性,以及用來解決該問題的工具的複雜性。正是這種複雜性,導致多數程式設計項目失敗。在我所知的所有程式設計語言中,幾乎沒有哪個將自己的設計目標專注於克服開發與維護程式的複雜性。當然,有些程式語言在設計決策時也曾考慮到複雜性的問題,然而,總是會有其他議題被認為更有必要加入到該語言中。於是不可避免地,正是這些所謂更必要的議題導致程式設計師最終“頭撞南牆”。例如,C++選擇向後兼容C(以便更容易吸引C程式設計師),以及具備C一樣的高效率。這兩點都是非常有益的設計目標,也確實促成了C++的成功,然而它們卻暴露出更多的複雜性問題,而這也使得很多項目不得善終(你自然可以責怪程式設計師或者項目管理,但是,如果一種語言能夠幫助你解決錯誤,那何樂而不為呢?)。再看一個例子,Visual Basic(VB)選擇與Basic綁在一起,而Basic並未被設計為具備可擴展性的程式設計語言,結果呢,建立在VB之上的所有擴展都導致了無法維護的語法。還有Perl,它向後兼容awk、sed、grep,以及所有它打算替代的Unix工具,結果呢,人們開始指責Perl程式成了“不可閱讀(write-only)的代碼”(即,只要稍過一會兒,你就讀不懂剛完成的程式了)。從另一個角度看,在設計C++、VB、Perl以及Smalltalk之類的程式設計語言時,設計師也都為解決複雜性問題做了某種程度的工作。並且,正是解決某類特定問題的能力,成就了它們的成功。
隨著對Java的了解越來越深,Sun對Java的設計目標給我留下了最深刻印象,那就是:為程式設計師減少複雜性。用他們的話說就是:“我們關心的是,減少開發健壯代碼所需的時間以及困難。”在早期,這個目標使得代碼的運行並不快(Java程式的運行效率已經改善了),但它確實顯著地縮短了代碼的開發時間。與用C++開發相同的程式相比,採用Java只需一半甚至更少的開發時間。僅此一項,就已經能節約無法估量的時間與金錢了。然而Java並未止步於此。它開始著手解決日漸變得重要的各種複雜任務,例如多執行緒與網路編程,並將其作為語言特性或以工具庫的形式納入Java,這使得開發此類套用變得倍加簡單。最終,Java解決了一些相當大的複雜性問題:跨平台編程、動態代碼修改,甚至是安全的議題。它讓你在面對其中任何一個問題時,都能從“舉步維艱”到“起立鼓掌”。拋去我們都能看到的性能問題,Java確實非常精彩地履行了它的諾言:極大地提升程式設計師的生產率。
同時,Java正從各個方面提升人們相互通訊的頻寬。它使得一切都變得更容易:編寫程式,團隊合作,創建與用戶交戶的用戶界面,在不同類型的機器上運行程式,以及編寫通過網際網路通信的程式。
我認為,通訊變革的成果並不見得就是傳輸巨量的比特。我們所看到的真正變革是人與人之間的通訊變得更容易了:無論是一對一的通信,還是群體與群體之間,甚至整個星球之間的通信。我曾聽聞,在足夠多的人之間的相互聯繫之上,下一次變革將是一種全球意識的形成。Java說不定就是促進該變革的工具,至少,它所具備的可能性使我覺得,教授這門語言是非常有意義的一件事情。
Java SE5與SE6
本書的第4版得益於Java語言的升級。Sun起初稱其為JDK1.5,稍後改作JDK5或J2SE5,最終Sun棄用了過時的“2”,將其改為Java SE5。Java SE5的許多變化都是為了改善程式設計師的體驗。你將會看到,Java語言的設計者們並未完全成功地完成該任務,不過,總的來說,他們已經向正確的方向邁出了一大步。 新版的一個重要目標就是完整地吸收Java SE5/6的改進,並通過本書介紹以及套用這些變化。這意味著本書基本可以稱之為“只限Java SE5/6”。並且,書中的多數代碼並沒有經過老版本的Java編譯測試,所以如果你使用的是老版本的Java,編譯可能會報錯並中止。不過,我覺得這樣利大於弊。
如果你不得不採用老版本的Java,我仍然為你提供了本書早期版本的免費下載。基於某些原因,我決定不提供本書當前版本的免費電子版。
Java SE6
本書是一個非常耗時的,且具有里程碑意義的一個項目。就在本書出版之前,Java SE6(代號野馬mustang)已經發布了beta版。雖然Java SE6中的一些小變化,對書中的代碼示例有一點影響,但其主要的改進對本書的絕大部分內容並沒有影響。因為Java SE6主要關注於提升速度,以及改進一些(不在本書討論範圍之內)類庫的特性。
本書中代碼全部用Java SE6的一個發布候選版(RC)進行過測試,因此我不認為Java SE6正式發布時會有什麼變化能夠影響本書的內容。如果到時真的有什麼重要的改變,我將更新本書中的代碼,你可以下載。
本書的封面已經指出,本書面向“Java SE5/6”。也就是說本書的撰寫“面向Java SE5及其為Java語言引入的重大變化,同時也適用於Java SE6”。..
第4版
為一本書寫作新版時,作者最滿意的是:把事情做得“恰如其分”。這是我從本書上一個版本發布以來所學到的東西。通常而言,這種見識正如諺語所云,“學習就是從失敗中汲取教訓。”並且,我也藉機進行了一些修訂。與往常一樣,一個新的版本必將帶來引人入勝的新思想。此時,新發現帶來的喜悅,採用比以往更好的形式表達思想的能力,已經遠遠超過了可能引入的小錯誤。
這也是對不斷在我腦中盤旋低語著的一種挑戰,那就是讓持有本書老版本的讀者也願意購買新的版本。這些促使著我儘可能改進,重寫,以及重新組織內容,為熱忱的讀者們獻上一本全新的,值得擁有的書。
改變
此版本中將不再包含以往本書中所攜帶的CD光碟。該CD中的重要部分《Thinking in C》的多媒體教程(由Chuck Allison為MindView創建),現在提供了可下載的Flash版本。該教程是為不熟悉C語法的讀者所準備的。雖然,本書用了兩章對語法做了較為完整的介紹,然而對於沒有相應背景知識的讀者而言,這也許仍然不夠。而《Thinking in C》正是為了幫助這些讀者提升到必要的程度。
完全重寫了“並發”這一章(以前稱為“多執行緒”),以符合Java SE5並發類庫的重大改變。它將為讀者了解並發的核心思想打下基礎。如果沒有這些核心的基礎知識,讀者很難理解關於執行緒的更複雜的議題。我花了很多個月撰寫這一章,深陷“並發”的地獄之中,最終,這一章不僅涵蓋了基礎知識,而且大膽地引入了一些高級議題。
而對於Java SE5所具有的每一個重大的新特性,本書都有一個新的章節與之對應。其他的新特性則加入到了原有的章節中。我還一直在研究設計模式,因此在本書中,也介紹了設計模式的相關內容。
媒體評論
我見過的最好的Java書!您做了一項了不起的工作。您的深度令人讚嘆,出版的時候,我一定會購買一本。我從1996年10月就開始學習Java,其間也讀過好幾本這方面的書,但我覺得您這本才是“必讀書”。最近幾個月,我一直集中精力於一個完全用Java開發的產品。您的書幫我夯實了某些不牢固的知識點,並拓展了我的知識面。我甚至在面試簽約者時引用書中的內容,作為參考的依據。通過問一些我從書中學到的知識,來判斷他們對Java的理解程度(例如,數組與Vector的區別)。您的書真是偉大!
Steve Wilkinson, 資深專家, MCI 電信公司
每個Java程式設計師都應該反覆研讀《Think in Java》,並且隨身攜帶以便隨時參考。書中的練習頗具挑戰性,而有關集合的章節已臻化境!本書不僅幫助我通過了Sun Certified Java Programmer考試,而且它還是我遇到Java問題時,求助的首選書籍。
——Jim Pleger, Loudoun郡(維吉尼亞)政府
這本書比我見過的所有Java書都要好得多。循序漸進……非常完整,並搭配恰到好處的範例,睿智而不呆板的解說……這使本書的品質比別的書“超出了一個數量級”。與其他Java書相比,我發現本書考慮非常周全、前後一致、理性坦誠、文筆流暢、用詞準確。恕我直言,這是一本學習Java的理想書籍。
——Anatoly Vorobey, 以色列海法Technion大學
在我所見過的程式設計指南中(無論何種語言),這絕對是最好的一本。
——Joakim Ziegler, FIX系統管理員
感謝您這本精彩的、令人愉快的Java書。
——Dr. Gavin Pillay, 登記員, 南非愛德華八世醫院
再次感謝您這本傑出的書。作為一名不用C語言的程式設計師,我曾經感到(學習Java)步履維艱,但是您的書讓我一目了然。能夠一開始就理解底層的概念和原理,而不是通過反覆試驗來自己建立概念模型,真是太棒了。我希望能在不久的將來參加您的討論課。
——Randall R. Hawley, 自動化工程師, Eli Lilly公司
我見過的計算機著作中,這是最好的一本。
——Tom Holland
這是我讀過的程式語言書中最棒的一本……有關Java的書中最棒的一本。
——Ravindra Pai, Oracle 公司, SUNOS 產品線部門
我見過的最好的Java書!您做了一項了不起的工作。您的深度令人讚嘆,出版的時候,我一定會購買一本。我從1996年10月就開始學習Java,其間也讀過好幾本這方面的書,但我覺得您這本才是“必讀書”。最近幾個月,我一直集中精力於一個完全用Java開發的產品。您的書幫我夯實了某些不牢固的知識點,並拓展了我的知識面。我甚至在面試簽約者時引用書中的內容,作為參考的依據。通過問一些我從書中學到的知識,來判斷他們對Java的理解程度(例如,數組與Vector的區別)。您的書真是偉大!
——Steve Wilkinson, 資深專家, MCI 電信公司
偉大的書。迄今為止我見過的最佳Java書籍。
——Jeff Sinclair, 軟體工程師, Kestral 計算技術公司