《Java 8編程參考官方教程(第9版)》是2015年1月清華大學出版社出版的圖書,作者是(美)Herbert Schildt,譯者是戰曉蘇、江凌。
基本介紹
內容簡介,圖書目錄,
內容簡介
本書針對Java SE 8做了全面更新,介紹了如何開發、編譯、調試和運行Java程式。暢銷書作者Herbert Schildt撰寫過眾多經典的計算機編程圖書。在本書中,他詳盡地講解了Java語言,包括Java的語法、關鍵字和基本編程原則,以及Java API庫的主要內容。另外,本書還介紹了Java Bean、servlet、applet和Swing,並通過真實案例展示了Java語言的套用。本書對Java SE 8的新特性也進行了深入講解,包括lambda表達式、流庫和默認接口方法,書末介紹的JavaFX知識為深入學習打下了堅實基礎。
圖書目錄
第Ⅰ部分Java語言
第1章Java的歷史和演變 3
1.1Java的家世 4
1.1.1現代程式語言的誕生:C語言 4
1.1.2C++:下一個階段 5
1.1.3Java出現的時機已經成熟 6
1.2Java的誕生 6
1.3Java改變Internet的方式 8
1.3.1Javaapplet 8
1.3.2安全性 8
1.3.3可移植性 8
1.4Java的魔力:位元組碼 9
1.5servlet:伺服器端的Java 10
1.6Java的關鍵特性 10
1.6.1簡單性 10
1.6.2面向對象 11
1.6.3健壯性 11
1.6.4多執行緒 11
1.6.5體系結構中立 11
1.6.6解釋執行和高性能 12
1.6.7分散式 12
1.6.8動態性 12
1.7Java的演變歷程 12
1.8JavaSE8 14
1.9文化革新 15
第2章Java綜述 17
2.1面向對象編程 17
2.1.1兩種範式 18
2.1.2抽象 18
2.1.3OOP三原則 19
2.2第一個簡單程式 23
2.2.1輸入程式 23
2.2.2編譯程式 23
2.2.3深入分析第一個示例程式 24
2.3第二個簡短程式 26
2.4兩種控制語句 27
2.4.1if語句 27
2.4.2for循環 29
2.5使用代碼塊 30
2.6辭彙問題 31
2.6.1空白符 32
2.6.2標識符 32
2.6.3字面值 32
2.6.4注釋 32
2.6.5分隔設定 32
2.6.6Java關鍵字 33
2.7Java類庫 34
第3章數據類型、變數和數組 35
3.1Java是強類型化的語言 35
3.2基本類型 36
3.3整型 36
3.3.1byte 37
3.3.2short 37
3.3.3int 37
3.3.4long 37
3.4浮點型 38
3.4.1float 38
3.4.2double 39
3.5字元型 39
3.6布爾型 41
3.7深入分析字面值 42
3.7.1整型字面值 42
3.7.2浮點型字面值 43
3.7.3布爾型字面值 43
3.7.4字元型字面值 43
3.7.5字元串字面值 44
3.8變數 45
3.8.1變數的聲明 45
3.8.2動態初始化 45
3.8.3變數的作用域和生存期 46
3.9類型轉換和強制類型轉換 48
3.9.1Java的自動類型轉換 48
3.9.2強制轉換不兼容的類型 48
3.10表達式中的自動類型提升 50
3.11數組 51
3.11.1一維數組 51
3.11.2多維數組 54
3.11.3另一種數組聲明語法 58
3.12關於字元串的一些說明 58
3.13向C/C++程式設計師提供指針方面的說明 59
第4章運算符 61
4.1算術運算符 61
4.1.1基本算術運算符 62
4.1.2求模運算符 63
4.1.3算術與賦值複合運算符 64
4.1.4自增與自減運算符 65
4.2位運算符 66
4.2.1位邏輯運算符 67
4.2.2左移 70
4.2.3右移 71
4.2.4無符號右移 72
4.2.5位運算符與賦值的組合 74
4.3關係運算符 74
4.4布爾邏輯運算符 75
4.5賦值運算符 77
4.6“?”運算符 78
4.7運算符的優先權 79
4.8使用圓括弧 80
第5章控制語句 81
5.1Java的選擇語句 81
5.1.1if語句 82
5.1.2switch語句 84
5.2疊代語句 89
5.2.1while語句 89
5.2.2do-while語句 91
5.2.3for語句 93
5.2.4for循環的for-each版本 97
5.2.5嵌套的循環 102
5.3跳轉語句 103
5.3.1使用break語句 103
5.3.2使用continue語句 107
5.3.3return語句 108
第6章類 111
6.1類的基礎知識 112
6.1.1類的一般形式 112
6.1.2一個簡單的類 113
6.2聲明對象 115
6.3為對象引用變數賦值 117
6.4方法 118
6.4.1為Box類添加方法 118
6.4.2返回值 120
6.4.3添加帶參數的方法 121
6.5構造函式 123
6.6this關鍵字 126
6.7垃圾回收 127
6.8finalize()方法 128
6.9堆疊類 128
第7章方法和類的深入分析 131
7.1重載方法 131
7.2將對象用作參數 136
7.3參數傳遞的深入分析 139
7.4返回對象 141
7.5遞歸 142
7.6訪問控制 144
7.7理解static 147
7.8final介紹 149
7.9重新審視數組 149
7.10嵌套類和內部類 151
7.11String類介紹 154
7.12使用命令行參數 156
7.13varargs:可變長度參數 157
7.13.1重載varargs方法 160
7.13.2varargs方法與模糊性 161
第8章繼承 165
8.1繼承的基礎知識 165
8.1.1成員訪問與繼承 167
8.1.2一個更實際的例子 168
8.1.3超類變數可以引用子類對象 170
8.2使用super關鍵字 171
8.2.1使用super調用超類的構造函式 171
8.2.2super的另一種用法 175
8.3創建多級繼承層次 176
8.4構造函式的調用時機 179
8.5方法重寫 180
8.6動態方法調度 183
8.6.1重寫方法的目的 184
8.6.2套用方法重寫 185
8.7使用抽象類 186
8.8在繼承中使用final關鍵字 189
8.8.1使用final關鍵字阻止重寫 189
8.8.2使用final關鍵字阻止繼承 190
8.9Object類 190
第9章包和接口 193
9.1包 194
9.1.1定義包 194
9.1.2包查找與CLASSPATH 195
9.1.3一個簡短的包示例 195
9.2訪問保護 196
9.3導入包 200
9.4接口 202
9.4.1定義接口 202
9.4.2實現接口 203
9.4.3嵌套接口 206
9.4.4套用接口 207
9.4.5接口中的變數 210
9.4.6接口可以擴展 212
9.5默認接口方法 213
9.5.1默認方法的基礎知識 214
9.5.2一個更加實用的例子 215
9.5.3多級繼承的問題 216
9.6在接口中使用靜態方法 217
9.7關於包和接口的最後說明 218
第10章異常處理 219
10.1異常處理的基礎知識 219
10.2異常類型 220
10.3未捕獲的異常 221
10.4使用try和catch 222
10.5多條catch子句 224
10.6嵌套的try語句 225
10.7throw 228
10.8throws 229
10.9finally 230
10.10Java的內置異常 232
10.11創建自己的異常子類 233
10.12鏈式異常 235
10.133個近期添加的異常特性 237
10.14使用異常 238
第11章多執行緒編程 239
11.1Java執行緒模型 240
11.1.1執行緒優先權 241
11.1.2同步 241
11.1.3訊息傳遞 242
11.1.4Thread類和Runnable接口 242
11.2主執行緒 243
11.3創建執行緒 244
11.3.1實現Runnable接口 245
11.3.2擴展Thread類 247
11.3.3選擇一種創建方式 248
11.4創建多個執行緒 248
11.5使用isAlive()和join()方法 249
11.6執行緒優先權 252
11.7同步 253
11.7.1使用同步方法 253
11.7.2synchronized語句 255
11.8執行緒間通信 257
11.9掛起、恢復與停止執行緒 263
11.10獲取執行緒的狀態 266
11.11使用多執行緒 267
第12章枚舉、自動裝箱與註解(元數據) 269
12.1枚舉 269
12.1.1枚舉的基礎知識 270
12.1.2values()和valueOf()方法 272
12.1.3Java枚舉是類類型 273
12.1.4枚舉繼承自Enum類 275
12.1.5另一個枚舉示例 277
12.2類型封裝器 279
12.2.1Character封裝器 279
12.2.2Boolean封裝器 279
12.2.3數值類型封裝器 280
12.3自動裝箱 281
12.3.1自動裝箱與方法 281
12.3.2表達式中發生的自動裝箱/拆箱 282
12.3.3布爾型和字元型數值的自動裝箱/拆箱 284
12.3.4自動裝箱/拆箱有助於防止錯誤 285
12.3.5一些警告 285
12.4註解(元數據) 286
12.4.1註解的基礎知識 286
12.4.2指定保留策略 287
12.4.3在運行時使用反射獲取註解 288
12.4.4AnnotatedElement接口 293
12.4.5使用默認值 293
第1章Java的歷史和演變 3
1.1Java的家世 4
1.1.1現代程式語言的誕生:C語言 4
1.1.2C++:下一個階段 5
1.1.3Java出現的時機已經成熟 6
1.2Java的誕生 6
1.3Java改變Internet的方式 8
1.3.1Javaapplet 8
1.3.2安全性 8
1.3.3可移植性 8
1.4Java的魔力:位元組碼 9
1.5servlet:伺服器端的Java 10
1.6Java的關鍵特性 10
1.6.1簡單性 10
1.6.2面向對象 11
1.6.3健壯性 11
1.6.4多執行緒 11
1.6.5體系結構中立 11
1.6.6解釋執行和高性能 12
1.6.7分散式 12
1.6.8動態性 12
1.7Java的演變歷程 12
1.8JavaSE8 14
1.9文化革新 15
第2章Java綜述 17
2.1面向對象編程 17
2.1.1兩種範式 18
2.1.2抽象 18
2.1.3OOP三原則 19
2.2第一個簡單程式 23
2.2.1輸入程式 23
2.2.2編譯程式 23
2.2.3深入分析第一個示例程式 24
2.3第二個簡短程式 26
2.4兩種控制語句 27
2.4.1if語句 27
2.4.2for循環 29
2.5使用代碼塊 30
2.6辭彙問題 31
2.6.1空白符 32
2.6.2標識符 32
2.6.3字面值 32
2.6.4注釋 32
2.6.5分隔設定 32
2.6.6Java關鍵字 33
2.7Java類庫 34
第3章數據類型、變數和數組 35
3.1Java是強類型化的語言 35
3.2基本類型 36
3.3整型 36
3.3.1byte 37
3.3.2short 37
3.3.3int 37
3.3.4long 37
3.4浮點型 38
3.4.1float 38
3.4.2double 39
3.5字元型 39
3.6布爾型 41
3.7深入分析字面值 42
3.7.1整型字面值 42
3.7.2浮點型字面值 43
3.7.3布爾型字面值 43
3.7.4字元型字面值 43
3.7.5字元串字面值 44
3.8變數 45
3.8.1變數的聲明 45
3.8.2動態初始化 45
3.8.3變數的作用域和生存期 46
3.9類型轉換和強制類型轉換 48
3.9.1Java的自動類型轉換 48
3.9.2強制轉換不兼容的類型 48
3.10表達式中的自動類型提升 50
3.11數組 51
3.11.1一維數組 51
3.11.2多維數組 54
3.11.3另一種數組聲明語法 58
3.12關於字元串的一些說明 58
3.13向C/C++程式設計師提供指針方面的說明 59
第4章運算符 61
4.1算術運算符 61
4.1.1基本算術運算符 62
4.1.2求模運算符 63
4.1.3算術與賦值複合運算符 64
4.1.4自增與自減運算符 65
4.2位運算符 66
4.2.1位邏輯運算符 67
4.2.2左移 70
4.2.3右移 71
4.2.4無符號右移 72
4.2.5位運算符與賦值的組合 74
4.3關係運算符 74
4.4布爾邏輯運算符 75
4.5賦值運算符 77
4.6“?”運算符 78
4.7運算符的優先權 79
4.8使用圓括弧 80
第5章控制語句 81
5.1Java的選擇語句 81
5.1.1if語句 82
5.1.2switch語句 84
5.2疊代語句 89
5.2.1while語句 89
5.2.2do-while語句 91
5.2.3for語句 93
5.2.4for循環的for-each版本 97
5.2.5嵌套的循環 102
5.3跳轉語句 103
5.3.1使用break語句 103
5.3.2使用continue語句 107
5.3.3return語句 108
第6章類 111
6.1類的基礎知識 112
6.1.1類的一般形式 112
6.1.2一個簡單的類 113
6.2聲明對象 115
6.3為對象引用變數賦值 117
6.4方法 118
6.4.1為Box類添加方法 118
6.4.2返回值 120
6.4.3添加帶參數的方法 121
6.5構造函式 123
6.6this關鍵字 126
6.7垃圾回收 127
6.8finalize()方法 128
6.9堆疊類 128
第7章方法和類的深入分析 131
7.1重載方法 131
7.2將對象用作參數 136
7.3參數傳遞的深入分析 139
7.4返回對象 141
7.5遞歸 142
7.6訪問控制 144
7.7理解static 147
7.8final介紹 149
7.9重新審視數組 149
7.10嵌套類和內部類 151
7.11String類介紹 154
7.12使用命令行參數 156
7.13varargs:可變長度參數 157
7.13.1重載varargs方法 160
7.13.2varargs方法與模糊性 161
第8章繼承 165
8.1繼承的基礎知識 165
8.1.1成員訪問與繼承 167
8.1.2一個更實際的例子 168
8.1.3超類變數可以引用子類對象 170
8.2使用super關鍵字 171
8.2.1使用super調用超類的構造函式 171
8.2.2super的另一種用法 175
8.3創建多級繼承層次 176
8.4構造函式的調用時機 179
8.5方法重寫 180
8.6動態方法調度 183
8.6.1重寫方法的目的 184
8.6.2套用方法重寫 185
8.7使用抽象類 186
8.8在繼承中使用final關鍵字 189
8.8.1使用final關鍵字阻止重寫 189
8.8.2使用final關鍵字阻止繼承 190
8.9Object類 190
第9章包和接口 193
9.1包 194
9.1.1定義包 194
9.1.2包查找與CLASSPATH 195
9.1.3一個簡短的包示例 195
9.2訪問保護 196
9.3導入包 200
9.4接口 202
9.4.1定義接口 202
9.4.2實現接口 203
9.4.3嵌套接口 206
9.4.4套用接口 207
9.4.5接口中的變數 210
9.4.6接口可以擴展 212
9.5默認接口方法 213
9.5.1默認方法的基礎知識 214
9.5.2一個更加實用的例子 215
9.5.3多級繼承的問題 216
9.6在接口中使用靜態方法 217
9.7關於包和接口的最後說明 218
第10章異常處理 219
10.1異常處理的基礎知識 219
10.2異常類型 220
10.3未捕獲的異常 221
10.4使用try和catch 222
10.5多條catch子句 224
10.6嵌套的try語句 225
10.7throw 228
10.8throws 229
10.9finally 230
10.10Java的內置異常 232
10.11創建自己的異常子類 233
10.12鏈式異常 235
10.133個近期添加的異常特性 237
10.14使用異常 238
第11章多執行緒編程 239
11.1Java執行緒模型 240
11.1.1執行緒優先權 241
11.1.2同步 241
11.1.3訊息傳遞 242
11.1.4Thread類和Runnable接口 242
11.2主執行緒 243
11.3創建執行緒 244
11.3.1實現Runnable接口 245
11.3.2擴展Thread類 247
11.3.3選擇一種創建方式 248
11.4創建多個執行緒 248
11.5使用isAlive()和join()方法 249
11.6執行緒優先權 252
11.7同步 253
11.7.1使用同步方法 253
11.7.2synchronized語句 255
11.8執行緒間通信 257
11.9掛起、恢復與停止執行緒 263
11.10獲取執行緒的狀態 266
11.11使用多執行緒 267
第12章枚舉、自動裝箱與註解(元數據) 269
12.1枚舉 269
12.1.1枚舉的基礎知識 270
12.1.2values()和valueOf()方法 272
12.1.3Java枚舉是類類型 273
12.1.4枚舉繼承自Enum類 275
12.1.5另一個枚舉示例 277
12.2類型封裝器 279
12.2.1Character封裝器 279
12.2.2Boolean封裝器 279
12.2.3數值類型封裝器 280
12.3自動裝箱 281
12.3.1自動裝箱與方法 281
12.3.2表達式中發生的自動裝箱/拆箱 282
12.3.3布爾型和字元型數值的自動裝箱/拆箱 284
12.3.4自動裝箱/拆箱有助於防止錯誤 285
12.3.5一些警告 285
12.4註解(元數據) 286
12.4.1註解的基礎知識 286
12.4.2指定保留策略 287
12.4.3在運行時使用反射獲取註解 288
12.4.4AnnotatedElement接口 293
12.4.5使用默認值 293
12.4.6標記註解 295
12.4.7單成員註解 296
12.4.8內置註解 297
12.5類型註解 299
12.6重複註解 303
第13章I/O、applet以及其他主題 307
13.1I/O的基礎知識 308
13.1.1流 308
13.1.2位元組流和字元流 308
13.1.3預定義流 310
13.2讀取控制台輸入 311
13.2.1讀取字元 311
13.2.2讀取字元串 312
13.3向控制台寫輸出 314
13.4PrintWriter類 314
13.5讀/寫檔案 315
13.6自動關閉檔案 321
13.7applet的基礎知識 325
13.8transient和volatile修飾符 327
13.9使用instanceof運算符 328
13.10strictfp 330
13.11本地方法 331
13.12使用assert 334
13.13靜態導入 337
13.14通過this()調用重載的構造函式 339
13.15緊湊API配置檔案 342
第14章泛型 343
14.1什麼是泛型 344
14.2一個簡單的泛型示例 344
14.2.1泛型只使用引用類型 348
14.2.2基於不同類型參數的泛型類型是不同的 348
14.2.3泛型提升類型安全性的原理 348
14.3帶兩個類型參數的泛型類 350
14.4泛型類的一般形式 352
14.5有界類型 352
14.6使用通配符參數 355
14.7創建泛型方法 363
14.8泛型接口 366
14.9原始類型與遺留代碼 368
14.10泛型類層次 370
14.10.1使用泛型超類 370
14.10.2泛型子類 372
14.10.3泛型層次中的運行時類型比較 374
14.10.4強制轉換 376
14.10.5重寫泛型類的方法 376
14.11泛型的類型推斷 378
14.12擦除 379
14.13模糊性錯誤 381
14.14使用泛型的一些限制 382
14.14.1不能實例化類型參數 382
14.14.2對靜態成員的一些限制 383
14.14.3對泛型數組的一些限制 383
14.14.4對泛型異常的限制 384
第15章lambda表達式 385
15.1lambda表達式簡介 386
15.1.1lambda表達式的基礎知識 386
15.1.2函式式接口 387
15.1.3幾個lambda表達式示例 388
15.2塊lambda表達式 391
15.3泛型函式式接口 393
15.4作為參數傳遞lambda表達式 395
15.5lambda表達式與異常 398
15.6lambda表達式和變數捕獲 399
15.7方法引用 400
15.7.1靜態方法的方法引用 400
15.7.2實例方法的方法引用 401
15.7.3泛型中的方法引用 405
15.8構造函式引用 408
15.9預定義的函式式接口 412
第Ⅱ部分Java庫
第16章字元串處理 417
16.1String類的構造函式 418
16.2字元串的長度 420
16.3特殊的字元串操作 420
16.3.1字元串字面值 421
16.3.2字元串連線 421
16.3.3字元串和其他數據類型的連線 421
16.3.4字元串轉換和toString()方法 422
16.4提取字元 423
16.4.1charAt() 424
16.4.2getChars() 424
16.4.3getBytes() 424
16.4.4toCharArray() 425
16.5比較字元串 425
16.5.1equals()和equalsIgnoreCase() 425
16.5.2regionMatches() 426
16.5.3startsWith()和endsWith() 426
16.5.4equals()與== 427
16.5.5compareTo() 427
16.6查找字元串 429
16.7修改字元串 430
16.7.1substring() 430
16.7.2concat() 431
16.7.3replace() 432
16.7.4trim() 432
16.8使用valueOf()轉換數據 433
16.9改變字元串中字元的大小寫 434
16.10連線字元串 434
16.11其他String方法 435
16.12StringBuffer類 436
16.12.1StringBuffer類的構造函式 437
16.12.2length()與capacity() 437
16.12.3ensureCapacity() 438
16.12.4setLength() 438
16.12.5charAt()與setCharAt() 438
16.12.6getChars() 439
16.12.7append() 439
16.12.8insert() 440
16.12.9reverse() 440
16.12.10delete()與deleteCharAt() 441
16.12.11replace() 441
16.12.12substring() 442
16.12.13其他StringBuffer方法 442
16.13StringBuilder類 443
第17章探究java.lang 445
17.1基本類型封裝器 446
17.1.1Number 446
17.1.2Double與Float 447
17.1.3理解isInfinite()與isNaN() 450
17.1.4Byte、Short、Integer和Long 451
17.1.5Character 459
17.1.6對Unicode代碼點的附加支持 462
17.1.7Boolean 463
17.2Void類 464
17.3Process類 464
17.4Runtime類 465
17.4.1記憶體管理 466
17.4.2執行其他程式 467
17.5ProcessBuilder類 469
17.6System類 471
17.6.1使用currentTimeMillis()計時程式的執行 472
17.6.2使用arraycopy() 473
17.6.3環境屬性 474
17.7Object類 474
17.8使用clone()方法和Cloneable接口 475
17.9Class類 477
17.10ClassLoader類 480
17.11Math類 481
17.11.1三角函式 481
17.11.2指數函式 481
17.11.3捨入函式 482
17.11.4其他數學方法 483
17.12StrictMath類 485
17.13Compiler類 485
17.14Thread類、ThreadGroup類和Runnable接口 485
17.14.1Runnable接口 485
17.14.2Thread類 486
17.14.3ThreadGroup類 488
17.15ThreadLocal和
InheritableThreadLocal類 492
17.16Package類 492
17.17RuntimePermission類 494
17.18Throwable類 494
17.19SecurityManager類 494
17.20StackTraceElement類 494
17.21Enum類 495
17.22ClassValue類 496
17.23CharSequence接口 496
17.24Comparable接口 496
17.25Appendable接口 497
17.26Iterable接口 497
17.27Readable接口 498
17.28AutoCloseable接口 498
17.29Thread.UncaughtExceptionHandler接口 498
17.30java.lang子包 499
17.30.1java.lang.annotation 499
17.30.2java.lang.instrument 499
17.30.3java.lang.invoke 499
17.30.4java.lang.management 499
17.30.5java.lang.ref 499
17.30.6java.lang.reflect 499
第18章java.util第1部分:集合框架 501
18.1集合概述 503
18.2JDK5對集合框架的修改 504
18.2.1泛型從根本上改變了集合框架 504
18.2.2自動裝箱使得使用基本類型更加容易 504
18.2.3for-each風格的for循環 505
18.3集合接口 505
18.3.1Collection接口 506
18.3.2List接口 508
18.3.3Set接口 509
18.3.4SortedSet接口 509
18.3.5NavigableSet接口 510
18.3.6Queue接口 511
18.3.7Deque接口 512
18.4集合類 514
18.4.1ArrayList類 515
18.4.2LinkedList類 518
18.4.3HashSet類 520
18.4.4LinkedHashSet類 521
18.4.5TreeSet類 521
18.4.6PriorityQueue類 523
18.4.7ArrayDeque類 523
18.4.8EnumSet類 524
18.5通過疊代器訪問集合 525
18.5.1使用疊代器 527
18.5.2使用for-each循環替代疊代器 528
18.6Spliterator 529
18.7在集合中存儲用戶定義的類 532
18.8RandomAccess接口 533
18.9使用映射 534
18.9.1映射接口 534
18.9.2映射類 539
18.10比較器 544
18.11集合算法 552
18.12Arrays類 558
18.13遺留的類和接口 563
18.13.1Enumeration接口 564
18.13.2Vector類 564
18.13.3Stack類 568
18.13.4Dictionary類 570
18.13.5Hashtable類 571
18.13.6Properties類 574
18.13.7使用store()和load() 578
18.14集合小結 580
第19章java.util第2部分:更多實用工具類 581
19.1StringTokenizer類 581
19.2BitSet類 583
19.3Optional、OptionalDouble、OptionalInt和OptionalLong 586
19.4Date類 588
19.5Calendar類 590
19.6GregorianCalendar類 593
19.7TimeZone類 595
19.8SimpleTimeZone類 596
19.9Locale類 597
19.10Random類 598
19.11Observable類 600
19.11.1Observer接口 601
19.11.2Observer示例 601
19.12Timer和TimerTask類 604
19.13Currency類 606
19.14Formatter類 607
19.14.1Formatter類的構造函式 607
19.14.2Formatter類的方法 608
19.14.3格式化的基礎知識 609
19.14.4格式化字元串和字元 611
19.14.5格式化數字 611
19.14.6格式化時間和日期 612
19.14.7%n和%%說明符 614
19.14.8指定最小欄位寬度 614
19.14.9指定精度 616
19.14.10使用格式標誌 617
19.14.11對齊輸出 617
19.14.12空格、“+”、“0”以及“(”標誌 618
19.14.13逗號標誌 619
19.14.14“#”標誌 619
19.14.15大寫選項 619
19.14.16使用參數索引 620
19.14.17關閉Formatter對象 621
19.14.18printf()方法 622
19.15Scanner類 622
19.15.1Scanner類的構造函式 622
19.15.2掃描的基礎知識 623
19.15.3一些Scanner示例 626
19.15.4設定定界符 630
19.15.5其他Scanner特性 632
19.16ResourceBundle、ListResourceBundle和 633
19.17其他實用工具類和接口 637
19.18java.util子包 638
19.18.1java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks 638
19.18.2java.util.function 638
19.18.3java.util.jar 641
19.18.4java.util.logging 641
19.18.5java.util.prefs 641
19.18.6java.util.regex 641
19.18.7java.util.spi 642
19.18.8java.util.stream 642
19.18.9java.util.zip 642
第20章輸入/輸出:探究java.io 643
20.1I/O類和接口 644
20.2File類 645
20.2.1目錄 648
20.2.2使用FilenameFilter接口 649
20.2.3listFiles()方法 650
20.2.4創建目錄 650
20.3AutoCloseable、Closeable和Flushable接口 650
20.4I/O異常 651
20.5關閉流的兩種方式 651
20.6流類 653
20.7位元組流 653
20.7.1InputStream類 653
20.7.2OutputStream類 654
20.7.3FileInputStream類 654
20.7.4FileOutputStream類 656
20.7.5ByteArrayInputStream類 659
20.7.6ByteArrayOutputStream類 660
20.7.7過濾的位元組流 662
20.7.8緩衝的位元組流 662
20.7.9SequenceInputStream類 666
20.7.10PrintStream類 667
20.7.11DataOutputStream和DataInputStream類 670
20.7.12RandomAccessFile類 671
20.8字元流 672
20.8.1Reader類 672
20.8.2Writer類 673
20.8.3FileReader類 674
20.8.4FileWriter類 675
20.8.5CharArrayReader類 676
20.8.6CharArrayWriter類 677
20.8.7BufferedReader類 678
20.8.8BufferedWriter類 680
20.8.9PushbackReader類 680
20.8.10PrintWriter類 681
20.9Console類 682
20.10串列化 684
20.10.1Serializable接口 684
20.10.2Externalizable接口 685
20.10.3ObjectOutput接口 685
20.10.4ObjectOutputStream類 685
20.10.5ObjectInput接口 686
20.10.6ObjectInputStream類 687
20.10.7串列化示例 688
20.11流的優點 690
第21章探究NIO 691
21.1NIO類 691
21.2NIO的基礎知識 692
21.2.1緩衝區 692
21.2.2通道 694
21.2.3字元集和選擇器 695
21.3JDK7對NIO的增強 696
21.3.1Path接口 696
21.3.2Files類 697
21.3.3Path接口 700
21.3.4檔案屬性接口 700
21.3.5FileSystem、FileSystems和FileStore類 702
21.4使用NIO系統 702
21.4.1為基於通道的I/O使用NIO 703
21.4.2為基於流的I/O使用NIO 712
21.4.3為路徑和檔案系統操作使用NIO 714
21.5JDK7之前基於通道的例子 722
21.5.1讀檔案(JDK7之前) 722
21.5.2寫檔案(JDK7之前) 726
第22章聯網 729
22.1聯網的基礎知識 730
22.2聯網類和接口 731
22.3InetAddress類 732
22.3.1工廠方法 732
22.3.2實例方法 733
22.4Inet4Address類和Inet6Address類 733
22.5TCP/IP客戶端套接字 734
22.6URL類 737
22.7URLConnection類 739
22.8HttpURLConnection類 741
22.9URI類 744
22.10cookie 744
22.11TCP/IP伺服器套接字 744
22.12數據報 745
22.12.1DatagramSocket類 745
22.12.2DatagramPacket類 746
22.12.3數據報示例 747
第23章Applet類 749
23.1applet的兩種類型 749
23.2applet的基礎知識 750
23.3applet的架構 753
23.4applet的骨架 753
23.4.1applet的初始化和終止 755
23.4.2重寫update()方法 756
23.5簡單的applet顯示方法 756
23.6請求重畫 758
23.7使用狀態欄視窗 761
23.8HTMLAPPLET標記 762
23.9向applet傳遞參數 763
23.10getDocumentBase()和getCodeBase() 766
23.11AppletContext接口和showDocument()方法 767
23.12AudioClip接口 769
23.13AppletStub接口 769
23.14向控制台輸出 769
第24章事件處理 771
24.1兩種事件處理機制 772
24.2委託事件模型 772
24.2.1事件 772
24.2.2事件源 772
24.2.3事件監聽器 773
24.3事件類 773
24.3.1ActionEvent類 775
24.3.2AdjustmentEvent類 775
24.3.3ComponentEvent類 776
24.3.4ContainerEvent類 777
24.3.5FocusEvent類 777
24.3.6InputEvent類 778
24.3.7ItemEvent類 779
24.3.8KeyEvent類 779
24.3.9MouseEvent類 780
24.3.10MouseWheelEvent類 782
24.3.11TextEvent類 783
24.3.12WindowEvent類 783
24.4事件源 784
24.5事件監聽器接口 784
24.5.1ActionListener接口 785
24.5.2AdjustmentListener接口 785
24.5.3ComponentListener接口 785
24.5.4ContainerListener接口 786
24.5.5FocusListener接口 786
24.5.6ItemListener接口 786
24.5.7KeyListener接口 786
24.5.8MouseListener接口 786
24.5.9MouseMotionListener接口 787
24.5.10MouseWheelListener接口 787
24.5.11TextListener接口 787
24.5.12WindowFocusListener接口 787
24.5.13WindowListener接口 787
24.6使用委託事件模型 788
24.6.1處理滑鼠事件 788
24.6.2處理鍵盤事件 791
24.7適配器類 794
24.8內部類 795
第25章AWT介紹:使用視窗、圖形和文本 799
25.1AWT類 800
25.2視窗基本元素 802
25.2.1Component類 803
25.2.2Container類 803
25.2.3Panel類 803
25.2.4Window類 803
25.2.5Frame類 803
25.2.6Canvas類 803
25.3使用框架視窗 804
25.3.1設定視窗的尺寸 804
25.3.2隱藏和顯示視窗 804
25.3.3設定視窗的標題 804
25.3.4關閉框架視窗 805
25.4在基於AWT的applet中創建框架視窗 805
25.5創建基於視窗的程式 811
25.6在視窗中顯示信息 813
25.7使用圖形 814
25.7.1繪製直線 814
25.7.2繪製矩形 814
25.7.3繪製橢圓和圓 815
25.7.4繪製弧形 815
25.7.5繪製多邊形 815
25.7.6演示繪製方法 815
25.7.7改變圖形的大小 817
25.8使用顏色 818
25.8.1Color類的方法 819
25.8.2設定當前圖形的顏色 820
25.8.3一個演示顏色的applet 820
25.9設定繪圖模式 821
25.10使用字型 823
25.10.1確定可用字型 824
25.10.2創建和選擇字型 825
25.10.3獲取字型信息 827
25.11使用FontMetrics管理文本輸出 828
25.11.1顯示多行文本 829
25.11.2居中顯示文本 831
25.11.3對齊多行文本 832
第26章使用AWT控制項、布局管理器和選單 837
26.1AWT控制項的基礎知識 838
26.1.1添加和移除控制項 838
26.1.2回響控制項 839
26.1.3HeadlessException異常 839
26.2使用標籤 839
26.3使用命令按鈕 840
26.4使用複選框 844
26.5使用複選框組 846
26.6使用下拉列表 847
26.7使用列表框 849
26.8管理滾動條 852
26.9使用TextField 855
26.10使用TextArea 857
26.11理解布局管理器 859
26.11.1FlowLayout布局管理器 859
26.11.2BorderLayout布局管理器 861
26.11.3使用Insets 863
26.11.4GridLayout布局管理器 864
26.11.5CardLayout布局管理器 866
26.11.6GridBagLayout布局管理器 869
26.12選單欄和選單 874
26.13對話框 879
26.14FileDialog類 885
26.15關於重寫paint()方法 886
第27章圖像 889
27.1檔案格式 890
27.2圖像基礎:創建、載入與顯示 890
27.2.1創建Image對象 890
27.2.2載入圖像 891
27.2.3顯示圖像 891
27.3ImageObserver接口 893
27.4雙緩衝 894
27.5MediaTracker類 896
27.6ImageProducer接口 899
27.7ImageConsumer接口 901
27.8ImageFilter類 904
27.8.1CropImageFilter類 904
27.8.2RGBImageFilter類 906
27.9其他圖像類 917
第28章並發實用工具 919
28.1並發API包 920
28.1.1java.util.concurrent包 920
28.1.2java.util.concurrent.atomic包 921
28.1.3java.util.concurrent.locks包 921
28.2使用同步對象 921
28.2.1Semaphore類 922
28.2.2CountDownLatch類 927
28.2.3CyclicBarrier類 929
28.2.4Exchanger類 932
28.2.5Phaser類 934
28.3使用執行器 941
28.3.1一個簡單的執行器示例 942
28.3.2使用Callable和Future接口 944
28.4TimeUnit枚舉 947
28.5並發集合 948
28.6鎖 949
28.7原子操作 951
28.8通過Fork/Join框架進行並行編程 953
28.8.1主要的Fork/Join類 953
28.8.2分而治之的策略 956
28.8.3一個簡單的Fork/Join示例 957
28.8.4理解並行級別帶來的影響 960
28.8.5一個使用RecursiveTask<V>的例子 963
28.8.6異步執行任務 965
28.8.7取消任務 966
28.8.8確定任務的完成狀態 966
28.8.9重新啟動任務 966
28.8.10深入研究 967
28.8.11關於Fork/Join框架的一些提示 968
28.9並發實用工具與Java傳統方式的比較 968
第29章流API 971
29.1流的基礎知識 972
29.1.1流接口 972
29.1.2如何獲得流 974
29.1.3一個簡單的流示例 975
29.2縮減操作 978
29.3使用並行流 980
29.4映射 983
29.5收集 987
29.6疊代器和流 991
29.6.1對流使用疊代器 991
29.6.2使用Spliterator 992
29.7流API中更多值得探究的地方 995
第30章正則表達式和其他包 997
30.1核心JavaAPI包 998
30.2正則表達式處理 1000
30.2.1Pattern類 1000
30.2.2Matcher類 1000
30.2.3正則表達式的語法 1001
30.2.4演示模式匹配 1002
30.2.5模式匹配的兩個選項 1007
30.2.6探究正則表達式 1008
30.3反射 1008
30.4遠程方法調用 1012
30.5使用java.text格式化日期和時間 1015
30.5.1DateFormat類 1015
30.5.2SimpleDateFormat類 1017
30.6JDK8新增的時間和日期API 1019
30.6.1時間和日期的基礎知識 1020
30.6.2格式化日期和時間 1021
30.6.3解析日期和時間字元串 1024
30.7探究java.time包的其他方面 1025
第Ⅲ部分使用Swing進行GUI編程
第31章Swing簡介 1029
31.1Swing的起源 1030
31.2Swing以AWT為基礎 1030
31.3兩個關鍵的Swing特性 1030
31.3.1Swing組件是輕量級的 1031
31.3.2Swing支持可插入外觀 1031
31.4MVC連線 1031
31.5組件與容器 1032
31.5.1組件 1032
31.5.2容器 1033
31.5.3頂級容器窗格 1033
31.6Swing包 1034
31.7一個簡單的Swing應用程式 1034
31.8事件處理 1038
31.9創建Swingapplet 1041
31.10在Swing中繪圖 1044
31.10.1繪圖的基礎知識 1044
31.10.2計算可繪製區域 1045
31.10.3一個繪圖示例 1045
第32章探究Swing 1049
32.1JLabel與ImageIcon 1050
32.2JTextField 1051
32.3Swing按鈕 1053
32.3.1JButton 1053
32.3.2JToggleButton 1056
32.3.3複選框 1058
32.3.4單選按鈕 1060
32.4JTabbedPane 1063
32.5JScrollPane 1065
32.6JList 1067
32.7JComboBox 1070
32.8樹 1073
32.9JTable 1076
第33章Swing選單簡介 1079
33.1選單的基礎知識 1080
33.2JMenuBar、JMenu和JMenuItem概述 1081
33.2.1JMenuBar 1081
33.2.2JMenu 1082
33.2.3JMenuItem 1083
33.3創建主選單 1084
33.4向選單項添加助記符和加速鍵 1088
33.5向選單項添加圖片和工具提示 1090
33.6使用JRadioButtonMenuItem和JCheckBoxMenuItem 1091
33.7創建彈出選單 1094
33.8創建工具列 1096
33.9使用動作 1099
33.10完整演示MenuDemo程式 1104
33.11繼續探究Swing 1111
第Ⅳ部分使用JavaFX進行GUI編程
第34章JavaFXGUI編程簡介 1115
34.1JavaFX的基礎概念 1116
34.1.1JavaFX包 1116
34.1.2Stage和Scene類 1117
34.1.3節點和場景圖 1117
34.1.4布局 1117
34.1.5Application類和生命周期方法 1117
34.1.6啟動JavaFX應用程式 1118
34.2JavaFX應用程式的骨架 1118
34.3編譯和運行JavaFX程式 1121
34.4應用程式執行緒 1122
34.5一個簡單的JavaFX控制項:Label 1122
34.6使用按鈕和事件 1124
34.6.1事件的基礎知識 1124
34.6.2按鈕控制項簡介 1125
34.6.3演示事件處理和按鈕 1125
34.7直接在畫布上繪製 1128
第35章探究JavaFX控制項 1135
35.1使用Image和ImageView 1136
35.1.1向標籤添加圖片 1138
35.1.2在按鈕中使用圖片 1140
35.2ToggleButton 1143
35.3RadioButton 1145
35.3.1處理開關組中的變化事件 1149
35.3.2處理單選按鈕的另一種方式 1150
35.4CheckBox 1152
35.5ListView 1156
35.5.1ListView的滾動條 1160
35.5.2啟用多項選擇 1160
35.6ComboBox 1161
35.7TextField 1164
35.8ScrollPane 1167
35.9TreeView 1170
35.10效果和變換簡介 1175
35.10.1效果 1175
35.10.2變換 1176
35.10.3演示效果和變換 1177
35.11添加工具提示 1180
35.12禁用控制項 1181
第36章JavaFX選單簡介 1183
36.1選單的基礎知識 1184
36.2MenuBar、Menu和MenuItem概述 1185
36.2.1MenuBar 1185
36.2.2Menu 1186
36.2.3MenuItem 1186
36.3創建主選單 1187
36.4向選單項添加助記符和加速鍵 1193
36.5向選單項添加圖片 1194
36.6使用RadioMenuItem和CheckMenuItem 1195
36.7創建上下文選單 1197
36.8創建工具列 1200
36.9完整的MenuDemo程式 1202
36.10繼續探究JavaFX 1209
第Ⅴ部分套用Java
第37章JavaBean 1213
37.1JavaBean是什麼 1214
37.2JavaBean的優勢 1214
37.3內省 1214
37.3.1屬性的設計模式 1214
37.3.2事件的設計模式 1216
37.3.3方法與設計模式 1216
37.3.4使用BeanInfo接口 1216
37.4綁定屬性與約束屬性 1217
37.5持久性 1217
37.6定製器 1218
37.7JavaBeanAPI 1218
37.7.1Introspector類 1219
37.7.2PropertyDescriptor類 1220
37.7.3EventSetDescriptor類 1220
37.7.4MethodDescriptor類 1220
37.8一個Bean示例 1220
第38章servlet 1225
38.1背景 1225
38.2servelet的生命周期 1226
38.3servlet開發選項 1227
38.4使用Tomcat 1227
38.5一個簡單的servlet 1229
38.5.1創建和編譯servlet原始碼 1229
38.5.2啟動Tomcat 1230
38.5.3啟動Web瀏覽器並請求servlet 1230
38.6ServletAPI 1230
38.7javax.servlet包 1230
38.7.1Servlet接口 1231
38.7.2ServletConfig接口 1231
38.7.3ServletContext接口 1232
38.7.4ServletRequest接口 1232
38.7.5ServletResponse接口 1233
38.7.6GenericServlet類 1233
38.7.7ServletInputStream類 1234
38.7.8ServletOutputStream類 1234
38.7.9servlet異常類 1234
38.8讀取servlet參數 1234
38.9javax.servlet.http包 1236
38.9.1HttpServletRequest接口 1236
38.9.2HttpServletResponse接口 1237
38.9.3HttpSession接口 1238
38.9.4Cookie類 1239
38.9.5HttpServlet類 1240
38.10處理HTTP請求和回響 1241
38.10.1處理HTTPGET請求 1241
38.10.2處理HTTPPOST請求 1243
38.11使用cookie 1244
38.12會話跟蹤 1246
附錄使用Java的文檔注釋 1249