本書是經(jīng)典 Java開發(fā)基礎(chǔ)書《Java核心技術(shù)》的速學版本。本書首先介紹了Java 語言的基礎(chǔ)知識,包含接口、Lambda 表達式、繼承、反射、異常處理、斷言、日志、泛型編程、容器等關(guān)鍵概念;其次介紹了流、輸人和輸出處理、并發(fā)、注解、日期和時間 API、國際化、編譯和腳本、Java 平臺模塊系統(tǒng)等高級特性。本書不僅可以讓讀者深入了解 Java 編程的基礎(chǔ)知識和核心概念,還可以幫助讀者掌握 Java 應(yīng)用程序開發(fā)所需的基本技能。本書涵蓋了Java17中更新的內(nèi)容,提供了許多實用的示例代碼,還給出了基于作者實際經(jīng)驗的提示、注意和警告。
本書可供希望深入掌握Java應(yīng)用的初學者使用,也適合打算將Java 應(yīng)用到實際項目中的編程人員使用。
1.經(jīng)典Java作品《Java核心技術(shù)》的速學版本,降低學習門檻,幫助讀者更容易學習Java,更快地把相關(guān)知識應(yīng)用到實際工作中;
2.Java入門優(yōu)選書籍,涵蓋Java 8-Java 17的新特性,作者Java大神霍斯特曼;
3.快速切入主題,展示解決編程問題所需的核心知識,既扎實覆蓋Java編程的基礎(chǔ)知識,更獨具匠心地帶領(lǐng)讀者探索和實踐Java的諸多新特性;
4.提供豐富的示例,還給出了大量注釋、提示和警告,這些都是作者實際經(jīng)驗的總結(jié),對編程實踐大有裨益。
[美]凱·S.霍斯特曼(Cay S.Horstmann) 《Java 核心技術(shù)(原書第 12 版)》兩卷本(Core Java, Volumes I and II, Twelfth Edition)的主要作者,他還為專業(yè)編程人員和計算機科學專業(yè)的學生撰寫了十多本書。 他是美國圣何塞州立大學計算機專業(yè)的科學榮譽退休教授,也是一名Java Champion。
第 1 章 基本編程結(jié)構(gòu) 1
1.1 我們的第 一個程序 1
1.1.1 剖析Hello, World程序 1
1.1.2 編譯和運行 Java 程序 2
1.1.3 方法調(diào)用 4
1.1.4 JShell 4
1.2 基本類型 6
1.2.1 有符號整數(shù)類型 7
1.2.2 浮點類型 7
1.2.3 char 類型 8
1.2.4 boolean 類型 8
1.3 變量 8
1.3.1 變量聲明 8
1.3.2 標識符 9
1.3.3 初始化 9
1.3.4 常量 9
1.4 算術(shù)運算 10
1.4.1 賦值 11
1.4.2 基本算術(shù)運算符 11
1.4.3 數(shù)學方法 12
1.4.4 數(shù)值的類型轉(zhuǎn)換 12
1.4.5 關(guān)系運算符和邏輯運算符 13
1.4.6 大數(shù) 14
1.5 字符串 14
1.5.1 拼接 14
1.5.2 子串 15
1.5.3 字符串比較 15
1.5.4 數(shù)值和字符串的相互轉(zhuǎn)換 16
1.5.5 字符串 API 16
1.5.6 碼點和代碼單元 18
1.5.7 文本塊 19
1.6 輸入和輸出 20
1.6.1 讀取輸入 20
1.6.2 格式化輸出 21
1.7 控制流 22
1.7.1 分支 23
1.7.2 switch 語句 23
1.7.3 循環(huán) 24
1.7.4 break 和 continue 25
1.7.5 局部變量的作用域 26
1.8 數(shù)組和數(shù)組列表 27
1.8.1 使用數(shù)組 27
1.8.2 數(shù)組構(gòu)造 28
1.8.3 數(shù)組列表 28
1.8.4 基本類型的封裝類 29
1.8.5 增強 for 循環(huán) 30
1.8.6 復制數(shù)組和數(shù)組列表 30
1.8.7 數(shù)組算法 31
1.8.8 命令行參數(shù) 31
1.8.9 多維數(shù)組 31
1.9 功能分解 33
1.9.1 聲明和調(diào)用靜態(tài)方法 33
1.9.2 數(shù)組參數(shù)和返回值 33
1.9.3 可變參數(shù) 34
練習 34
第 2 章 面向?qū)ο缶幊獭?6
2.1 使用對象 36
2.1.1 訪問器方法和修改器方法 37
2.1.2 對象引用 38
2.2 實現(xiàn)類 39
2.2.1 實例變量 39
2.2.2 方法頭 39
2.2.3 方法體 39
2.2.4 實例方法調(diào)用 40
2.2.5 this 引用 40
2.2.6 按值調(diào)用 41
2.3 對象構(gòu)造 42
2.3.1 實現(xiàn)構(gòu)造器 42
2.3.2 重載 42
2.3.3 從一個構(gòu)造器調(diào)用另一個構(gòu)造器 43
2.3.4 默認初始化 43
2.3.5 實例變量初始化 43
2.3.6 final 實例變量 44
2.3.7 無參數(shù)構(gòu)造器 44
2.4 記錄 44
2.4.1 記錄的概念 45
2.4.2 構(gòu)造器:標準的、自定義的和簡潔的 46
2.5 靜態(tài)變量和靜態(tài)方法 46
2.5.1 靜態(tài)變量 46
2.5.2 靜態(tài)常量 47
2.5.3 靜態(tài)初始化塊 47
2.5.4 靜態(tài)方法 47
2.5.5 工廠方法 48
2.6 包 49
2.6.1 包聲明 49
2.6.2 jar 命令 49
2.6.3 類路徑 50
2.6.4 包訪問 51
2.6.5 導入類 51
2.6.6 靜態(tài)導入 52
2.7 嵌套類 52
2.7.1 靜態(tài)嵌套類 52
2.7.2 內(nèi)部類 53
2.7.3 內(nèi)部類的特殊語法規(guī)則 54
2.8 文檔注釋 55
2.8.1 注釋插入 55
2.8.2 類注釋 56
2.8.3 方法注釋 56
2.8.4 變量注釋 56
2.8.5 通用注釋 57
2.8.6 鏈接 57
2.8.7 包注釋、模塊注釋和概述注釋 57
2.8.8 注釋提取 58
練習 58
第 3 章 接口和 Lambda 表達式 60
3.1 接口 60
3.1.1 使用接口 60
3.1.2 聲明接口 61
3.1.3 實現(xiàn)接口 61
3.1.4 轉(zhuǎn)換為接口類型 62
3.1.5 強制轉(zhuǎn)換和 instanceof運算符 63
3.1.6 instanceof 的模式匹配形式 63
3.1.7 擴展接口 64
3.1.8 實現(xiàn)多個接口 64
3.1.9 常量 64
3.2 靜態(tài)方法、默認方法和私有方法 64
3.2.1 靜態(tài)方法 65
3.2.2 默認方法 65
3.2.3 解決默認方法沖突 65
3.2.4 私有方法 66
3.3 接口示例 66
3.3.1 Comparable 接口 67
3.3.2 Comparator 接口 68
3.3.3 Runnable 接口 68
3.3.4 用戶界面回調(diào) 68
3.4 Lambda 表達式 69
3.4.1 Lambda 表達式的語法 69
3.4.2 函數(shù)式接口 70
3.5 方法引用和構(gòu)造器引用 71
3.5.1 方法引用 71
3.5.2 構(gòu)造器引用 71
3.6 處理 Lambda 表達式 72
3.6.1 實現(xiàn)延遲執(zhí)行 72
3.6.2 選擇函數(shù)式接口 73
3.6.3 實現(xiàn)自己的函數(shù)式接口 74
3.7 Lambda 表達式作用域和變量作用域 74
3.7.1 Lambda 表達式作用域 75
3.7.2 封閉作用域內(nèi)訪問變量 75
3.8 高階函數(shù) 76
3.8.1 返回函數(shù)的方法 76
3.8.2 修改函數(shù)的方法 77
3.8.3 Comparator 方法 77
3.9 局部類和匿名類 78
3.9.1 局部類 78
3.9.2 匿名類 78
練習 79
第 4 章 繼承與反射 81
4.1 擴展類 81
4.1.1 超類和子類 81
4.1.2 定義和繼承子類方法 82
4.1.3 方法覆蓋 82
4.1.4 子類構(gòu)造 83
4.1.5 超類賦值 83
4.1.6 強制類型轉(zhuǎn)換 84
4.1.7 匿名子類 84
4.1.8 帶 super 的方法表達式 84
4.2 繼承的層次結(jié)構(gòu) 85
4.2.1 final 方法和 final 類 85
4.2.2 抽象方法和抽象類 85
4.2.3 受保護的訪問 86
4.2.4 密封類 86
4.2.5 繼承和默認方法 88
4.3 Object:宇宙級超類 88
4.3.1 toString 方法 89
4.3.2 equals 方法 90
4.3.3 hashCode 方法 91
4.3.4 克隆對象 92
4.4 枚舉 94
4.4.1 枚舉的方法 94
4.4.2 構(gòu)造器、方法和字段 94
4.4.3 實例的主體 95
4.4.4 靜態(tài)成員 95
4.4.5 switch 中的枚舉 96
4.5 運行時類型信息和資源 96
4.5.1 Class 類 96
4.5.2 加載資源 98
4.5.3 類加載器 98
4.5.4 上下文類加載器 99
4.5.5 服務(wù)加載器 100
4.6 反射 101
4.6.1 枚舉類的成員 101
4.6.2 檢查對象 102
4.6.3 調(diào)用方法 102
4.6.4 構(gòu)造對象 103
4.6.5 JavaBeans 103
4.6.6 使用數(shù)組 104
4.6.7 代理 105
練習 106
第 5 章 異常、斷言和日志 108
5.1 異常處理 108
5.1.1 拋出異!108
5.1.2 異常層次結(jié)構(gòu) 109
5.1.3 聲明檢查型異!110
5.1.4 捕獲異!110
5.1.5 帶資源的 try 語句 111
5.1.6 finally 子句 112
5.1.7 重新拋出異常和鏈接異!113
5.1.8 未捕獲的異常和棧跟蹤 114
5.1.9 拋出異常的 API 方法 114
5.2 斷言 115
5.2.1 使用斷言 115
5.2.2 啟用和禁用斷言 115
5.3 日志 116
5.3.1 是否應(yīng)使用 Java 日志框架 116
5.3.2 日志記錄基礎(chǔ) 116
5.3.3 平臺日志 API 117
5.3 4 日志記錄配置 118
5.3.5 日志處理程序 118
5.3.6 過濾器和格式化器 120
練習 121
第 6 章 泛型編程 123
6.1 泛型類 123
6.2 泛型方法 124
6.3 類型限定 124
6.4 類型差異和通配符 125
6.4.1 子類型通配符 125
6.4.2 超類型通配符 126
6.4.3 帶類型變量的通配符 127
6.4.4 無限定通配符 127
6.4.5 通配符捕獲 128
6.5 Java 虛擬機中的泛型 128
6.5.1 類型擦除 128
6.5.2 強制類型轉(zhuǎn)換插入 129
6.5.3 橋接方法 129
6.6 泛型的限制 130
6.6.1 無基本類型參數(shù) 130
6.6.2 運行時所有類型都是原始的 130
6.6.3 無法實例化類型變量 131
6.6.4 不能構(gòu)造參數(shù)化類型的數(shù)組 132
6.6.5 類類型變量在靜態(tài)上下文中無效 132
6.6.6 擦除后方法不能發(fā)生沖突 133
6.6.7 異常和泛型 133
6.7 反射和泛型 134
6.7.1 Class類 134
6.7.2 虛擬機中的泛型類型信息 135
練習 136
第 7 章 容器 138
7.1 容器框架概述 138
7.2 迭代器 140
7.3 集合 141
7.4 映射 142
7.5 其他容器 144
7.5.1 屬性 144
7.5.2 位集 145
7.5.3 枚舉集合和枚舉映射 146
7.5.4 棧、隊列、雙向隊列和優(yōu)先隊列 146
7.5.5 弱哈希映射 147
7.6 視圖 147
7.6.1 小型容器 147
7.6.2 范圍 148
7.6.3 不可修改視圖 148
練習 149
第 8 章 流 151
8.1 從迭代到流操作 151
8.2 流的創(chuàng)建 152
8.3 filter、map 和 flatMap 方法 153
8.4 提取子流和組合流 155
8.5 其他流轉(zhuǎn)換 155
8.6 簡單約簡 156
8.7 Optional 類型 156
8.7.1 生成替代值 156
8.7.2 值存在就消費值 157
8.7.3 流水線化 Optional 值 157
8.7.4 不使用 Optional 值的方式 157
8.7.5 創(chuàng)建 Optional 值 158
8.7.6 用 flatMap 合成 Optional 值函數(shù) 158
8.7.7 將 Optional 轉(zhuǎn)換為流 159
8.8 收集結(jié)果 159
8.9 收集到映射中 160
8.10 分組和分區(qū) 161
8.11 下游收集器 161
8.12 約簡操作 163
8.13 基本類型流 164
8.14 并行流 165
練習 166
第 9 章 輸入和輸出處理 168
9.1 輸入/輸出流、讀取器和寫入器 168
9.1.1 獲取流 168
9.1.2 字節(jié)的讀取 169
9.1.3 字節(jié)的寫入 169
9.1.4 字符編碼 170
9.1.5 文本輸入 171
9.1.6 文本輸出 172
9.1.7 二進制數(shù)據(jù)的讀寫 173
9.1.8 隨機訪問文件 173
9.1.9 內(nèi)存映射文件 173
9.1.10 文件鎖定 174
9.2 路徑、文件和目錄 174
9.2.1 路徑 174
9.2.2 創(chuàng)建文件和目錄 175
9.2.3 復制、移動和刪除文件 176
9.2.4 訪問目錄條目 177
9.2.5 ZIP 文件系統(tǒng) 178
9.3 HTTP 連接 179
9.3.1 URLConnection 類和 HttpURLConnection 類 179
9.3.2 HTTP 客戶端 API 180
9.4 正則表達式 181
9.4.1 正則表達式語法 181
9.4.2 檢測匹配 183
9.4.3 查找所有匹配 184
9.4.4 分組 184
9.4.5 按分隔符拆分 185
9.4.6 替換匹配 185
9.4.7 標志 186
9.5 序列化 186
9.5.1 Serializable 接口 186
9.5.2 瞬態(tài)實例變量 187
9.5.3 readObject 和 writeObject方法 188
9.5.4 readExternal 和 writeExternal 方法 189
9.5.5 readResolve 和 writeReplace 方法 189
9.5.6 版本管理 190
9.5.7 反序列化和安全性 191
練習 192
第 10 章 并發(fā)編程 194
10.1 并發(fā)任務(wù) 194
10.1.1 運行任務(wù) 194
10.1.2 Future 196
10.2 異步計算 197
10.2.1 可完成 Future 197
10.2.2 組合可完成 Future 198
10.2.3 用戶界面回調(diào)中的長時間運行任務(wù) 200
10.3 線程安全 201
10.3.1 可見性 201
10.3.2 競爭條件 202
10.3.3 安全并發(fā)策略 203
10.3.4 不可變類 204
10.4 并行算法 204
10.4.1 并行流 204
10.4.2 并行數(shù)組操作 205
10.5 線程安全數(shù)據(jù)結(jié)構(gòu) 205
10.5.1 并發(fā)哈希映射 206
10.5.2 阻塞隊列 206
10.5.3 其他線程安全數(shù)據(jù)結(jié)構(gòu) 207
10.6 原子計數(shù)器和累加器 208
10.7 鎖和條件 209
10.7.1 鎖 209
10.7.2 synchronized 關(guān)鍵字 210
10.7.3 等待條件 211
10.8 線程 212
10.8.1 啟動線程 212
10.8.2 線程中斷 213
10.8.3 線程局部變量 214
10.8.4 其他線程特性 214
10.9 進程 215
10.9.1 創(chuàng)建進程 215
10.9.2 運行進程 216
10.9.3 進程句柄 217
練習 217
第 11 章 注解 221
11.1 使用注解 221
11.1.1 注解元素 221
11.1.2 多重注解和重復注解 222
11.1.3 注解聲明 222
11.1.4 類型使用注解 223
11.1.5 使接收器顯式 224
11.2 定義注解 224
11.3 標準注解 226
11.3.1 編譯用注解 226
11.3.2 元注解 227
11.4 在運行時處理注解 228
11.5 源碼級注解處理 230
11.5.1 注解處理器 230
11.5.2 語言模型 APl 230
11.5.3 使用注解生成源代碼 231
練習 232
第 12 章 日期和時間 API 234
12.1 時間線 234
12.2 本地日期 235
12.3 日期調(diào)整器 237
12.4 本地時間 238
12.5 時區(qū)時間 238
12.6 格式化和解析 240
12.7 與遺留代碼互操作 242
練習 243
第 13 章 國際化 244
13.1 區(qū)域設(shè)置 244
13.1.1 指定區(qū)域設(shè)置 245
13.1.2 默認區(qū)域設(shè)置 246
13.1.3 顯示名稱 247
13.2 數(shù)值格式 247
13.3 貨幣 248
13.4 日期和時間格式化 248
13.5 排序和規(guī)范化 249
13.6 消息格式化 250
13.7 資源包 251
13.7.1 組織資源包 252
13.7.2 包類 253
13.8 字符編碼 253
13.9 首選項 254
練習 255
第 14 章 編譯和腳本 256
14.1 編譯器 API 256
14.1.1 調(diào)用編譯器 256
14.1.2 啟動編譯任務(wù) 256
14.1.3 捕獲診斷信息 257
14.1.4 從內(nèi)存讀取源文件 257
14.1.5 將字節(jié)碼寫入內(nèi)存 257
14.2 腳本 API 258
14.2.1 獲取腳本引擎 258
14.2.2 腳本求值 259
14.2.3 綁定 259
14.2.4 重定向輸入和輸出 259
14.2.5 調(diào)用腳本函數(shù)和方法 260
14.2.6 編譯腳本 260
練習 261
第 15 章 Java 平臺模塊系統(tǒng) 262
15.1 模塊的概念 262
15.2 給模塊命名 263
15.3 模塊化Hello,World!程序 264
15.4 對模塊的需求 265
15.5 導出包 266
15.6 模塊和反射式訪問 267
15.7 模塊化 JAR 269
15.8 自動模塊 270
15.9 不具名模塊 271
15.10 用于遷移的命令行標志 271
15.11 傳遞性需求和靜態(tài)需求 272
15.12 限定導出和開放 273
15.13 服務(wù)加載 273
15.14 操作模塊的工具 274
練習 276