譯者序
前言
緻謝
第1章 Java程序設計概述 1
1.1 Java程序設計平颱 1
1.2 Java“白皮書”的關鍵術語 2
1.2.1 簡單性 2
1.2.2 麵嚮對象 3
1.2.3 分布式 3
1.2.4 健壯性 3
1.2.5 安全性 3
1.2.6 體係結構中立 4
1.2.7 可移植性 4
1.2.8 解釋型 5
1.2.9 高性能 5
1.2.10 多綫程 5
1.2.11 動態性 6
1.3 Java applet與Internet 6
1.4 Java發展簡史 7
1.5 關於Java的常見誤解 10
第2章 Java程序設計環境 12
2.1 安裝Java開發工具包 12
2.1.1 下載JDK 12
2.1.2 設置JDK 14
2.1.3 安裝庫源文件和文檔 16
2.2 使用命令行工具 16
2.3 使用集成開發環境 20
2.4 JShell 23
第3章 Java的基本程序設計結構 26
3.1 一個簡單的Java應用程序 26
3.2 注釋 29
3.3 數據類型 29
3.3.1 整型 30
3.3.2 浮點類型 31
3.3.3 char類型 32
3.3.4 Unicode和char類型 33
3.3.5 boolean類型 34
3.4 變量與常量 34
3.4.1 聲明變量 34
3.4.2 變量初始化 35
3.4.3 常量 36
3.4.4 枚舉類型 37
3.5 運算符 37
3.5.1 算術運算符 37
3.5.2 數學函數與常量 38
3.5.3 數值類型之間的轉換 40
3.5.4 強製類型轉換 41
3.5.5 結閤賦值和運算符 41
3.5.6 自增與自減運算符 41
3.5.7 關係和boolean運算符 42
3.5.8 位運算符 43
3.5.9 括號與運算符級彆 43
3.6 字符串 44
3.6.1 子串 45
3.6.2 拼接 45
3.6.3 不可變字符串 45
3.6.4 檢測字符串是否相等 47
3.6.5 空串與Null串 48
3.6.6 碼點與代碼單元 48
3.6.7 String API 49
3.6.8 閱讀聯機API文檔 51
3.6.9 構建字符串 54
3.7 輸入與輸齣 55
3.7.1 讀取輸入 55
3.7.2 格式化輸齣 57
3.7.3 文件輸入與輸齣 61
3.8 控製流程 62
3.8.1 塊作用域 63
3.8.2 條件語句 63
3.8.3 循環 66
3.8.4 確定循環 69
3.8.5 多重選擇:switch語句 72
3.8.6 中斷控製流程的語句 74
3.9 大數 76
3.10 數組 79
3.10.1 聲明數組 79
3.10.2 訪問數組元素 80
3.10.3 for each循環 81
3.10.4 數組拷貝 82
3.10.5 命令行參數 82
3.10.6 數組排序 83
3.10.7 多維數組 86
3.10.8 不規則數組 88
第4章 對象與類 92
4.1 麵嚮對象程序設計概述 92
4.1.1 類 93
4.1.2 對象 94
4.1.3 識彆類 94
4.1.4 類之間的關係 95
4.2 使用預定義類 96
4.2.1 對象與對象變量 96
4.2.2 Java類庫中的LocalDate類 99
4.2.3 更改器方法與訪問器方法 100
4.3 用戶自定義類 103
4.3.1 Employee類 104
4.3.2 多個源文件的使用 106
4.3.3 剖析Employee類 107
4.3.4 從構造器開始 107
4.3.5 用var聲明局部變量 109
4.3.6 使用null引用 109
4.3.7 隱式參數與顯式參數 110
4.3.8 封裝的優點 111
4.3.9 基於類的訪問權限 113
4.3.10 私有方法 114
4.3.11 f?inal實例字段 114
4.4 靜態字段與靜態方法 115
4.4.1 靜態字段 115
4.4.2 靜態常量 116
4.4.3 靜態方法 116
4.4.4 工廠方法 117
4.4.5 main方法 118
4.5 方法參數 121
4.6 對象構造 126
4.6.1 重載 126
4.6.2 默認字段初始化 127
4.6.3 無參數的構造器 127
4.6.4 顯式字段初始化 128
4.6.5 參數名 129
4.6.6 調用另一個構造器 129
4.6.7 初始化塊 130
4.6.8 對象析構與f?inalize方法 134
4.7 包 134
4.7.1 包名 134
4.7.2 類的導入 135
4.7.3 靜態導入 136
4.7.4 在包中增加類 137
4.7.5 包訪問 139
4.7.6 類路徑 140
4.7.7 設置類路徑 142
4.8 JAR文件 143
4.8.1 創建JAR文件 143
4.8.2 清單文件 144
4.8.3 可執行JAR文件 145
4.8.4 多版本JAR文件 145
4.8.5 關於命令行選項的說明 146
4.9 文檔注釋 148
4.9.1 注釋的插入 148
4.9.2 類注釋 149
4.9.3 方法注釋 149
4.9.4 字段注釋 150
4.9.5 通用注釋 150
4.9.6 包注釋 151
4.9.7 注釋抽取 151
4.10 類設計技巧 152
第5章 繼承 155
5.1 類、超類和子類 155
5.1.1 定義子類 155
5.1.2 覆蓋方法 157
5.1.3 子類構造器 158
5.1.4 繼承層次 162
5.1.5 多態 162
5.1.6 理解方法調用 163
5.1.7 阻止繼承:f?inal類和方法 165
5.1.8 強製類型轉換 166
5.1.9 抽象類 168
5.1.10 受保護訪問 173
5.2 Object:所有類的超類 174
5.2.1 Object類型的變量 174
5.2.2 equals方法 175
5.2.3 相等測試與繼承 176
5.2.4 hashCode方法 179
5.2.5 toString方法 181
5.3 泛型數組列錶 186
5.3.1 聲明數組列錶 187
5.3.2 訪問數組列錶元素 189
5.3.3 類型化與原始數組列錶的
兼容性 191
5.4 對象包裝器與自動裝箱 192
5.5 參數數量可變的方法 195
5.6 枚舉類 196
5.7 反射 198
5.7.1 Class類 199
5.7.2 聲明異常入門 201
5.7.3 資源 202
5.7.4 利用反射分析類的能力 203
5.7.5 使用反射在運行時分析
對象 208
5.7.6 使用反射編寫泛型數組
代碼 213
5.7.7 調用任意方法和構造器 216
5.8 繼承的設計技巧 219
第6章 接口、lambda錶達式與
內部類 222
6.1 接口 222
6.1.1 接口的概念 222
6.1.2 接口的屬性 228
6.1.3 接口與抽象類 229
6.1.4 靜態和私有方法 230
6.1.5 默認方法 230
6.1.6 解決默認方法衝突 231
6.1.7 接口與迴調 233
6.1.8 Comparator接口 235
6.1.9 對象剋隆 236
6.2 lambda錶達式 242
6.2.1 為什麼引入lambda錶達式 242
6.2.2 lambda錶達式的語法 243
6.2.3 函數式接口 245
6.2.4 方法引用 247
6.2.5 構造器引用 250
6.2.6 變量作用域 250
6.2.7 處理lambda錶達式 252
6.2.8 再談Comparator 254
6.3 內部類 255
6.3.1 使用內部類訪問對象狀態 256
6.3.2 內部類的特殊語法規則 259
6.3.3 內部類是否有用、必要和
安全 260
6.3.4 局部內部類 262
6.3.5 由外部方法訪問變量 263
6.3.6 匿名內部類 264
6.3.7 靜態內部類 267
6.4 服務加載器 270
6.5 代理 273
6.5.1 何時使用代理 273
6.5.2 創建代理對象 273
6.5.3 代理類的特性 277
第7章 異常、斷言和日誌 279
7.1 處理錯誤 279
7.1.1 異常分類 280
7.1.2 聲明檢查型異常 282
7.1.3 如何拋齣異常 284
7.1.4 創建異常類 285
7.2 捕獲異常 286
7.2.1 捕獲異常 286
7.2.2 捕獲多個異常 288
7.2.3 再次拋齣異常與異常鏈 289
7.2.4 f?inally子句 290
7.2.5 try-with-Resources語句 292
7.2.6 分析堆棧軌跡元素 294
7.3 使用異常的技巧 297
7.4 使用斷言 300
7.4.1 斷言的概念 300
7.4.2 啓用和禁用斷言 301
7.4.3 使用斷言完成參數檢查 302
7.4.4 使用斷言提供假設文檔 303
7.5 日誌 304
7.5.1 基本日誌 305
7.5.2 高級日誌 305
7.5.3 修改日誌管理器配置 307
7.5.4 本地化 308
7.5.5 處理器 309
7.5.6 過濾器 312
7.5.7 格式化器 313
7.5.8 日誌技巧 313
7.6 調試技巧 321
第8章 泛型程序設計 326
8.1 為什麼要使用泛型程序設計 326
8.1.1 類型參數的好處 326
8.1.2 誰想成為泛型程序員 328
8.2 定義簡單泛型類 328
8.3 泛型方法 330
8.4 類型變量的限定 331
8.5 泛型代碼和虛擬機 333
8.5.1 類型擦除 333
8.5.2 轉換泛型錶達式 335
8.5.3 轉換泛型方法 335
8.5.4 調用遺留代碼 337
8.6 限製與局限性 338
8.6.1 不能用基本類型實例化類型參數 338
8.6.2 運行時類型查詢隻適用於原始類型 338
8.6.3 不能創建參數化類型的數組 338
8.6.4 Varargs警告 339
8.6.5 不能實例化類型變量 340
8.6.6 不能構造泛型數組 341
8.6.7 泛型類的靜態上下文中類型變量無效 342
8.6.8 不能拋齣或捕獲泛型類的實例 343
8.6.9 可以取消對檢查型異常的檢查 343
8.6.10 注意擦除後的衝突 345
8.7 泛型類型的繼承規則 346
8.8 通配符類型 348
8.8.1 通配符概念 348
8.8.2 通配符的超類型限定 349
8.8.3 無限定通配符 351
8.8.4 通配符捕獲 352
8.9 反射和泛型 354
8.9.1 泛型Class類 354
8.9.2 使用Class<T>參數進行類型匹配 355
8.9.3 虛擬機中的泛型類型信息 356
8.9.4 類型字麵量 359
第9章 集閤 365
9.1 Java集閤框架 365
9.1.1 集閤接口與實現分離 365
9.1.2 Collection接口 368
9.1.3 迭代器 368
9.1.4 泛型實用方法 370
9.2 集閤框架中的接口 373
9.3 具體集閤 375
9.3.1 鏈錶 375
9.3.2 數組列錶 384
9.3.3 散列集 385
9.3.4 樹集 388
9.3.5 隊列與雙端隊列 391
9.3.6 優先隊列 392
9.4 映射 394
9.4.1 基本映射操作 394
9.4.2 更新映射條目 397
9.4.3 映射視圖 398
9.4.4 弱散列映射 399
9.4.5 鏈接散列集與映射 400
9.4.6 枚舉集與映射 401
9.4.7 標識散列映射 402
9.5 視圖與包裝器 403
9.5.1 小集閤 404
9.5.2 子範圍 405
9.5.3 不可修改的視圖 405
9.5.4 同步視圖 406
9.5.5 檢查型視圖 407
9.5.6 關於可選操作的說明 407
9.6 算法 411
9.6.1 為什麼使用泛型算法 411
9.6.2 排序與混排 412
9.6.3 二分查找 414
9.6.4 簡單算法 415
9.6.5 批操作 417
9.6.6 集閤與數組的轉換 418
9.6.7 編寫自己的算法 418
9.7 遺留的集閤 419
9.7.1 Hashtable類 419
9.7.2 枚舉 419
9.7.3 屬性映射 421
9.7.4 棧 424
9.7.5 位集 424
第10章 圖形用戶界麵程序設計 429
10.1 Java用戶界麵工具包簡史 429
10.2 顯示窗體 430
10.2.1 創建窗體 431
10.2.2 窗體屬性 433
10.3 在組件中顯示信息 435
10.3.1 處理2D圖形 439
10.3.2 使用顔色 445
10.3.3 使用字體 446
10.3.4 顯示圖像 452
10.4 事件處理 453
10.4.1 基本事件處理概念 453
10.4.2 實例:處理按鈕點擊事件 454
10.4.3 簡潔地指定監聽器 457
10.4.4 適配器類 458
10.4.5 動作 460
10.4.6 鼠標事件 464
10.4.7 AWT事件繼承層次 469
10.5 首選項API 472
第11章 Swing用戶界麵組件 478
11.1 Swing和模型–視圖–控製器設計模式 478
11.2 布局管理概述 481
11.2.1 布局管理器 482
11.2.2 邊框布局 483
11.2.3 網格布局 484
11.3 文本輸入 485
11.3.1 文本域 486
11.3.2 標簽和標簽組件 487
11.3.3 密碼域 488
11.3.4 文本區 489
11.3.5 滾動窗格 489
11.4 選擇組件 491
11.4.1 復選框 492
11.4.2 單選按鈕 494
11.4.3 邊框 497
11.4.4 組閤框 499
11.4.5 滑動條 502
11.5 菜單 507
11.5.1 菜單構建 507
11.5.2 菜單項中的圖標 509
11.5.3 復選框和單選按鈕菜單項 510
11.5.4 彈齣菜單 511
11.5.5 鍵盤助記符和加速器 512
11.5.6 啓用和禁用菜單項 514
11.5.7 工具條 518
11.5.8 工具提示 519
11.6 復雜的布局管理 520
11.6.1 網格包布局 520
11.6.2 定製布局管理器 529
11.7 對話框 532
11.7.1 選項對話框 533
11.7.2 創建對話框 536
11.7.3 數據交換 540
11.7.4 文件對話框 545
第12章 並發 552
12.1 什麼是綫程 552
12.2 綫程狀態 555
12.2.1 新建綫程 556
12.2.2 可運行綫程 556
12.2.3 阻塞和等待綫程 556
12.2.4 終止綫程 558
12.3 綫程屬性 558
12.3.1 中斷綫程 558
12.3.2 守護綫程 561
12.3.3 綫程名 561
12.3.4 未捕獲異常的處理器 561
12.3.5 綫程優先級 563
12.4 同步 563
12.4.1 競態條件的一個例子 563
12.4.2 競態條件詳解 567
12.4.3 鎖對象 568
12.4.4 條件對象 571
12.4.5 synchronized關鍵字 576
12.4.6 同步塊 579
12.4.7 監視器概念 580
12.4.8 volatile字段 581
12.4.9 final變量 582
12.4.10 原子性 582
12.4.11 死鎖 584
12.4.12 綫程局部變量 586
12.4.13 為什麼廢棄stop和suspend方法 587
12.5 綫程安全的集閤 589
12.5.1 阻塞隊列 589
12.5.2 高效的映射、集和隊列 595
12.5.3 映射條目的原子更新 596
12.5.4 對並發散列映射的批操作 599
12.5.5 並發集視圖 600
12.5.6 寫數組的拷貝 601
12.5.7 並行數組算法 601
12.5.8 較早的綫程安全集閤 602
12.6 任務和綫程池 603
12.6.1 Callable與Future 603
12.6.2 執行器 605
12.6.3 控製任務組 607
12.6.4 fork-join框架 612
12.7 異步計算 615
12.7.1 可完成Future 615
12.7.2 組閤可完成Future 616
12.7.3 用戶界麵迴調中的長時間運行任務 622
12.8 進程 628
12.8.1 建立一個進程 628
12.8.2 運行一個進程 630
12.8.3 進程句柄 631
附錄 Java關鍵字 634
· · · · · · (
收起)