基本介紹
- 中文名:On Java 中文版 進階卷
- 作者:Bruce Eckel
- 譯者:孫卓、陳德偉、臧秀濤
- 出版時間:2022年3月20日
- 出版社:人民郵電出版社
- 頁數:560 頁
- ISBN:9787115585028
- 類別:編程技術
- 原作品:On Java 8
- 定價:129.8 元
- 開本:16 開
- 裝幀:精裝
內容簡介,圖書目錄,作者簡介,
內容簡介
本書內容主要是對《On Java 中文版 基礎卷》的拓展延伸,重點講解Java的高級特性、並發、設計模式等相關進階知識,對一些和開發密切相關的底層操作(如I/O系統、底層並發、數據壓縮等)進行深入探討,同時針對基礎卷的重點章節進行了補充說明(如第3章增補了一些關於集合的高級特性)。在附錄中,作者給出了67條關於低級程式設計和編寫代碼的建議,並分享了自己成為程式設計師的一些經驗之談。
本書適合有一定項目開發經驗的Java程式設計師閱讀。
圖書目錄
第1章 枚舉類型
1.1 枚舉類型的基本特性 / 001
靜態導入枚舉類型 / 002
1.2 在枚舉類型中增加自定義方 法 / 003
重載枚舉類型中的方法 / 004
1.3 在switch語句中使用枚舉 / 005
1.4 values( )方法的神秘之處 / 006
1.5 實現,而不是繼承 / 009
1.6 隨機選擇 / 010
1.7 使用接口來組織枚舉 / 011
1.8 用EnumSet來代替標識 / 015
1.9 使用EnumMap / 017
1.10 常量特定方法 / 018
1.10.1 用枚舉實現職責鏈模 式 / 023
1.10.2 用枚舉實現狀態機 / 027
1.11 多路分發 / 032
1.11.1 使用枚舉類型分發 / 034
1.11.2 使用常量特定方法 / 036
1.11.3 使用EnumMap分發 / 038
1.11.4 使用二維數組 / 039
1.12 支持模式匹配的新特性 / 041
1.13 新特性:switch中的箭頭語法 / 041
1.14 新特性:switch中的case null / 042
1.15 新特性:將switch作為表達 式 / 044
1.16 新特性:智慧型轉型 / 046
1.17 新特性:模式匹配 / 048
1.17.1 違反里氏替換原則 / 049
1.17.2 守衛 / 053
1.17.3 支配性 / 055
1.17.4 覆蓋範圍 / 057
1.18 總結 / 058
第2章_對象的傳遞和返回
2.1 傳遞引用 / 061
引用別名 / 061
2.2 創建本地副本 / 063
2.2.1 值傳遞 / 063
2.2.2 克隆對象 / 064
2.2.3 為類增加可克隆能力 / 065
2.2.4 成功的克隆 / 067
2.2.5 Object.clone( )的效果 / 068
2.2.6 克隆組合對象 / 070
2.2.7 深拷貝ArrayList / 073
2.2.8 通過序列化進行深拷貝 / 074
2.2.9 在繼承層次結構中增加可克隆 性並向下覆蓋 / 076
2.2.10 為什麼用這種奇怪的 設計 / 077
2.3 控制可克隆性 / 078
複製構造器 / 082
2.4 不可變類 / 086
2.4.1 創建不可變類 / 088
2.4.2 不可變性的缺點 / 089
2.4.3 String 很特殊 / 091
2.5 總結 / 091
第3章 集合主題
3.1 樣例數據 / 093
3.2 List 的行為 / 099
3.3 Set 的行為 / 102
3.4 在 Map 上使用函式式操作 / 104
3.5 選擇 Map 的部分元素 / 105
3.6 填充集合 / 107
3.6.1 使用 Suppliers 來填充 Collection / 108
3.6.2 使用 Suppliers 來填充 Map / 109
3.7 使用享元自定義 Collection 和 Map / 112
3.8 Collection 的功能 / 123
3.9 可選的操作 / 125 不支持的操作 / 127
3.10 Set 與存儲順序 / 129 SortedSet / 132
3.11 Queue / 134
3.11.1 優先權佇列 / 135
3.11.2 Deque / 136
3.12 理解 Map / 137
3.12.1 性能 / 139
3.12.2 SortedMap / 141
3.12.3 LinkedHashMap / 143
3.13 工具函式 / 144
3.13.1 List 上的排序和 查找 / 147
3.13.2 創建不可修改的 Collection 或 Map / 148
3.13.3 同步 Collection 或 Map / 150
快速失敗 / 150
3.14 持有引用 / 151
WeakHashMap / 154
3.15 Java 1.0/1.1的集合類 / 155
3.15.1 Vector 和Enumeration / 155
3.15.2 Hashtable / 156
3.15.3 Stack / 157
3.15.4 BitSet / 158
3.16 總結 / 160
第4章 註解
4.1 基本語法 / 163
4.1.1 定義註解 / 164
4.1.2 元註解 / 165
4.2 編寫註解處理器 / 166
4.2.1 註解元素 / 167
4.2.2 默認值的限制 / 168
4.2.3 生成外部檔案 / 168
4.2.4 註解不支持繼承 / 172
4.2.5 實現處理器 / 172
4.3 用 javac 處理註解 / 174
4.3.1 最簡單的處理器 / 175
4.3.2 更複雜的處理器 / 178
4.4 基於註解的單元測試 / 182
4.4.1 在 @Unit 中使用泛型 / 190
4.4.2 實現 @Unit / 192
4.5 總結 / 202
第5章 並發編程
5.1 令人迷惑的術語 / 204
並發的新定義 / 206
5.2 並發的超能力 / 207
5.3 並發為速度而生 / 209
5.4 Java並發四定律 / 211
5.4.1 不要使用並發 / 211
5.4.2 一切都不可信,一切都很 重要 / 212
5.4.3 能運行並不代表沒有 問題 / 212
5.4.4 你終究要理解並發 / 213
5.5 殘酷的事實 / 214
5.6 本章剩餘部分 / 216
5.7 並行流 / 218
5.7.1 parallel( ) 並非靈丹妙 藥 / 219
5.7.2 parallel( ) 和 limit( ) 的 作用 / 224
5.7.3 並行流只是看起來很簡 單 / 228
5.8 創建和運行任務 / 228
5.8.1 Task 和 Executor / 228
5.8.2 使用更多的執行緒 / 232
5.8.3 生成結果 / 234
5.8.4 作為任務的lambda與方法引 用 / 236
5.9 終止長時間運行的任務 / 237
5.10 CompletableFuture / 240
5.10.1 基本用法 / 241
5.10.2 其他操作 / 244
5.10.3 合併多個 Completable- Future / 247
5.10.4 模擬場景套用 / 251
5.10.5 異常 / 253
5.11 死鎖 / 259
5.12 構造器並不是執行緒安全的 / 264
5.13 工作量、複雜性、成本 / 268
5.14 總結 / 273
5.14.1 缺點 / 274
5.14.2 Java核心設計的失敗之 處 / 275
5.14.3 其他的庫 / 275
5.14.4 構想一種為並發而設計的 語言 / 276
5.14.5 延伸閱讀 / 276
第6章_底層並發
6.1 什麼是執行緒? / 277
6.1.1 最佳執行緒數 / 279
6.1.2 我可以創建多少執行緒 / 280
6.2 捕獲異常 / 282
6.3 共享資源 / 286
6.3.1 資源競爭 / 286
6.3.2 解決資源競爭 / 290
6.3.3 將 EvenProducer 同步化 / 292
6.4 volatile 關鍵字 / 293
6.4.1 字分裂 / 293
6.4.2 可見性 / 294
6.4.3 (指令)重排序和先行發 生 / 295
6.4.4 何時使用 volatile / 296
6.5 原子性 / 296
6.5.1 Josh的序列號 / 300
6.5.2 原子類 / 303
6.6 臨界區 / 304
6.6.1 在其他對象上進行同步 / 307
6.6.2 使用顯式 Lock 對象 / 308
6.7 庫組件 / 310
6.7.1 延遲佇列 DelayQueue / 311
6.7.2 優先權阻塞佇列 Priority-
6.7.3 無鎖集合 / 316
6.8 總結 / 317
第7章_Java I/O系統
7.1 I/O流 / 319
7.1.1 各種 InputStream 類型 / 321
7.1.2 各種 OutputStream 類型 / 321
7.1.3 添加屬性和有用的接口 / 322
7.1.4 各種 Reader 和 Writer / 324
7.1.5 自成一家的 Random- AccessFile / 327
7.1.6 I/O流的典型用法 / 328
7.1.7 小結 / 335
7.2 標準I/O / 335
7.2.1 從標準輸入中讀取 / 336
7.2.2 將 System.out 轉換為 PrintWriter / 336
7.2.3 標準I/O重定向 / 337
7.2.4 進程控制 / 338
7.3 新I/O系統 / 340
7.3.1 位元組緩衝區 ByteBuffer / 340
7.3.2 轉換數據 / 344
7.3.3 獲取基本類型 / 347
7.3.4 視圖緩衝區 / 348
7.3.5 用緩衝區操縱數據 / 352
7.3.6 記憶體映射檔案 / 357
7.3.7 檔案加鎖 / 361
第8章_設計模式
8.1 設計模式的概念 / 364
8.2 單例模式 / 366
8.3 設計模式的分類 / 370
8.4 模板方法 / 370
8.5 封裝實現 / 371
8.5.1 代理模式 / 372
8.5.2 狀態模式 / 373
8.5.3 狀態機模式 / 376
8.6 工廠模式:封裝對象的創建 / 377
8.6.1 動態工廠模式 / 380
8.6.2 多態工廠模式 / 381
8.6.3 抽象工廠模式 / 382
8.7 函式對象模式 / 384
8.7.1 命令模式 / 385
8.7.2 策略模式 / 386
8.7.3 職責鏈模式 / 388
8.8 改變接口 / 391
8.8.1 適配器模式 / 391
8.8.2 外觀模式 / 392
8.9 解釋器模式:運行時的靈活 性 / 394
8.10 回調 / 394
8.10.1 觀察者模式 / 394
8.10.2 示例:觀察花朵 / 395
8.10.3 一個可視化的觀察者示 例 / 398
8.11 多路分發 / 401
8.12 模式重構 / 405
8.12.1 Trash 和它的子類 / 405
8.12.2 信使對象 / 410
8.12.3 使工廠通用化 / 411
8.12.4 從檔案解析 Trash / 412
8.12.5 用 DynaFactory 實現回 收 / 415
8.12.6 將用法抽象化 / 416
8.12.7 用多路分發重新設計 / 420
8.12.8 訪問者模式 / 427
8.12.9 反射是有害的? / 431
8.13 總結 / 435
附錄A_編程指南
附錄B Javadoc
附錄C 理解equals( )和hashCode( )
附錄D 數據壓縮
附錄E 對象序列化
附錄F 靜態類型檢查的利與弊
作者簡介
Bruce Eckel ,C++標準委員會的創始成員之一,知名技術顧問 ,專注於程式語言和軟體系統設計方面的研究,常活躍於世界各大頂級技術研討會。他自1986年以來,累計出版Thinking in C++、Thinking in Java、On Java 8等十餘部經典計算機著作,曾多次榮獲Jolt 最佳圖書獎(“被譽為軟體業界的奧斯卡”),其代表作 Thinking in Java被譯為中、日、俄、意、波蘭、韓等十幾種語言,在世界範圍內產生廣泛影響。