Java 編程思想, 4/e (Thinking in Java, 4/e) Java编程思想(第4版)

埃史爾

買這商品的人也買了...

商品描述

《Java編程思想(第4版)》書共22章,包括操作符、控制執行流程、訪問權限控制、復用類、多態、接口、通過異常處理錯誤、字符串、泛型、數組、容器深入研究、Iava’UO系統、枚舉類型、並發以及圖形化用戶界面等內容。這些豐富的內容,包含了Java語言基礎語法以及高級特性,適合各個層次的Java程序員閱讀,同時也是高等院校講授面向對象程序設計語言以及Java語言的絕佳教材和參考書。
從《Java編程思想(第4版)》一書獲得的各項大獎以及來自世界各地的讀者評論中,不難看出這是一本經典之作。本書的作者擁有多年教學經驗,對c、c++以及Java語言都有獨到、深入的見解,以通俗易懂及小而直接的示例解釋了一個個晦澀抽象的概念。

★全球程序員必備圖書《Java編程思想》的最新版本!

點擊鏈接進入Java程序設計:
《深入理解Java虛擬機:JVM高級特性與**實踐》
《JAVA核心技術(捲1):基礎知識(原書第8版)》
《JAVA核心技術捲2:高級特徵》
《Java語言程序設計(基礎篇)(原書第8版)》
《Java編程思想(第4版)》
《Effective Java中文版(第2版)》
《Java編程思想(英文版•第4版)》
《Java 實時編程》
《Java加密與解密的藝術》
《Eclipse插件開發(原書第3版)(暢銷插件開發指南新版)》
《Java語言程序設計:進階篇(原書第8版)》
《Maven實戰》

海報:

作者簡介

Bruce Eckel是MindView公司的總裁,該公司向客戶提供軟件諮詢和培訓。他是C++標準委員會擁有表決權的成員之一,擁有應用物理學學士和計算機工程碩士學位。除本書外,他還是《C++編程思想》的作者,並與人合著了《C++編程思想第2卷》(這兩本書的英文影印版及中文版均已由機械工業出版社引進出版)及其他著作。他已經發表了150多篇論文,還經常參加世界各地的研討會並進行演講。

目錄大綱

出版者的話
專家指導委員會
讀者評論
關於《Thinking in C++》
譯者序
譯者簡介
前言
緒論

第1章對象導論1 
1.1抽象過程1 
1.2每個對像都有一個接口2 
1.3每個對像都提供服務4 
1.4被隱藏的具體實現4 
1.5復用具體實現5 
1.6繼承6 
1.6.1 “是一個”與“像是一個”關係8 
1.7伴隨多態的可互換對象8 
1.8單根繼承結構11 
1.9容器11 
1.9 .1參數化類型(範型) 12 
1.10對象的創建和生命期13 
1.11異常處理:處理錯誤14 
1.12並發編程14 
1.13 Java與Internet 15 
1.13.1 Web是什麼15 
1.13.2客戶端編程16 
1.13. 3服務器端編程19 
1.14總結20 

第2章一切都是對象21 
2.1用引用操縱對象21 
2.2必須由你創建所有對象22 
2.2.1存儲到什麼地方22
2.2.2特例:基本類型23 
2.2.3 Java中的數組24 
2.3永遠不需要銷毀對象24 
2.3.1作用域24 
2.3.2對象的作用域25 
2.4創建新的數據類型:類25 
2.4.1字段和方法26 
2.5方法、參數和返回值27 
2.5.1參數列表27 
2.6構建一個Java程序28 
2.6.1名字可見性28 
2.6.2運用其他構件28 
2.6.3 static關鍵字29 
2.7你的第一個Java程序30 
2.7.1編譯和運行31 
2.8註釋和嵌入式文檔32 
2.8.1註釋文檔32 
2.8.2語法33 
2.8.3嵌入式HTML 33 
2.8.4一些標籤示例34 
2.8.5文檔示例35 
2.9編碼風格36 
2.10總結36 
2.11練習37 

第3章操作符38 
3.1更簡單的打印語句38 
3.2使用Java操作符39 
3.3優先級39 
3.4賦值39 
3.4.1方法調用中的別名問題40 
3.5算術操作符41
3.5.1一元加、減操作符43 
3.6自動遞增和遞減43 
3.7關係操作符44 
3.7.1測試對象的等價性44 
3.8邏輯操作符45 
3.8.1短路46 
3.9直接常量47 
3.9.1指數記數法48 
3.10按位操作符49 
3.11移位操作符49 
3.12三元操作符if-else 52 
3.13字符串操作符+和+= 53 
3.14使用操作符時常犯的錯誤54 
3.15類型轉換操作符54 
3.15 .1截尾和舍入55 
3.15.2提升56 
3.16 Java沒有sizeof 56 
3.17操作符小結56 
3.18總結63 

第4章控制執行流程64 
4.1 true和false 64 
4.2 if-else 64 
4.3迭代65 
4.3.1 do -while 65 
4.3.2 for 66 
4.3.3逗號操作符67 
4.4 Foreach語法67 
4.5 return 69 
4.6 break和continue 69 
4.7臭名昭著的goto 70 
4.8 switch 73
4.9總結75 

第5章初始化與清理76 
5.1用構造器確保初始化76 
5.2方法重載77 
5.2.1區分重載方法79 
5.2.2涉及基本類型的重載79 
5.2.3以返回值區分重載方法82 
5.3默認構造器83 
5.4 this關鍵字84 
5.4.1在構造器中調用構造器85 
5.4.2 static的含義86 
5.5清理:終結處理和垃圾回收87 
5.5.1 finalize()的用途何在87 
5.5. 2你必須實施清理88 
5.5.3終結條件88 
5.5.4垃圾回收器如何工作89 
5.6成員初始化91 
5.6.1指定初始化93 
5.7構造器初始化94 
5.7.1初始化順序94 
5.7.2靜態數據的初始化95 
5.7.3顯式的靜態初始化96 
5.7.4非靜態實例初始化97 
5.8數組初始化98 
5.8.1可變參數列表102 
5.9枚舉類型105 
5.10總結107 

第6章訪問權限控制109 
6.1包:庫單元110 
6.1.1代碼組織110
6.1.2創建獨一無二的包名111 
6.1.3定制工具庫114 
6.1.4用import改變行為115 
6.1.5對使用包的忠告115 
6.2 Java訪問權限修飾詞116 
6.2.1包訪問權限116 
6.2.2 public:接口訪問權限116 
6.2.3 private:你無法訪問118 
6.2.4 protected:繼承訪問權限118 
6.3接口和實現120 
6.4類的訪問權限121 
6.5總結123 

第7章復用類125 
7.1組合語法125 
7.2繼承語法127 
7.2.1初始化基類129 
7.3代理130 
7.4結合使用組合和繼承132 
7.4.1確保正確清理133 
7.4.2名稱屏蔽135 
7.5在組合與繼承之間選擇137 
7.6 protected關鍵字138 
7.7向上轉型139 
7.7.1為什麼稱為向上轉型139 
7.7.2再論組合與繼承140 
7.8 final關鍵字140 
7.8.1 final數據140 
7.8.2 final方法143 
7.8.3 final類144
7.8.4有關final的忠告145 
7.9初始化及類的加載145 
7.9.1繼承與初始化146 
7.10總結147 

第8章多態148 
8.1再論向上轉型148 
8.1.1忘記對像類型149 
8.2轉機150 
8.2.1方法調用綁定150 
8.2.2產生正確的行為151 
8.2.3可擴展性153 
8.2.4缺陷:“覆蓋”私有方法156 
8.2.5缺陷:域與靜態方法156 
8.3構造器和多態157 
8.3. 1構造器的調用順序157 
8.3.2繼承與清理159 
8.3.3構造器內部的多態方法的行為162 
8.4協變返回類型164 
8.5用繼承進行設計165 
8.5.1純繼承與擴展166 
8.5.2向下轉型與運行時類型識別167 
8.6總結168 

第9章接口169 
9.1抽像類和抽象方法169 
9.2接口172 
9.3完全解耦174 
9.4 Java中的多重繼承178 
9.5通過繼承來擴展接口180 
9.5.1組合接口時的名字衝突181 
9.6適配接口181
9.7接口中的域183 
9.7.1初始化接口中的域184 
9.8嵌套接口185 
9.9接口與工廠186 
9.10總結188 

第10章內部類190 
10.1創建內部類190 
10.2鏈接到外部類191 
10.3使用.this與.new 193 
10.4內部類與向上轉型194 
10.5在方法和作用域內的內部類195 
10.6匿名內部類196 
10.6.1再訪工廠方法199 
10.7嵌套類201 
10.7.1接口內部的類202 
10.7.2從多層嵌套類中訪問外部類的
成員203 
10.8為什麼需要內部類204 
10.8.1閉包與回調205 
10.8.2內部類與控制框架207 
10.9內部類的繼承212 
10.10內部類可以被覆蓋嗎212 
10.11局部內部類214 
10.12內部類標識符215 
10.13總結215 

第11章持有對象216 
11.1泛型和類型安全的容器216 
11.2基本概念219 
11.3添加一組元素220 
11.4容器的打印221
11.5 List 223 
11.6迭代器226 
11.6.1 ListIterator 227 
11.7 LinkedList 228 
11.8 Stack 229 
11.9 Set 231 
11.10 Map 233 
11.11 Queue 236 
11.11.1 PriorityQueue 237 
11.12 Collection和Iterator 238 
11.13 Foreach與迭代器241 
11.13.1適配器方法慣用法243 
11.14總結248 

第12章通過異常處理錯誤248 
12.1概念249 
12.2基本異常249 
12.2.1異常參數250 
12.3捕獲異常250 
12.3.1 try塊250 
12.3.2異常處理程序250 
12.4創建自定義異常251 
12.4. 1異常與記錄日誌253 
12.5異常說明256 
12.6捕獲所有異常256 
12.6.1棧軌跡257 
12.6.2重新拋出異常258 
12.6.3異常鏈260 
12.7 Java標準異常263 
12.7.1特例:RuntimeException 263
12.8使用finally進行清理264 
12.8.1 finally用來做什麼265 
12.8.2在return中使用finally 267 
12.8.3缺憾:異常丟失268 
12.9異常的限制269 
12.10構造器271 
12.11異常匹配275 
12.12其他可選方式276 
12.12.1歷史277 
12.12.2觀點278 
12.12.3把異常傳遞給控制台279 
12.12.4把“被檢查的異常”轉換為“不受
檢查的異常” 279 
12.13異常使用指南281 
12.14總結281 

第13章字符串283 
13.1不可變String 283 
13.2重載“+”與StringBuilder 283 
13.3無意識的遞歸287 
13.4 String上的操作288 
13.5格式化輸出289 
13.5.1 printf() 289 
13.5.2 System.out.format () 289 
13.5.3 Formatter類290 
13.5.4格式化說明符291 
13.5.5 Formatter轉換292 
13.5.6 String.format() 294
13.6正則表達式295 
13.6.1基礎295 
13.6.2創建正則表達式297 
13.6.3量詞299 
13.6.4 Pattern和Matcher 300 
13.6.5 split() 305 
13.6.6替換操作306 
13.6.7 reset() 307 
13.6.8正則表達式與Java I/O 307 
13.7掃描輸入309 
13.7.1 Scanner定界符310 
13.7.2用正則表達式掃描311 
13.8 StringTokenizer 312 
13.9總結312 

第14章類型信息313 
14.1為什麼需要RTTI 313 
14.2 Class對象314 
14.2.1類字面常量318 
14.2.2泛化的Class引用320 
14.2.3新的轉型語法322 
14.3類型轉換前先做檢查322 
14.3.1使用類字面常量327 
14.3.2動態的instanceof 329 
14.3.3遞歸計數330 
14.4註冊工廠331 
14.5 instanceof與Class的等價性333 
14.6反射:運行時的類信息334
14.6.1類方法提取器335 
14.7動態代理337 
14.8空對象341 
14.8.1模擬對象與樁346 
14.9接口與類型信息346 
14.10總結350 

第15章泛型352 
15.1與C++的比較352 
15.2簡單泛型353 
15.2.1一個元組類庫354 
15.2.2一個堆棧類356 
15.2.3 RandomList 357 
15.3泛型接口358 
15.4泛型方法361 
15.4.1槓桿利用類型參數推斷362 
15.4.2可變參數與泛型方法363 
15.4.3用於Generator的泛型方法364 
15.4.4一個通用的Generator 364 
15.4.5簡化元組的使用366 
15.4.6一個Set實用工具367 
15.5匿名內部類369 
15.6構建複雜模型371 
15.7擦除的神秘之處372 
15.7.1 C++的方式373 
15.7.2遷移兼容性375 
15.7.3擦除的問題376 
15.7.4邊界處的動作377 
15.8擦除的補償380 
15.8.1創建類型實例381
15.8.2泛型數組383 
15.9邊界386 
15.10通配符389 
15.10.1編譯器有多聰明391 
15.10.2逆變393 
15.10.3無界通配符395 
15.10.4捕獲轉換399 
15.11問題400 
15.11.1任何基本類型都不能作為類型
參數400 
15.11.2實現參數化接口401 
15.11.3轉型和警告402 
15.11.4重載403 
15.11.5基類劫持了接口404 
15.12自限定的類型404 
15.12.1古怪的循環泛型404 
15.12.2自限定405 
15.12.3參數協變407 
15.13動態類型安全409 
15.14異常410 
15.15混型412 
15.15.1 C++中的混型412 
15.15.2與接口混合413 
15.15.3使用裝飾器模式414 
15.15 .4與動態代理混合415 
15.16潛在類型機制416 
15.17對缺乏潛在類型機制的補償420 
15.17.1反射420 
15.17.2將一個方法應用於序列421
15.17.3當你並未碰巧擁有正確的接口時423 
15.17.4用適配器仿真潛在類型機制424 
15.18將函數對像用作策略426 
15.19總結:轉型真的如此之糟嗎?430 
15.19.1進階讀物432 

第16章數組433 
16.1數組為什麼特殊433 
16.2數組是第一級對象434 
16.3返回一個數組436 
16.4多維數組437 
16.5數組與泛型440 
16.6創建測試數據442 
16.6.1 Arrays .fill() 442 
16.6.2數據生成器443 
16.6.3從Generator中創建數組447 
16.7 Arrays實用功能450 
16.7.1複製數組450 
16.7.2數組的比較451 
16.7.3數組元素的比較452 
16.7.4數組排序454 
16.7.5在已排序的數組中查找455 
16.8總結457 

第17章容器深入研究459 
17.1完整的容器分類法459 
17.2填充容器460 
17.2.1一種Generator解決方案460 
17.2.2 Map生成器462
17.2.3使用Abstract類464 
17.3 Collection的功能方法470 
17.4可選操作472 
17.4.1未獲支持的操作473 
17.5 List的功能方法474 
17.6 Set和存儲順序477 
17.6.1 SortedSet 479 
17.7隊列480 
17.7.1優先級隊列481 
17.7.2雙向隊列482 
17.8理解Map 483 
17.8.1性能484 
17.8.2 SortedMap 486 
17.8.3 LinkedHashMap 487 
17.9散列與散列碼488 
17.9.1理解hashCode() 490 
17.9.2為速度而散列492 
17.9.3覆蓋hashCode() 495 
17.10選擇接口的不同實現499 
17.10.1性能測試框架499 
17.10.2對List的選擇502 
17.10.3微基準測試的危險507 
17.10.4對Set的選擇508 
17.10.5對Map的選擇509 
17.11實用方法512 
17.11.1 List的排序和查詢514 
17.11.2設定Collection或Map為不可
修改515 
17.11.3 Collection或Map的同步控制516 
17.12持有引用518 
17.12.1 WeakHashMap 519 
17.13 Java 1.0/1.1的容器520 
17.13.1 Vector和Enumeration 520 
17.13.2 Hashtable 521 
17.13.3 Stack 521 
17.13.4 BitSet 522 
17.14總結524 

第18章Java I/O系統525 
18.1 File類525 
18.1.1目錄列表器525 
18.1.2目錄實用工具528 
18.1.3目錄的檢查及創建532 
18.2輸入和輸出533 
18.2.1 InputStream類型534 
18.2.2 OutputStream類型535 
18.3添加屬性和有用的接口535 
18.3.1通過FilterInputStream從InputStream 
讀取數據535 
18.3.2通過FilterOutPutStream向Output- 
Stream寫入536 
18.4 Reader和Writer 537 
18.4.1數據的來源和去處537 
18.4.2更改流的行為538
18.4.3未發生變化的類539 
18.5自我獨立的類:RandomAccessFile 539 
18.6 I/O流的典型使用方式539 
18.6.1緩衝輸入文件540 
18.6.2從內存輸入540 
18.6.3格式化的內存輸入541 
18.6.4基本的文件輸出542 
18.6.5存儲和恢復數據543 
18.6.6讀寫隨機訪問文件544 
18.6.7管道流545 
18.7文件讀寫的實用工具545 
18.7.1讀取二進製文件548 
18.8標準I /O 548 
18.8.1從標準輸入中讀取548 
18.8.2將System.out轉換成PrintWriter 549 
18.8.3標準I/O重定向549 
18.9進程控制550 
18.10新I/O 551 
18.10.1轉換數據554 
18.10.2獲取基本類型556 
18.10.3視圖緩衝器557 
18.10.4用緩衝器操縱數據560 
18.10.5緩衝器的細節560 
18.10.6內存映射文件563 
18.10.7文件加鎖566 
18.11壓縮568 
18.11. 1用GZIP進行簡單壓縮568
18.11.2用Zip進行多文件保存569 
18.11.3 Java檔案文件570 
18.12對象序列化571 
18.12.1尋找類574 
18.12.2序列化的控制575 
18.12.3使用“持久性” 581 
18.13 XML 586 
18.14 Preferences 588 
18.15總結589 

第19章枚舉類型590 
19.1基本enum特性590 
19.1.1將靜態導入用於enum 591 
19.2向enum中添加新方法591 
19.2.1覆蓋enum的方法592 
19.3 switch語句中的enum 593 
19.4 values( )的神秘之處594 
19.5實現,而非繼承596 
19.6隨機選取596 
19.7使用接口組織枚舉597 
19.8使用EnumSet替代標誌600 
19.9使用EnumMap 602 
19.10常量相關的方法603 
19.10.1使用enum的職責鏈606 
19.10 .2使用enum的狀態機609 
19.11多路分發613 
19.11.1使用enum分發615 
19.11.2使用常量相關的方法616
19.11.3使用EnumMap分發618 
19.11.4使用二維數組618 
19.12總結619 

第20章註解620 
20.1基本語法620 
20.1.1定義註解621 
20.1.2元註解622 
20.2編寫註解處理器622 
20.2.1註解元素623 
20.2.2默認值限制624 
20.2.3生成外部文件624 
20.2.4註解不支持繼承627 
20.2.5實現處理器627 
20.3使用apt處理註解629 
20.4將觀察者模式用於apt 632 
20.5基於註解的單元測試634 
20.5.1將@Unit用於泛型641 
20.5.2不需要任何“套件” 642 
20.5.3實現@Unit 642 
20.5.4移除測試代碼647 
20.6總結649 

第21章並發650 
21.1並發的多面性651 
21.1.1更快的執行651 
21.1.2改進代碼設計653 
21.2基本的線程機制653 
21.2.1定義任務654 
21.2.2 Thread類655 
21.2.3使用Executor 656
21.2.4從任務中產生返回值658 
21.2.5休眠659 
21.2.6優先級660 
21.2.7讓步661 
21.2.8後台線程662 
21.2.9編碼的變體665 
21.2.10術語669 
21.2.11加入一個線程669 
21.2.12創建有響應的用戶界面671 
21.2.13線程組672 
21.2.14捕獲異常672 
21.3共享受限資源674 
21.3.1不正確地訪問資源674 
21.3.2解決共享資源競爭676 
21.3.3原子性與易變性680 
21.3.4原子類684 
21.3.5臨界區685 
21.3.6在其他對像上同步689 
21.3.7線程本地存儲690 
21.4終結任務691 
21.4.1裝飾性花園691 
21.4.2在阻塞時終結694 
21.4.3中斷695 
21.4.4檢查中斷701 
21.5線程之間的協作702 
21.5.1 wait()與notifyAll() 703 
21.5.2 notify()與notifyAll() 707 
21.5.3生產者與消費者709
21.5.4生產者-消費者與隊列713 
21.5.5任務間使用管道進行輸入/輸出717 
21.6死鎖718 
21.7新類庫中的構件722 
21.7.1 CountDownLatch 722 
21.7.2 CyclicBarrier 724 
21.7.3 DelayQueue 726 
21.7.4 PriorityBlockingQueue 728 
21.7.5使用ScheduledExecutor的溫室控
制器730 
21.7.6 Semaphore 733 
21.7.7 Exchanger 735 
21.8仿真737 
21.8.1銀行出納員仿真737 
21.8.2飯店仿真741 
21.8.3分發工作744 
21.9性能調優748 
21.9.1比較各類互斥技術748 
21.9.2免鎖容器754 
21.9.3樂觀加鎖760 
21.9.4 ReadWriteLock 761 
21.10活動對象763 
21.11總結766 
21.12進階讀物767 

第22章圖形化用戶界面768 
22.1 applet 769 
22.2 Swing基礎769
22.2.1一個顯示框架771 
22.3創建按鈕772 
22.4捕獲事件773 
22.5文本區域774 
22.6控制佈局776 
22.6.1 BorderLayout 776 
22.6.2 FlowLayout 776 
22.6.3 GridLayout 777 
22.6.4 GridBagLayout 777 
22.6.5絕對定位778 
22.6 .6 BoxLayout 778 
22.6.7最好的方式是什麼778 
22.7 Swing事件模型778 
22.7.1事件與監聽器的類型779 
22.7.2跟踪多個事件783 
22.8 Swing組件一覽785 
22.8.1按鈕785 
22.8.2圖標787 
22.8.3工具提示788 
22.8.4文本域789 
22.8.5邊框790 
22.8.6一個迷你編輯器791 
22.8.7複選框792 
22.8.8單選按鈕793 
22.8.9組合框793 
22.8.10列錶框794 
22.8.11頁簽面板796 
22.8.12消息框796 
22.8.13菜單798
22.8.14彈出式菜單802 
22.8.15繪圖803 
22.8.16對話框805 
22.8.17文件對話框808 
22.8.18 Swing組件上的HTML 809 
22.8.19滑塊與進度條810 
22.8.20選擇外觀811 
22.8 .21樹、表格和剪貼板812 
22.9 JNLP與Java Web Start 812 
22.10 Swing與並發816 
22.10.1長期運行的任務816 
22.10.2可視化線程機制822 
22.11可視化編程與JavaBean 823 
22.11.1 JavaBean是什麼824 
22.11 .2使用Introspector抽取出BeanInfo 825 
22.11.3一個更複雜的Bean 829 
22.11.4 JavaBean與同步831 
22.11.5把Bean打包834 
22.11.6對Bean更高級的支持835 
22.11.7有關Bean的其他讀物836 
22.12 Swing的可替代選擇836 
22.13用Flex構建Flash Web客戶端836 
22.13.1 Hello, Flex 837 
22.13.2編譯MXML 838
22.13.3 MXML與ActionScript 838 
22.13.4容器與控制839 
22.13.5效果與樣式840 
22.13.6事件841 
22.13.7連接到Java 841 
22.13.8數據模型與數據綁定843 
22.13.9構建和部署843 
22.14創建SWT應用844 
22.14.1安裝SWT 845 
22.14.2 Hello, SWT 845 
22.14.3根除冗餘代碼847 
22.14.4菜單848 
22.14.5頁簽面板、按鈕和事件849 
22.14.6圖形852 
22.14.7 SWT中的並發853 
22.14.8 SWT還是Swing 855 
22.15總結855 
22.15.1資源855 
附錄A補充材料856 
附錄B資源859 
索引863