-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
Java編程思想(英文版.第4版) 版權信息
- ISBN:7111212509
- 條形碼:9787111212508 ; 978-7-111-21250-8
- 裝幀:簡裝本
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
Java編程思想(英文版.第4版) 內容簡介
本書曾榮獲:
2003年《Software Development》雜志Jolt大獎
2002年《Java Developer’s Journal》讀者*佳選擇圖書獎
2001年《JavaWorld》雜志編輯推薦圖書獎
2000年《JavaWorld》讀者*佳選擇圖書獎
1999年《Software Development》雜志*佳產品獎
1998年《Java Developer’s Journal》編輯推薦*佳圖書獎
本書贏得了全球程序員的廣泛贊譽,即使是*晦澀的概念,在Bruce Eckel的文字親和力和小而直接的編程示例面前也會化解于無形。從Java的基礎語法到*高級特性,本書都能逐步指導你輕松掌握。
Java編程思想(英文版.第4版)Java編程思想(英文版.第4版) 前言
一開始,我只是將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,我仍然為你在www.MindView.net提供了本書早期版本的免費下載。基于某些原因,我決定不提供本書當前版本的免費電子版。
Java SE6
本書是一個非常耗時的,且具有里程碑意義的一個項目。就在本書出版之前,Java SE6(代號野馬mustang)已經發布了beta版。雖然Java SE6中的一些小變化,對書中的代碼示例有一點影響,但其主要的改進對本書的絕大部分內容并沒有影響。因為Java SE6主要關注于提升速度,以及改進一些(不在本書討論范圍之內)類庫的特性。
本書中代碼全部用Java SE6的一個發布候選版(RC)進行過測試,因此我不認為Java SE6正式發布時會有什么變化能夠影響本書的內容。如果到時真的有什么重要的改變,我將更新本書中的代碼,你可以通過www.MindView.net下載。
本書的封面已經指出,本書面向“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的過程,以及我對于“章節”的意義的重新思考。以前,我會不假思索地認為,每個“章節”應該包含一個“足夠大的”主題。但是,在我教授設計模式的時候,我發現,如果每次只介紹一個模式(即使講課的時間很短),然后立刻組織大家做練習,此時那些學員們的表現是*好的(我發現,這種節奏對于我這個老師而言也更有樂趣)。因此,在這一版中,我試著打破按主題劃分章節的做法,也不理會章節的長度。我想,這也是一個改進。
我同樣也認識到代碼測試的重要性。必須要有一個內建的測試框架,并且每次你開發系統時都必須進行測試。否則,根本沒有辦法知道代碼可靠與否。為了做到這一點,我開發了一個測試框架以顯示和驗證本書中每一個程序的輸出結果。(該框架是用Python編寫的,你可以在www.MindView.net找到可下載的代碼。)關于測試的話題在附錄中有討論,你可以在http://MindView.net/Books/BetterJava找到。其中還包含了其他一些基本技術,我認為所有程序員都應該將它們加入到自己的工具箱中。
此外,我還仔細檢查了書中的每一個示例,并且問我自己,“我為什么采用這種方式實現?”對大多數的示例,我都做了一定程度的修訂與改進,使得這些示例更加貼切。同時,也傳達出我所認為的Java編程中的*佳實踐(至少起到拋磚引玉的作用)。許多以前的示例都經過了重新設計與重新編寫;同時,刪除了不再有意義的示例,也添加了新的示例。
讀者們為此書的前三個版本提出了許多許多精彩的意見。這自然使我覺得非常高興。不過,偶爾讀者也會有抱怨,例如有讀者埋怨“本書太長了”。對我而言,如果“頁數太多”是你唯一的苦惱,那這真令人哭笑不得。(據說奧地利皇帝曾抱怨莫扎特的音樂“音符太多”!我可不是想把自己比作莫扎特。)此外,我只能猜測,發出這種抱怨的讀者還不了解Java語言的博大精深,而且也沒有看過這一領域的其他書籍。無論如何,在這一版中,我已經刪減了過時無用,或不再重要內容。總的來說,我已經盡我所能仔細復查了全書,進行了必要的增刪與改進。對于刪除舊的章節,我還是挺放心的。因為原始的材料在網站上都有(www.MindView.net)。本書從**版到第三版,以及本書的附錄,都可以從此網站上下載。
對于仍然不能接受本書篇幅的讀者,我向你們道歉。請相信,我已經盡我所能精簡本書的長度了。
封面圖片的故事
《Java編程思想》的封面創作靈感來自于美國的 Arts & Crafts運動。該運動始于世紀之交,并在1900 到1920年間達到頂峰。它起源于英格蘭,是對工業革命帶來的機器產品和維多利亞時代高度裝飾化風格的回應。Arts & Crafts強調簡潔設計,而回歸自然是其整個運動的核心,注重手工制造及推崇個性化設計,可是它并不回避使用現代工具。這和我們現今的情形有很多相似之處:世紀之交,從計算機革命的*初起源到對個人來說更精簡、更意味深長的事物的演變,以及對軟件開發技能而不僅是生產程序代碼的強調。
我以同樣的眼光看待Java:嘗試將程序員從操作系統機制中解放出來,朝著“軟件藝師”的方向發展。
我和封面設計者自孩提時代就是朋友,我們從這次運動中獲得靈感,并且都擁有源自那個時期的(或受那個時期啟發而創作的)家具、臺燈和其他作品。
這個封面暗示的另一主題是一個收集盒,博物學家可以用它來展示他們保存的昆蟲標本。這些昆蟲可以看作是對象,并放置到“盒”這個對象當中,而盒對象又放置到“封面對象”當中,這形象地說明了面向對象程序設計中*為基本的“集合”概念。當然,程序員可能會不禁聯想到“程序缺陷(bug)”;這些蟲子被捕獲,并假設在標本罐中被殺死,*后禁閉于一個展示盒中,似乎暗示Java有能力發現、顯示和制服程序缺陷(事實上,這也是它*為強大的屬性之一)。
在本版中,我創造了一幅水彩畫,你可以在封面的背景中看到它。
Java編程思想(英文版.第4版) 目錄
前言
簡介
第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章 訪問權限控制
6.1 包:庫單元
6.1.1 代碼組織
6.1.2 創建獨一無二的包名
6.1.3 定制工具庫
6.1.4 用 import改變行為
6.1.5 對使用包的忠告
6.2 Java訪問權限修飾詞
6.2.1 包訪問權限
6.2.2 public:接口訪問權限
6.2.3 private: 你無法訪問
6.2.4 protected:繼承訪問權限
6.3 接口和實現
6.4 類的訪問權限
6.5 總結
第7章 復用類
7.1 組合語法
7.2 繼承語法
7.2.1 初始化基類
7.3 代理
7.4 結合使用組合和繼承
7.4.1 確保正確清理
7.4.2 名稱屏蔽
7.5 在組合與繼承之間選擇
7.6 protected關鍵字
7.7 向上轉型
7.7.1 為什么稱為“向上轉型”?
7.7.2 再論組合與繼承
7.8 final關鍵字
7.8.1 final 數據
7.8.2 final 方法
7.8.3 final 類
7.8.4 有關final的忠告
7.9 初始化及類的加載
7.9.1 繼承與初始化
7.10 總結
第8章 多態
8.1 再論向上轉型
8.1.1 忘記對象類型
8.2 轉機
8.2.1 方法調用綁定
8.2.2 產生正確的行為
8.2.3 可擴展性
8.2.4 缺陷:“覆蓋”私有方法
8.2.5 缺陷:域與靜態方法
8.3 構造器和多態
8.3.1 構造器的調用順序
8.3.2 繼承與清理
8.3.3 構造器內部的多態方法的行為
第9章 接口
9.1 抽象類和抽象方法
9.2 接口
9.3 完全解耦
9.4 Java中的“多重繼承”
9.5 通過繼承來擴展接口
9.5.1 組合接口時的名字沖突
9.6 適配接口
9.7 接口中的域
9.7.1 初始化接口中的域
9.8 嵌套接口
9.9 接口與工廠
9.10 總結
第10章 內部類
10.1 創建內部類
10.2 鏈接到外部類
10.3 使用.this與.new
10.4 內部類與向上轉型
10.5 在方法和作用域內的內部類
10.6 匿名內部類
10.6.1 再訪工廠方法
10.7 嵌套類
10.7.1 接口內部的類
10.7.2 從多層嵌套類中訪問外部類的成員
10.8 為什么需要內部類
10.8.1 閉包與回調
10.8.2 內部類與控制框架
10.9 內部類的繼承
10.10 內部類可以被覆蓋嗎
10.11 局部內部類
10.12 內部類標識符
10.13 總結
第11章 持有對象
11.1 泛型和類型安全的容器
11.2 基本概念
11.3 添加一組元素
11.4 容器的打印
11.5 List
11.6 迭代器
11.6.1 ListIterator
11.7 LinkedList
11.8 Stack
11.9 Set
11.10 Map
11.11 Queue
11.11.1 PriorityQueue
11.12 Collection和Iterator
11.13 Foreach與迭代器
11.13.1 適配器方法慣用法
11.14 總結
第12章 通過異常處理錯誤
12.1 概念
12.2 基本異常
12.2.1 異常參數
12.3 捕獲異常
12.3.1 try塊
12.3.2 異常處理程序
12.4 創建自定義異常
12.4.1 異常與記錄日志
12.5 異常說明
12.6 捕獲所有異常
12.6.1 棧軌跡
12.6.2 重新拋出異常
12.6.3 異常鏈
12.7 Java標準異常
12.7.1 特例: RuntimeException(運行時異常)
12.8 使用finally進行清理
12.8.1 finally用來做什么
12.8.2 在return中使用finally
12.8.3 缺憾:異常丟失
12.9 異常的限制
12.10 構造器
12.11 異常匹配
12.12 其他可選方式
12.12.1 歷史
12.12.2 觀點
12.12.3 把異常傳遞給控制臺
12.12.4 把“受檢查異常”轉換為“不受檢查的異常”
12.13 異常使用指南
12.14 總結
第13章 字符串
13.1 不可變String
13.2 重載"+"與StringBuilder
13.3 無意識的遞歸
13.4 String上的操作
13.5 格式化輸出
13.5.1 printf()
13.5.2 System.out.format()
13.5.3 Formatter類
13.5.4 格式化說明符
13.5.5 Formatter轉換
13.5.6 String.format()
13.6 正則表達式
13.6.1 基礎
13.6.2 創建正則表達式
13.6.3 限定符
13.6.4 Pattern和Matcher
13.6.5 split()
13.6.6 替換操作
13.6.7 reset()
13.6.8 正則表達式與Java I/O
13.7 掃描輸入
13.7.1 Scanner定界符
13.7.2 用正則表達式掃描
13.8 StringTokenizer
13.9 總結
第14章 類型信息
14.1 為什么需要RTTI
14.2 Class對象
14.2.1 類字面常量
14.2.2 泛化的Class引用
14.2.3 新的轉型語法
14.3類型轉換前先做檢查
14.3.1 使用類字面常量
14.3.2 動態instanceof
14.3.3 遞歸計數
14.4 注冊工廠
14.5 instanceof 與 Class的等價性
14.6 反射:運行時類信息
14.6.1 類方法抽取器
14.7 動態代理
14.8 空對象
14.8.1 模擬對象與樁
14.9 接口與類型信息
14.10 總結
第15章 泛型
15.1 與C++的比較
15.2 簡單泛型
15.2.1 一個元組類庫
15.2.2 一個棧類
15.2.3 RandomList
15.3 泛型接口
15.4 泛型方法
15.4.1 利用類型參數推斷
15.4.2 可變參數與泛型方法
15.4.3 用于Generator的泛型方法
15.4.4 一個通用的Generator
15.4.5 簡化元組的使用
15.4.6 一個Set實用工具
15.5 匿名內部類
15.6 構建復雜模型
15.7 擦除的神秘之處
15.7.1 C++的方式
15.7.2 遷移的可兼容性
15.7.3 擦除的問題
15.7.4 邊界處的動作
15.8 擦除的補償
15.8.1 創建類型實例
15.8.2 泛型數組
15.9 邊界
15.10 通配符
15.10.1 編譯器有多聰明?
15.10.2 抗變
15.10.3 無界通配符
15.10.4 捕獲轉換
15.11 問題
15.11.1 任何基本類型都不能作為類型參數
15.11.2 實現參數化接口
15.11.3 轉型和警告
15.11.4 重載
15.11.5 基類劫持了接口
15.12 自限定的類型
15.12.1 離奇的循環泛型
15.12.2 自限定
15.12.3 參數協變
15.13 動態類型安全
15.14 異常
15.15 混用
15.15.1 C++中的混用
15.15.2 與接口混用
15.15.3 使用裝飾器模式
15.15.4 與動態代理混用
15.16 潛在類型機制
15.17 缺乏潛在類型機制的補償
15.17.1 反射
15.17.2 將一個方法應用于序列
15.17.3 當你并未碰巧擁有正確的接口時
15.17.4 用適配器仿真潛在類型機制
15.18 將函數對象用作策略
15.19 總結:轉型真的如此之糟嗎?
15.19.1 進階讀物
第16章 數組
16.1 數組為什么特殊
16.2 數組是**級對象
16.3 返回一個數組
16.4 多維數組
11.5 數組與泛型
16.6 創建測試數據
16.6.1 Arrays.fill()
16.6.2 數據生成器(Generator)
16.6.3 從Generator中創建數組
16.7 Arrays實用功能
16.7.1 復制數組
16.7.2 數組的比較
16.7.3 數組元素的比較
16.7.4 數組排序
16.7.5 在已排序的數組中查找
16.8 總結
第17章 容器深入研究
17.1 完整的容器分類法
17.2 填充容器
17.2.1 一種Generator解決方案
17.2.2 Map生成器
17.2.3 使用Abstract類
17.3 Collection的功能方法
17.4 可選操作
17.4.1 未獲支持的操作
17.5 List的功能方法
17.6 Set和存儲順序
17.6.1 SortedSet
17.7 隊列
17.7.1 優先級隊列
17.7.2 雙向隊列
17.8 理解Map
17.8.1 性能
17.8.2 SortedMap
17.8.3 LinkedHashMap
17.9 散列與散列碼
17.9.1 理解hashCode()
17.9.2 為速度而散列
17.9.3 覆蓋hashCode()
17.10 選擇接口的不同實現
17.10.1 性能測試框架
17.10.2 對List的選擇
17.10.3 微基準測試的危險
17.10.4 對Set的選擇
17.10.5 對Map的選擇
17.11 實用方法
17.11.1 List的排序和查詢
17.11.2 設定Collection或Map為不可修改
17.11.3 Collection或Map的同步控制
17.12 持有引用
17.12.1 WeakHashMap
17.13 Java 1.0/1.1 的容器
17.13.1 Vector 和 Enumeration
17.13.2 Hashtable
17.13.3 Stack
17.13.4 BitSet
17.14 總結
第18章 Java I/O系統
18.1 File類
18.1.1目錄列表器
18.1.2 目錄實用工具
18.1.3 目錄的檢查及創建
18.2 輸入和輸出
18.2.1 InputStream類型
18.2.2 OutputStream類型
18.3 添加屬性和有用的接口
18.3.1 通過FilterInputStream從InputStream讀取
18.3.2 通過FilterOutPutStream向OutputStream寫入
18.4 Reader和Writer
18.4.1 數據的來源和去處
18.4.2 更改流的行為
18.4.3 未發生變化的類
18.5 自我獨立的類:RandomAccessFile
18.6 I/O流的典型使用方式
18.6.1 緩沖的輸入文件
18.6.2 從內存中輸入
18.6.3 格式化的內存輸入
18.6.4 基本文件輸出
18.6.5 存儲和恢復數據
18.6.6 讀取和寫入隨機訪問文件
18.6.7 管道流
18.7 文件讀寫的實用工具
18.7.1 讀取二進制文件
18.8 標準I/O
18.8.1 從標準輸入中讀取
18.8.2 將System.out轉換成PrintWriter
18.8.3 標準I/O重定向
18.9 進程控制
18.10 新I/O
18.10.1 轉換數據
18.10.2 獲取基本類型
18.10.3 視圖緩沖器
18.10.4 用緩沖器操縱數據
18.10.5 緩沖器的細節
18.10.6 內存映射文件
18.10.7 文件加鎖
18.11 壓縮
18.11.1 用GZIP進行簡單壓縮
18.11.2 用Zip進行多文件存儲
18.11.3 Java檔案文件
18.12 對象序列化
18.12.1 尋找類
18.12.2 序列化的控制
18.12.3 使用“持久性”
18.13 XML
18.14 Preferences
18.15 總結
第19章 枚舉類型
19.1 基本enum特性
19.1.1 將靜態導入用于enum
19.2 向enum中添加新方法
19.2.1 覆蓋enum的方法
19.3 switch語句中的enum
19.4 values()的神秘之處
19.5 實現但不繼承隨機選取
19.6 為組織而使用接口
19.7 使用EnumSet替代標志
19.8 使用EnumMap
19.9 常數相關的方法
19.9.1 使用enum的職責鏈
19.9.2 使用enum的狀態機
19.10 多路分發
19.10.1 使用enum分發
19.10.2 使用常數相關的方法
19.10.3 使用EnumMap分發
19.10.4 使用二維數組
19.11 總結
第20章 注解
20.1 基本語法
20.1.1 定義注解
20.1.2 元注解
20.2 編寫注解處理器
20.2.1 注解元素
20.2.2 缺省值限制
20.2.3 生成外部文件
20.2.4 注解不支持繼承
20.2.5 實現處理器
20.3 使用apt處理注解
20.4 將觀察者模式用于apt
20.5 基于注解的單元測試
20.5.1 將@Unit用于泛型
20.5.2 不需要任何“套件”
20.5.3 實現@Unit
20.5.4 移除測試代碼
20.6 總結
第21章 并發
21.1 并發的多面性
21.1.1 更快的執行
21.1.2 改進代碼設計
21.2 基本的線程機制
21.2.1 定義任務讓步
21.2.2 Thread類
21.2.3 使用Executor
21.2.4 從任務產生返回值
21.2.5 休眠
21.2.6 優先級
21.2.7 讓步
21.2.8 后臺線程
21.2.9 編碼的變體
21.2.10 術語
21.2.11 加入一個線程
21.2.12 創建有響應的用戶界面
21.2.13 線程組
21.2.14 捕獲異常
21.3 共享受限資源
21.3.1 不正確地訪問資源
21.3.2 解決共享資源競爭
21.3.3 原子性與易變性
21.3.4 原子類
21.3.5 臨界資源
21.3.6 在其他對象上同步
21.3.7 線程局部存儲
21.4 終結任務
21.4.1 裝飾性花園
21.4.2 在阻塞時終結
21.4.3 中斷
21.4.4 檢查中斷
21.5 線程之間的協作
21.5.1 wait()與notifyAll()
21.5.2 notify()與notifyAll()
21.5.3 生產者與消費者
21.5.4 生產者-消費者與隊列
21.5.5 任務間使用管道進行輸入/輸出
21.6 死鎖
21.7 新類庫中的構件
21.7.1 CountDownLatch
21.7.2 CyclicBarrier
21.7.3 DelayQueue
21.7.4 PriorityBlockingQueue
21.7.5 使用ScheduledExecutor的溫室控制器
21.7.6 Semaphore
21.7.7 Exchange
21.8 仿真
21.8.1 銀行出納仿真
21.8.2 飯店仿真
21.8.3 分發工作
21.9 性能調優
21.9.1 比較各類互斥技術
21.9.2 免鎖容器
21.9.3 樂觀鎖
21.9.4 ReadWriteLock
21.10 活動對象
21.11 總結
21.12 進階讀物
第22章 圖形化用戶界面
22.1 applet
22.2 Swing基礎
22.2.1 一個顯示框架
22.3 創建按鈕
22.4 捕獲事件
22.5 文本區域
22.6 控制布局
22.6.1 BorderLayout
22.6.2 FlowLayout
22.6.3 GridLayout
22.6.4 GridBagLayout
22.6.5 絕對定位
22.6.6 BoxLayout
22.6.7 *好的方式是什么
22.7 Swing事件模型
22.7.1 事件與監聽器的類型
22.7.2 跟蹤多個事件
22.8 Swing組件一覽
22.8.1 按鈕
22.8.2 圖標
22.8.3 工具提示
22.8.4 文本域
22.8.5 邊框
22.8.6 滾動面板
22.8.7 一個迷你編輯器
22.8.8 復選框
22.8.9 單選按鈕
22.8.10 組合框(下拉列表)
22.8.11 列表框
22.8.12 頁簽面板
22.8.13 消息框
22.8.22 菜單
22.8.15 彈出式菜單
22.8.16 繪圖
22.8.17 對話框
22.8.18 文件對話框
22.8.19 Swing組件上的HTML
22.8.20 滑塊與進度條
22.8.21 選擇外觀
22.8.22 樹、表格和剪貼板
22.9 JNLP與Java Web Start
22.10 Swing與并發
22.10.1 長期運行的任務
22.10.2 可視化線程機制
22.11 可視化編程與JavaBean
22.11.1 JavaBean是什么
22.11.2 使用Introspector抽取出BeanInfo
22.11.3 一個更復雜的Bean
22.11.4 JavaBean與同步
22.11.5 把Bean打包
22.11.6 對更復雜的Bean的支持
22.11.7 更多有關Bean的讀物
22.12 Swing的可替換選擇
22.13 用Flex構建Flash Web客戶端
22.13.1 Hello, Flex
22.13.2 編譯MXML
22.13.3 MXML與ActionScript
22.13.4 容器與控制
22.13.5 效果與風格
22.13.6 事件
22.13.7 連接到Java
22.13.8 數據模型與數據綁定
22.13.9 構建和部署
22.14 創建SWT應用
22.14.1 安裝SWT
22.14.2 Hello, SWT
22.14.3 根除冗余代碼
22.14.4 菜單
22.14.5 頁簽面板、按鈕和事件
22.14.6 圖形
22.14.7 SWT中的并發
22.14.8 SWT還是Swing
22.15 總結
22.15.1 資源
附錄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版) 作者簡介
Bruce Eckel是MindView公司(www.MindView.net)的總裁,他在面向對象技術和設計模式方面提供公開的和專有的培訓研討會、咨詢、指導和設計評論。Bruce Eckel是《Thinking in C++》(C++編程思想)的作者,以及《Thinking in C#》、《Thinking in C++,Volume 2》和其他一些書的作者之一。他發表過150多篇文章,有20多年世界各地的研討會和演講經驗。他是C++標準委員會擁有表決權的成員之一,擁有應用物理學學士和計算機工程學碩士學位。
- >
我與地壇
- >
推拿
- >
朝聞道
- >
月亮與六便士
- >
大紅狗在馬戲團-大紅狗克里弗-助人
- >
龍榆生:詞曲概論/大家小書
- >
羅曼·羅蘭讀書隨筆-精裝
- >
名家帶你讀魯迅:故事新編