內容簡介
《寫給大忙人看的Java核心技術》為經典著作Core Java作者Cay S. Horstmann的全新力作,以關鍵的核心技術為著眼點,以全局高度提煉語言精髓,以高濃度、高含金量的方式對Java 8新特性進行細緻講解,將其沉浸於Java多年的真知灼見蘊藏於書中,既紮實覆蓋Java編程的基礎知識,更獨具匠心地從Java 8極其重要的新特性之一lambda表達式發端,帶領讀者一路探索和實踐Java 8的諸多新特性,諸如針對數據處理的Stream、並發編程中的增強部分、全新的時間/日期API,以及腳本語言在Java中的使用。
“For the Impatient”系列風格鮮明,除悉數出自大師之手外,更以文筆輕鬆、易讀易懂、富含生動且可用於實踐的示例程式(下載原始碼後可直接運行)見長。這種親身實踐的講授模式,非常便於各階層讀者加深對技術的理解和掌握,初學者可用來參考入門,有開發經驗者也可用來鞏固編程核心知識,或與時俱進地把握技術發展現狀與未來趨勢。
《寫給大忙人看的Java核心技術》適合有一定Java開發經驗的工程師或者架構師閱讀,也可以作為Java新特性的參考手冊。
目錄
第1章 基本的編程結構............................................................................................. 1
1.1 第一個程式 ............................................................................................... 2
1.1.1 “Hello,World”程式解析 ............................................................................. 2
1.1.2 編譯與運行Java程式 ......................................................................................... 3
1.1.3 方法調用 ............................................................................................................ 5
1.2 基本類型 ................................................................................................. 7
1.2.1 整型 .................................................................................................................... 7
1.2.2 浮點類型 ............................................................................................................ 8
1.2.3 char型 ................................................................................................................. 9
1.2.4 布爾型 .............................................................................................................. 10
1.3 變數 .......................................................................................... 10
1.3.1 變數的聲明 ...................................................................................................... 10
1.3.2 名稱 .................................................................................................................. 10
1.3.3 初始化 ...............................................................................................................11
1.3.4 常量 ...................................................................................................................11
1.4 算術操作 .................................................................................................... 13
1.4.1 賦值 .................................................................................................................. 13
1.4.2 基本運算 .......................................................................................................... 14
1.4.3 數學方法 .......................................................................................................... 15
1.4.4 數字類型轉換 .................................................................................................. 16
1.4.5 關係和邏輯操作符 .......................................................................................... 17
1.4.6 大數 .................................................................................................................. 19
1.5 字元串 ................................................................................................. 19
1.5.1 字元串連線 ...................................................................................................... 20
1.5.2 子字元串 .......................................................................................................... 21
1.5.3 字元串比較 ...................................................................................................... 21
1.5.4 數字與字元串轉換 .......................................................................................... 23
1.5.5 String類API ...................................................................................................... 24
1.5.6 編碼點(code point)和編碼單元(code unit) ........................................... 25
1.6 輸入與輸出 .......................................................................................... 26
1.6.1 讀取輸入 .......................................................................................................... 27
1.6.2 格式化輸出 ...................................................................................................... 28
1.7 控制流 ........................................................................................................... 30
1.7.1 分支 .................................................................................................................. 30
1.7.2 循環 .................................................................................................................. 32
1.7.3 跳出循環與繼續循環 ...................................................................................... 34
1.7.4 局部變數作用域 .............................................................................................. 36
1.8 數組和數組列表 ................................................................................. 38
1.8.1 使用數組 .......................................................................................................... 38
1.8.2 構造數組 .......................................................................................................... 39
1.8.3 數組列表 .......................................................................................................... 39
1.8.4 基本類型包裝類 .............................................................................................. 41
1.8.5 增強的for循環 ................................................................................................. 41
1.8.6 數組與數組列表的複製 .................................................................................. 42
1.8.7 數組算法 .......................................................................................................... 43
1.8.8 命令行參數 ...................................................................................................... 44
1.8.9 多維數組 .......................................................................................................... 45
1.9 功能分解 ............................................................................................. 48
1.9.1 靜態方法的聲明與調用 .................................................................................. 48
1.9.2 數組參數與返回值 .......................................................................................... 48
1.9.3 可變參數 .......................................................................................................... 49
練習 ..................................................................................................................... 50
第2章 面向對象編程............................................................................................... 53
2.1 使用對象 .............................................................................................. 54
2.1.1 Accessor(訪問器)和Mutator(更改器)方法 ........................................... 56
2.1.2 對象引用 .......................................................................................................... 56
2.2 實現類 ............................................................................................... 58
2.2.1 實例變數 .......................................................................................................... 58
2.2.2 方法頭 .............................................................................................................. 59
2.2.3 方法體 .............................................................................................................. 59
2.2.4 實例方法調用 .................................................................................................. 60
2.2.5 this引用 ............................................................................................................ 61
2.2.6 值調用 .............................................................................................................. 62
2.3 構造對象 .......................................................................................... 63
2.3.1 實現構造函式 .................................................................................................. 64
2.3.2 重載 .................................................................................................................. 64
2.3.3 調用另一個構造函式 ...................................................................................... 65
2.3.4 默認初始化 ...................................................................................................... 66
2.3.5 實例變數初始化 .............................................................................................. 66
2.3.6 final實例變數 ................................................................................................... 67
2.3.7 無參構造函式 .................................................................................................. 68
2.4 靜態變數和方法 ...................................................................... 69
2.4.1 靜態變數 .......................................................................................................... 69
2.4.2 靜態常量 .......................................................................................................... 70
2.4.3 靜態初始塊 ...................................................................................................... 71
2.4.4 靜態方法 .......................................................................................................... 71
2.4.5 工廠方法 .......................................................................................................... 73
2.5 包 ........................................................................................................ 73
2.5.1 包的聲明 .......................................................................................................... 74
2.5.2 類路徑 .............................................................................................................. 75
2.5.3 包作用域 .......................................................................................................... 77
2.5.4 導入包 .............................................................................................................. 78
2.5.5 靜態導入 .......................................................................................................... 79
2.6 嵌套類 .............................................................................................. 80
2.6.1 靜態嵌套類 ...................................................................................................... 80
2.6.2 內部類 .............................................................................................................. 82
2.6.3 內部類的特殊語法 .......................................................................................... 85
2.7 文檔注釋 ......................................................................................... 86
2.7.1 插入注釋 .......................................................................................................... 86
2.7.2 類注釋 .............................................................................................................. 87
2.7.3 方法注釋 .......................................................................................................... 88
2.7.4 變數注釋 .......................................................................................................... 88
2.7.5 通用注釋 .......................................................................................................... 89
2.7.6 連結 .................................................................................................................. 89
2.7.7 包和概述注釋 .................................................................................................. 90
2.7.8 注釋的提取 ...................................................................................................... 90
練習 ................................................................................................................. 91
第3章 接口和lambda表達式................................................................................... 95
3.1 接口 ....................................................................................................... 96
3.1.1 聲明接口 .......................................................................................................... 96
3.1.2 實現接口 .......................................................................................................... 97
3.1.3 轉換為接口類型 .............................................................................................. 99
3.1.4 強制類型轉換(cast)和instanceof操作符 ................................................... 99
3.1.5 繼承接口 ........................................................................................................ 100
3.1.6 實現多個接口 ................................................................................................ 101
3.1.7 常量 ................................................................................................................ 101
3.2 靜態方法和默認方法 ....................................................................... 101
3.2.1 靜態方法 ........................................................................................................ 102
3.2.2 默認方法 ........................................................................................................ 102
3.2.3 解決默認方法衝突 ........................................................................................ 103
3.3 接口示例 ........................................................................................ 105
3.3.1 Comparable接口 ............................................................................................. 105
3.3.2 Comparator接口 ............................................................................................. 107
3.3.3 Runable接口 ................................................................................................... 108
3.3.4 UI(User Interface)回調 ............................................................................. 109
3.4 lambda表達式 .........................................................................................110
3.4.1 lambda表達式語法 .........................................................................................110
3.4.2 函式式接口 .....................................................................................................111
3.5 方法引用和構造函式引用 .........................................................112
3.5.1 方法引用 .........................................................................................................113
3.5.2 構造函式引用 ......................................................................114
3.6 使用lambda表達式 ...............................................................................115
3.6.1 實現延遲執行 .................................................................................................115
3.6.2 選擇函式式接口 .............................................................................................116
3.6.3 實現自己的函式式接口 .................................................................................118
3.7 lambda表達式和變數作用域 .....................................................119
3.7.1 lambda表達式的作用域 .................................................................................119
3.7.2 訪問來自閉合作用域的變數 ........................................................................ 120
3.8 高階函式 .......................................................................................... 123
3.8.1 返回函式的方法 ............................................................................................ 123
3.8.2 修改函式的方法 ............................................................................................ 123
3.8.3 Comparator方法 ............................................................................................. 124
3.9 局部內部類 ....................................................................... 125
3.9.1 局部類 ............................................................................................................ 125
3.9.2 匿名類 ............................................................................................................ 126
練習 .................................................................................................................................... 127
第4章 繼承與反射................................................................................................ 131
4.1 繼承一個類 ......................................................................................... 132
4.1.1 父類與子類 .................................................................................................... 132
4.1.2 定義和繼承子類方法 .................................................................................... 132
4.1.3 方法覆蓋 ........................................................................................................ 133
4.1.4 子類的構造 .................................................................................................... 134
4.1.5 父類賦值 ........................................................................................................ 135
4.1.6 轉換 ................................................................................................................ 136
4.1.7 final方法和類 ................................................................................................. 136
4.1.8 抽象方法和類 ................................................................................................ 137
4.1.9 受保護訪問 .................................................................................................... 138
4.1.10 匿名子類 ...................................................................................................... 139
4.1.11 繼承和默認方法 .......................................................................................... 140
4.1.12 帶super的方法表達式 ................................................................................. 141
4.2 Object:終極父類...................................................................................................... 141
4.2.1 toString方法 ................................................................................................... 142
4.2.2 equals方法 ...................................................................................................... 144
4.2.3 hashCode方法 ................................................................................................ 147
4.2.4 克隆對象 ........................................................................................................ 148
4.3 枚舉 ...................................................................................................... 151
4.3.1 枚舉方法 ........................................................................................................ 152
4.3.2 構造函式、方法和域 .................................................................................... 153
4.3.3 實例的實現體 ................................................................................................ 153
4.3.4 靜態成員 ........................................................................................................ 154
4.3.5 switch枚舉對象 .............................................................................................. 155
4.4 運行時類型信息和資源 ........................................................................... 156
4.4.1 Class類 ........................................................................................................... 156
4.4.2 資源載入 ........................................................................................................ 160
4.4.3 類載入器 ........................................................................................................ 160
4.4.4 上下文類載入器 ............................................................................................ 162
4.4.5 服務載入器 .................................................................................................... 164
4.5 反射 .............................................................................................. 165
4.5.1 枚舉類成員 .................................................................................................... 165
4.5.2 對象檢查 ........................................................................................................ 167
4.5.3 方法調用 ........................................................................................................ 167
4.5.4 對象構造 ........................................................................................................ 168
4.5.5 JavaBeans ....................................................................................................... 169
4.5.6 使用數組 ........................................................................................................ 170
4.5.7 代理 ................................................................................................................ 172
練習 .................................................................................................................................... 174
第5章 異常、斷言和日誌處理.............................................................................. 177
5.1 異常處理 ............................................................................................. 178
5.1.1 異常拋出 ........................................................................................................ 178
5.1.2 異常繼承層次 ................................................................................................ 179
5.1.3 已檢查異常的聲明 ........................................................................................ 181
5.1.4 異常捕獲 ........................................................................................................ 182
5.1.5 try-with-resources語句 ................................................................................... 183
5.1.6 finally子句 ...................................................................................................... 185
5.1.7 異常重拋和連結 ............................................................................................ 186
5.1.8 堆疊蹤跡 ........................................................................................................ 188
5.1.9 Objects.requireNonNull方法 .......................................................................... 189
5.2 斷言 ........................................................................................................ 189
5.2.1 使用斷言 ........................................................................................................ 190
5.2.2 啟用和禁用斷言 ............................................................................................ 191
5.3 記錄日誌 .................................................................................... 191
5.3.1 採用Logger ..................................................................................................... 192
5.3.2 日誌記錄器 .................................................................................................... 192
5.3.3 日誌級別 ........................................................................................................ 192
5.3.4 其他日誌記錄方法 ........................................................................................ 193
5.3.5 日誌記錄的配置項 ........................................................................................ 195
5.3.6 日誌處理器 .................................................................................................... 196
5.3.7 過濾器和格式化器 ........................................................................................ 199
練習 ......................................................................................................... 199
第6章 泛型編程.................................................................................................... 203
6.1 泛型類 ...................................................................................................... 204
6.2 泛型方法 ................................................................................................. 205
6.3 類型限定 .................................................................................................................. 206
6.4 類型變異和通配符 ................................................................................................. 207
6.4.1 子類型通配符 ................................................................................................ 208
6.4.2 父類型通配符 ................................................................................................ 209
6.4.3 帶類型變數的通配符 .................................................................................... 210
6.4.4 無限定通配符 ................................................................................................ 212
6.4.5 通配符捕獲 .................................................................................................... 212
6.5 Java虛擬機中的泛型 ............................................................................................ 213
6.5.1 類型擦除 ........................................................................................................ 213
6.5.2 轉換插入 ........................................................................................................ 214
6.5.3 橋方法 ............................................................................................................ 215
6.6 泛型約束 .............................................................................................................. 216
6.6.1 無基本類型參數 ............................................................................................ 217
6.6.2 所有類型在運行時都是原始的 .................................................................... 217
6.6.3 不能實例化類型變數 .................................................................................... 218
6.6.4 不能構造參數化類型的數組 ........................................................................ 220
6.6.5 靜態上下文中的類類型變數不是有效的 .................................................... 221
6.6.6 類型擦除後的方法可能不衝突 .................................................................... 222
6.6.7 異常與泛型 .................................................................................................... 223
6.7 反射與泛型 .................................................................................................. 224
6.7.1 Class<T>類 .................................................................................................... 224
6.7.2 虛擬機中的泛型類型信息 ............................................................................ 225
練習 .................................................................................................................................... 227
第7章 集合........................................................................................................... 233
7.1 集合類框架概要 ........................................................................................ 234
7.2 疊代器 ............................................................................................... 238
7.3 set ............................................................................................................................... 240
7.4 map .......................................................................................................................... 241
7.5 其他集合 ......................................................................................................... 245
7.5.1 Properties ........................................................................................................ 245
7.5.2 位組 ................................................................................................................ 247
7.5.3 枚舉set和枚舉map ......................................................................................... 248
7.5.4 棧、佇列、雙端佇列、優先權佇列 ............................................................ 249
7.5.5 弱哈希映射表 ................................................................................................ 250
7.6 視圖 ......................................................................................................................... 251
7.6.1 範圍(range) ............................................................................................... 251
7.6.2 空視圖和單例視圖 ........................................................................................ 252
7.6.3 不可修改的視圖 ............................................................................................ 252
練習 ................................................................................................................................. 253
第8章 Stream....................................................................................................... 257
8.1 從疊代到Stream操作 .............................................................................................. 258
8.2 創建Stream .............................................................................................................. 259
8.3 filter、map和flatMap方法 ...................................................................................... 261
8.4 提取子流和組合流 ......................................................................................... 262
8.5 其他流轉換 ................................................................................................... 263
8.6 簡單歸約 .................................................................................................... 264
8.7 Optional類型 ................................................................................................. 265
8.7.1 如何使用Optional類型值 .............................................................................. 265
8.7.2 如何不使用Optional類型值 .......................................................................... 266
8.7.3 創建Optional類型值 ...................................................................................... 267
8.7.4 使用flatMap來組合可選值函式 .................................................................... 267
8.8 收集結果 ................................................................................................... 268
8.9 將結果收集到map中 ................................................................................... 270
8.10 分組和分片 ........................................................................................... 271
8.11 下游收集器 .............................................................................................. 272
8.12 歸約操作 ............................................................................................................... 274
8.13 基本類型流 ........................................................................................................... 276
8.14 並行流 ................................................................................................................... 278
練習 .................................................................................................................................. 280
第9章 輸入與輸出處理......................................................................................... 285
9.1 輸入/輸出流:Reader和Writer ................................................................................. 286
9.1.1 獲取流對象 .................................................................................................... 286
9.1.2 讀取位元組 ........................................................................................................ 287
9.1.3 寫位元組 ............................................................................................................ 288
9.1.4 字元集編碼 .................................................................................................... 288
9.1.5 文本輸入 ........................................................................................................ 291
9.1.6 文本輸出 ........................................................................................................ 292
9.1.7 讀寫二進制數據 ............................................................................................ 294
9.1.8 隨機存取檔案 ................................................................................................ 295
9.1.9 記憶體映射檔案 ................................................................................................ 295
9.1.10 檔案鎖 .......................................................................................................... 296
9.2 路徑、檔案和目錄 ............................................................................................... 297
9.2.1 路徑 ................................................................................................................ 297
9.2.2 創建檔案和目錄 ............................................................................................ 299
9.2.3 複製、移動和刪除檔案 ................................................................................ 300
9.2.4 訪問目錄內容 ................................................................................................ 301
9.2.5 ZIP檔案系統 .................................................................................................. 304
9.3 URL連線 ................................................................................................................ 305
9.4 正則表達式 ............................................................................................................ 307
9.4.1 正則表達式語法 ............................................................................................ 307
9.4.2 匹配一個或多個 .............................................................................................311
9.4.3 分組 ................................................................................................................ 312
9.4.4 消除或替換匹配結果 .................................................................................... 313
9.4.5 標記 ................................................................................................................ 314
9.5 序列化 ..................................................................................................... 315
9.5.1 Serializable接口 ............................................................................................. 315
9.5.2 瞬態實例變數 ................................................................................................ 317
9.5.3 readObject和writeObject方法 ........................................................................ 317
9.5.4 readResolve和writeReplace方法 ................................................................... 319
9.5.5 版本化 ............................................................................................................ 320
練習 ..................................................................................................................... 321
第10章 並發編程.................................................................................................. 325
10.1 並發任務 ................................................................................................. 326
10.1.1 運行任務 .................................................................................................... 326
10.1.2 Future和Executor服務 ............................................................................... 328
10.2 執行緒安全 ................................................................................................. 331
10.2.1 可見性 ........................................................................................................ 331
10.2.2 競爭條件 .................................................................................................... 333
10.2.3 安全並發的策略 ........................................................................................ 336
10.2.4 不可變類 .................................................................................................... 336
10.3 並行算法 ............................................................................................ 337
10.3.1 並行流 ........................................................................................................ 338
10.3.2 並行數組操作 ............................................................................................ 338
10.4 執行緒安全的數據結構 .............................................................................. 339
10.4.1 ConcurrentHashMap .................................................................................. 340
10.4.2 阻塞佇列 .................................................................................................... 341
10.4.3 其他執行緒安全的數據結構 ........................................................................ 343
10.5 原子值 ................................................................................................... 344
10.6 鎖 ........................................................................................................ 346
10.6.1 可重入鎖(ReentrantLock) .................................................................... 347
10.6.2 synchronized關鍵字................................................................................... 348
10.6.3 條件等待 .................................................................................................... 350
10.7 執行緒 ...................................................................................................... 352
10.7.1 啟動執行緒 .................................................................................................... 352
10.7.2 執行緒中斷 .................................................................................................... 353
10.7.3 執行緒變數 .................................................................................................... 355
10.7.4 執行緒的其他屬性 ........................................................................................ 356
10.8 異步計算 ....................................................................................................... 356
10.8.1 UI回調中的長期運行任務 ........................................................................ 356
10.8.2 可完成的future .......................................................................................... 358
10.9 進程 .............................................................................................. 361
10.9.1 構建進程 .................................................................................................... 361
10.9.2 運行進程 .................................................................................................... 363
練習 .................................................................................................. 364
第11章 註解......................................................................................................... 371
11.1 使用註解 ......................................................................................... 372
11.1.1 註解元素 .................................................................................................... 372
11.1.2 多註解和重複註解 .................................................................................... 373
11.1.3 註解聲明 .................................................................................................... 374
11.1.4 註解類型用途 ............................................................................................ 375
11.1.5 明確接收者 ................................................................................................ 376
11.2 定義註解 ......................................................................................... 378
11.3 標準註解 ................................................................................................ 380
11.3.1 編譯相關的註解 ........................................................................................ 381
11.3.2 資源管理相關的註解 ................................................................................ 382
11.3.3 元註解 ........................................................................................................ 382
11.4 運行時註解處理 ................................................................................. 384
11.5 源碼級註解處理 .................................................................................. 387
11.5.1 註解處理器 ................................................................................................ 388
11.5.2 語言模型API.............................................................................................. 388
11.5.3 使用註解生成源碼 .................................................................................... 389
練習 ............................................................................................. 392
第12章 日期和時間API......................................................................................... 395
12.1 時間線 ....................................................................................................... 396
12.2 本地日期 ........................................................................................... 398
12.3 日期調整器 ............................................................................................. 401
12.4 本地時間 ................................................................................................. 402
12.5 時區時間 ................................................................................ 403
12.6 格式化和解析 .............................................................................. 406
12.7 應對遺留代碼 ................................................................................. 409
練習 ............................................................................................................411
第13章 國際化...................................................................................................... 413
13.1 本地化 ............................................................................................ 414
13.1.1 指定本地化 ................................................................................................ 414
13.1.2 默認locale .................................................................................................. 417
13.1.3 顯示名稱 .................................................................................................... 418
13.2 數字格式化 ........................................................................................... 418
13.3 貨幣符號 ................................................................................................. 419
13.4 日期和時間格式化 ......................................................................... 420
13.5 排序和規格化 ........................................................................................... 422
13.6 訊息格式化 ........................................................................................ 424
13.7 資源束 ................................................................................................... 426
13.7.1 組織資源束 ................................................................................................ 426
13.7.2 資源束類 .................................................................................................... 428
13.8 字元集編碼 ................................................................................. 429
13.9 首選項 ............................................................................................... 430
練習 ................................................................................................................ 432
第14章 編譯與腳本.............................................................................................. 435
14.1 編譯器API ................................................................................................................ 435
14.1.1 調用編譯器 ................................................................................................ 436
14.1.2 啟動編譯任務 ............................................................................................ 436
14.1.3 從記憶體讀取源檔案 .................................................................................... 437
14.1.4 向記憶體寫入位元組碼 .................................................................................... 438
14.1.5 捕獲診斷信息 ............................................................................................ 440
14.2 腳本API .................................................................................................................... 440
14.2.1 獲取腳本引擎 ............................................................................................ 440
14.2.2 綁定 ............................................................................................................ 441
14.2.3 重定向輸入與輸出 .................................................................................... 442
14.2.4 調用腳本函式和方法 ................................................................................ 443
14.2.5 編譯腳本 .................................................................................................... 444
14.3 Nashorn腳本引擎 .............................................................................. 445
14.3.1 從命令行運行Nashorn .............................................................................. 445
14.3.2 調用get、set和重載方法 .......................................................................... 446
14.3.3 構造Java對象 ............................................................................................. 447
14.3.4 JavaScript和Java中的字元串 .................................................................... 449
14.3.5 數字 ............................................................................................................ 449
14.3.6 使用數組 .................................................................................................... 450
14.3.7 列表與映射 ................................................................................................ 451
14.3.8 lambda表達式 ............................................................................................ 452
14.3.9 繼承Java類與實現Java接口 ...................................................................... 453
14.3.10 異常 .......................................................................................................... 455
14.4 shell腳本與Nashorn .............................................................................. 455
14.4.1 執行shell命令 ............................................................................................ 456
14.4.2 字元串插值 ................................................................................................ 456
14.4.3 腳本輸入 .................................................................................................... 457
練習 .................................................................................................... 458