內容介紹
在《Java完全參考手冊(第8版)》中,編程暢銷書作者Herb Schildt向您展示了開發、編譯、調試以及運行Java程式所需要掌握的全部知識。本書內容豐富,針對Java SE 7進行了全面更新,涵蓋了Java語言的方方面面,包括語法、關鍵字以及基本的編程原則。此外,本書還介紹了Java API庫的關鍵元素,分析了Java Bean、servlet、applet以及Swing,並通過真實的案例演示了Java在編程中的實際套用。在講解的過程中,書中貫穿了Java SE 7的最新特性,例如帶資源的try語句、在switch語句中使用字元串、使用菱形運算符“”的類型推斷功能、NIO.2輸入輸出系統以及Fork/Join Framework。作者介紹
Herbert Schildt是Java、C++、C以及C#語言方面的權威。他撰寫的編程書籍在世界範圍內銷售了數百萬冊,並且已經被翻譯成所有主要的外國語言。他撰寫了大量Java方面的書籍,包括Java:A Beginner’s Guide、Herb Schildt’s Java Programming Cookbook、Swing:A Beginner’s Guide以及The Art of Java。作品目錄
目 錄第Ⅰ部分 Java語言
第1章 Java的歷史和演變 .................... 3
1.1 Java的家世 ................................. 4
1.1.1 現代程式語言的誕生:
C語言 ...................................... 4
1.1.2 C++:下一個階段 ................... 5
1.1.3 Java出現的時機已經成熟 ..... 6
1.2 Java的誕生 ................................. 6
1.3 Java改變Internet的方式 ........... 8
1.3.1 Java applet ................................ 8
1.3.2 安全性 ...................................... 8
1.3.3 可移植性 .................................. 9
1.4 Java的魔力:位元組碼 ................. 9
1.5 servlet:伺服器端的Java ......... 10
1.6 Java的關鍵特性 ....................... 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.7 Java的演變歷程 ....................... 12
1.8 文化革新 ................................... 15
Java 完全參考手冊(第 8 版)
VIII
第2章 Java綜述 ................................ 17
2.1 面向對象編程 ........................... 17
2.1.1 兩種範式 ................................ 18
2.1.2 抽象........................................ 18
2.1.3 OOP三原則 ........................... 19
2.2 第一個簡單程式 ....................... 23
2.2.1 輸入程式 ................................ 23
2.2.2 編譯程式 ................................ 23
2.2.3 深入分析第一個示例程式 .... 24
2.3 第二個簡短程式 ....................... 26
2.4 兩種控制語句 ........................... 28
2.4.1 if語句 .................................... 28
2.4.2 for循環 .................................. 29
2.5 使用代碼塊 ............................... 30
2.6 辭彙問題 ................................... 32
2.6.1 空白符 .................................... 32
2.6.2 標識符 .................................... 32
2.6.3 字面值 .................................... 32
2.6.4 注釋........................................ 32
2.6.5 分隔設定 .................................... 33
2.6.6 Java關鍵字 ............................ 33
2.7 Java類庫 ................................... 34
第3章 數據類型、變數和數組 ............ 35
3.1 Java是強類型化的語言 ........... 35
3.2 基本類型 ................................... 36
3.3 整型 ........................................... 36
3.3.1 byte ......................................... 37
3.3.2 short........................................ 37
3.3.3 int ........................................... 37
3.3.4 long ........................................ 37
3.4 浮點型 ....................................... 38
3.4.1 float ........................................ 38
3.4.2 double ..................................... 39
3.5 字元型 ....................................... 39
3.6 布爾型 ....................................... 41
3.7 深入分析字面值 ....................... 42
3.7.1 整型字面值 ............................ 42
3.7.2 浮點型字面值 ....................... 43
3.7.3 布爾型字面值 ....................... 44
3.7.4 字元型字面值 ....................... 44
3.7.5 字元串字面值 ....................... 44
3.8 變數 ........................................... 45
3.8.1 變數的聲明 ........................... 45
3.8.2 動態初始化 ........................... 45
3.8.3 變數的作用域和生命周期.... 46
3.9 類型轉換和強制類型轉換 ........ 48
3.9.1 Java的自動類型轉換 ........... 49
3.9.2 強制轉換不兼容的類型 ........ 49
3.10 表達式中的自動類型提升 ...... 50
3.11 數組 .......................................... 52
3.11.1 一維數組 ............................ 52
3.11.2 多維數組 ............................ 54
3.11.3 另一種數組聲明語法 ........ 58
3.12 關於字元串的一些說明 .......... 59 3.13 向C/C++程式設計師提供指針
方面的註解 ............................. 60
第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 位邏輯運算符 ....................... 68
4.2.2 左移 ....................................... 70
4.2.3 右移 ....................................... 71
4.2.4 無符號右移 ........................... 73
4.2.5 位運算符與賦值的組合 ........ 74
4.3 關係運算符................................ 75
4.4 布爾邏輯運算符 ........................ 76
4.5 賦值運算符................................ 78
4.6 “?”運算符 .............................. 78
4.7 運算符的優先權 ........................ 79
4.8 使用圓括弧................................ 80
目 錄
IX
第5章 控制語句 .................................. 83
5.1 Java的選擇語句 ....................... 83
5.1.1 if語句 .................................... 84
5.1.2 switch語句 ............................ 87
5.2 疊代語句 ................................... 91
5.2.1 while語句 .............................. 92
5.2.2 do-while語句......................... 93
5.2.3 for語句 .................................. 96
5.2.4 for循環的for-each版本 .... 100
5.2.5 嵌套的循環 ......................... 105
5.3 跳轉語句 ................................. 106
5.3.1 使用break語句 .................. 106
5.3.2 使用continue語句 .............. 110
5.3.3 return語句 ........................... 111
第6章 類........................................... 113
6.1 類的基礎知識 ......................... 114
6.1.1 類的一般形式 ...................... 114
6.1.2 一個簡單的類 ...................... 115
6.2 聲明對象 ................................. 117
6.3 為對象引用變數賦值 ............. 119
6.4 方法 ......................................... 120
6.4.1 為Box類添加方法 ............ 120
6.4.2 返回值 ................................. 122
6.4.3 添加帶參數的方法 ............. 124
6.5 構造函式 ................................. 126
6.6 this關鍵字 .............................. 129
6.7 垃圾回收 ................................. 130
6.8 finalize()方法 ........................... 130
6.9 堆疊類 ..................................... 131
第7章 方法和類的深入分析.............. 135
7.1 重載方法 ................................. 135
7.2 將對象用作參數 ..................... 140
7.3 參數傳遞的深入分析 ............. 143
7.4 返回對象 ................................. 145
7.5 遞歸 ......................................... 146
7.6 訪問控制 ................................. 148
7.7 理解static ................................ 151
7.8 final介紹 ................................. 153
7.9 重新審視數組.......................... 154
7.10 嵌套類和內部類 .................... 156
7.11 String類介紹 ......................... 158
7.12 使用命令行參數 .................... 161
7.13 varargs:可變長度參數 ........ 162
7.13.1 重載varargs方法 ............ 165
7.13.2 varargs方法與模糊性 ..... 166
第8章 繼承 ....................................... 169
8.1 繼承的基礎知識 ...................... 169
8.1.1 成員訪問與繼承 ................. 171
8.1.2 一個更實際的例子.............. 172 8.1.3 超類變數可以引用子類
對象 ..................................... 174
8.2 使用super關鍵字 ................... 175 8.2.1 使用super調用超類的
構造函式 ............................. 176
8.2.2 super的另一種用法 ............ 179
8.3 創建多級繼承層次 .................. 180
8.4 構造函式的調用時機 .............. 183
8.5 方法重寫 ................................. 184
8.6 動態方法調度.......................... 187
8.6.1 重寫方法的目的 ................. 189
8.6.2 套用方法重寫 ..................... 189
8.7 使用抽象類.............................. 191
8.8 在繼承中使用final關鍵字 .... 193 8.8.1 使用final關鍵字阻止
重寫 ..................................... 194 8.8.2 使用final關鍵字阻止
繼承 ..................................... 194
8.9 Object類 .................................. 195
第9章 包和接口 ............................... 197
9.1 包 ............................................. 198
9.1.1 定義包 ................................. 198
9.1.2 包查找與CLASSPATH....... 199
9.1.3 一個簡短的包示例.............. 199
9.2 訪問保護 ................................. 200
Java 完全參考手冊(第 8 版)
X
9.3 導入包 ..................................... 204
9.4 接口 ......................................... 206
9.4.1 定義接口 ............................. 207
9.4.2 實現接口 ............................. 207
9.4.3 嵌套接口 ............................. 210
9.4.4 套用接口 .............................. 211
9.4.5 接口中的變數 ..................... 214
9.4.6 接口可以擴展 ..................... 216
第10章 異常處理 .............................. 219
10.1 異常處理的基礎知識 ........... 219
10.2 異常類型 ............................... 220
10.3 未捕獲的異常 ....................... 221
10.4 使用try和catch ................... 222
10.5 多條catch子句 ..................... 224
10.6 嵌套的try語句 ..................... 226
10.7 throw ...................................... 228
10.8 throws .................................... 229
10.9 finally ..................................... 230
10.10 Java的內置異常 ................. 232
10.11 創建自己的異常子類 ......... 233
10.12 鏈式異常 ............................. 235 10.13 JDK 7中3個新的
異常特性 ............................. 237
10.14 使用異常 ............................. 238
第11章 多執行緒編程 .......................... 239
11.1 Java執行緒模型 ....................... 240
11.1.1 執行緒優先權 ..................... 241
11.1.2 同步 ................................. 242
11.1.3 訊息傳遞 ......................... 242 11.1.4 Thread類和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()方法 .... 250
11.6 執行緒優先權 ............................ 252
11.7 同步 ........................................ 253
11.7.1 使用同步方法 ................. 253
11.7.2 synchronized語句 ........... 255
11.8 執行緒間通信 ............................ 257
11.9 掛起、恢復與停止執行緒 ........ 263 11.9.1 Java 1.1以前使用的掛起、
恢復和停止執行緒的方式 .... 264 11.9.2 掛起、恢復與停止執行緒的
現代方式.......................... 266
11.10 獲取執行緒的狀態 .................. 268
11.11 使用多執行緒 .......................... 270 第12章 枚舉、自動裝箱與註解
(元數據) ............................... 271
12.1 枚舉 ....................................... 271
12.1.1 枚舉的基礎知識 ............. 272 12.1.2 values()和valueOf()
方法 ................................. 274
12.1.3 Java枚舉是類類型 ......... 275
12.1.4 枚舉繼承自Enum類 ...... 278
12.1.5 另一個枚舉示例 ............. 279
12.2 類型封裝器............................ 281
12.2.1 Character封裝器 ............. 281
12.2.2 Boolean封裝器 ............... 282
12.2.3 數值類型封裝器 ............. 282
12.3 自動裝箱 ............................... 283
12.3.1 自動裝箱與方法 ............. 284 12.3.2 表達式中發生的
自動裝箱/拆箱................. 285 12.3.3 布爾型和字元型數值的
自動裝箱/拆箱................. 287 12.3.4 自動裝箱/拆箱有助於
防止錯誤.......................... 287
12.3.5 一些警告 ......................... 288
12.4 註解(元數據) ......................... 289
12.4.1 註解的基礎知識 ............. 289
目 錄
XI
12.4.2 指定保留策略 ................. 289 12.4.3 在運行時使用反射獲取
註解 ................................. 290
12.4.4 AnnotatedElement接口 .... 296
12.4.5 使用默認值 ..................... 296
12.4.6 標記註解......................... 297
12.4.7 單成員註解 ..................... 298
12.4.8 內置註解......................... 300
12.4.9 一些限制......................... 301
第13章 I/O、applet以及其他主題 ...... 303
13.1 I/O的基礎知識 ..................... 304
13.1.1 流 .................................... 304
13.1.2 位元組流和字元流 ............. 304
13.1.3 預定義流......................... 306
13.2 讀取控制台輸入 ................... 307
13.2.1 讀取字元......................... 307
13.2.2 讀取字元串 ..................... 308
13.3 向控制台寫輸出 ................... 310
13.4 PrintWriter類 ........................ 311
13.5 讀/寫檔案 .............................. 312
13.6 自動關閉檔案 ....................... 318
13.7 applet的基礎知識................. 321
13.8 transient和volatile修飾符 .... 324
13.9 使用instanceof運算符 ......... 324
13.10 strictfp .................................. 327
13.11 本地方法 ............................. 327
13.12 使用斷言 ............................. 331
13.13 靜態導入 ............................. 334 13.14 通過this()調用重載的
構造函式 ............................. 336
第14章 泛型 ..................................... 339
14.1 什麼是泛型 ........................... 340
14.2 一個簡單的泛型示例 ........... 340
14.2.1 泛型只使用對象 ............. 344 14.2.2 基於不同類型參數的
泛型類型是不同的 ......... 344 14.2.3 泛型提升類型安全性的
原理 ................................. 344
14.3 帶兩個類型參數的泛型類 .... 347
14.4 泛型類的一般形式 ................ 348
14.5 有界類型 ............................... 349
14.6 使用通配符參數 .................... 351
14.7 創建泛型方法........................ 359
14.8 泛型接口 ............................... 362
14.9 原始類型與遺留代碼 ............ 364
14.10 泛型類層次.......................... 367
14.10.1 使用泛型超類 ............. 367
14.10.2 泛型子類 ..................... 369 14.10.3 泛型層次中的運行時
類型比較 ..................... 370
14.10.4 強制轉換 ..................... 373
14.10.5 重寫泛型類的方法 ..... 373
14.11 泛型的類型推斷 .................. 374
14.12 擦拭 ..................................... 376
14.13 模糊性錯誤.......................... 379
14.14 使用泛型的一些限制 .......... 381
14.14.1 不能實例化類型參數 ... 381 14.14.2 對靜態成員的一些
限制 ............................. 381 14.14.3 對泛型數組的一些
限制 ............................. 382
14.14.4 對泛型異常的限制 ..... 383 第Ⅱ部分 Java庫
第15章 字元串處理 .......................... 387
15.1 String類的構造函式 ............. 388
15.2 字元串的長度........................ 390
15.3 特殊的字元串操作 ................ 391
15.3.1 字元串字面值 ................. 391
15.3.2 字元串連線 ..................... 391 15.3.3 字元串和其他數據
類型的連線 ..................... 392 15.3.4 字元串轉換和toString()
方法 ................................. 393
Java 完全參考手冊(第 8 版)
XII
15.4 提取字元 ............................... 394
15.4.1 charAt() ........................... 394
15.4.2 getChars() ........................ 394
15.4.3 getBytes() ........................ 395
15.4.4 toCharArray() .................. 395
15.5 比較字元串 ........................... 395 15.5.1 equals()和
equalsIgnoreCase() .......... 395
15.5.2 regionMatches() .............. 396 15.5.3 startsWith()和
endsWith() ....................... 397
15.5.4 equals()與== ................... 397
15.5.5 compareTo() .................... 398
15.6 查找字元串 ........................... 399
15.7 修改字元串 ........................... 401
15.7.1 substring() ....................... 401
15.7.2 concat() ........................... 402
15.7.3 replace() .......................... 402
15.7.4 trim() ............................... 403
15.8 使用valueOf()轉換數據 ....... 404 15.9 改變字元串中字元的
大小寫 ................................... 404
15.10 其他String方法 .................. 405
15.11 StringBuffer類 .................... 406 15.11.1 StringBuffer類的
構造函式 .................... 406
15.11.2 length()與capacity() ... 407
15.11.3 ensureCapacity() ......... 407
15.11.4 setLength() .................. 408 15.11.5 charAt()與
setCharAt() ................. 408
15.11.6 getChars() ................... 409
15.11.7 append() ...................... 409
15.11.8 insert() ......................... 409
15.11.9 reverse() ...................... 410 15.11.10 delete()與
deleteCharAt()............ 411
15.11.11 replace() ..................... 411
15.11.12 substring() .................. 412 15.11.13 其他StringBuffer
方法 ........................... 412
15.12 StringBuilder類 ................... 413
第16章 探究java.lang ..................... 415
16.1 基本類型封裝器 .................... 416
16.1.1 Number ............................ 416
16.1.2 Double與Float ............... 417 16.1.3 理解isInfinite()與
isNaN() ............................ 420 16.1.4 Byte、Short、Integer和
Long ................................. 420
16.1.5 Character .......................... 427 16.1.6 對Unicode代碼點的
附加支持 ......................... 430
16.1.7 Boolean ............................ 431
16.2 Void類 ................................... 432
16.3 Process類 .............................. 432
16.4 Runtime類 ............................. 433
16.4.1 記憶體管理 ......................... 434
16.4.2 執行其他程式 ................. 435
16.5 ProcessBuilder類 .................. 436
16.6 System類 ............................... 439 16.6.1 使用currentTimeMillis()
計時程式的執行 ............. 440
16.6.2 使用arraycopy() .............. 441
16.6.3 環境屬性 ......................... 442
16.7 Object類 ................................ 442 16.8 使用clone()方法和Cloneable
接口 ....................................... 443
16.9 Class類 .................................. 445
16.10 ClassLoader類 ..................... 448
16.11 Math類 ................................ 448
16.11.1 三角函式 ..................... 448
16.11.2 指數函式 ..................... 449
16.11.3 捨入函式 ..................... 449
16.11.4 其他數學方法 ............. 450
目 錄
XIII
16.12 StrictMath類 ....................... 452
16.13 Compiler類 ......................... 452 16.14 Thread類、ThreadGroup類
和Runnable接口 ................ 452
16.14.1 Runnable接口 ............ 452
16.14.2 Thread類 .................... 452
16.14.3 ThreadGroup類 .......... 454 16.15 ThreadLocal和
InheritableThreadLocal類 .... 459
16.16 Package類 ........................... 459
16.17 RuntimePermission類 ......... 460
16.18 Throwable類 ....................... 460
16.19 SecurityManager類 ............. 460
16.20 StackTraceElement類 ......... 460
16.21 Enum類 ............................... 461
16.22 ClassValue類 ...................... 462
16.23 CharSequence接口 ............. 462
16.24 Comparable接口 ................. 462
16.25 Appendable接口 ................. 463
16.26 Iterable接口 ........................ 463
16.27 Readable接口 ..................... 464
16.28 AutoCloseable接口 ............. 464 16.29 Thread.UncaughtException-
Handler接口 ....................... 464
16.30 java.lang子包 ...................... 464
16.30.1 java.lang.annotation .... 465
16.30.2 java.lang.instrument .... 465
16.30.3 java.lang.invoke .......... 465
16.30.4 java.lang.management ... 465
16.30.5 java.lang.ref ................ 465
16.30.6 java.lang.reflect........... 465 第17章 java.util第1部分:
集合框架 .............................. 467
17.1 集合概述 ............................... 468
17.2 JDK 5對集合框架的修改 .... 469 17.2.1 泛型從根本上改變了
集合框架 ......................... 470 17.2.2 自動裝箱使得使用基本
類型更加容易 ................. 470
17.2.3 for-each風格的循環 ....... 470
17.3 集合接口 ............................... 470
17.3.1 Collection接口 ................ 471
17.3.2 List接口 .......................... 473
17.3.3 Set接口 ........................... 474
17.3.4 SortedSet接口 ................. 474
17.3.5 NavigableSet接口 ........... 475
17.3.6 Queue接口 ...................... 476
17.3.7 Deque接口 ...................... 477
17.4 集合類 ................................... 479
17.4.1 ArrayList類 ..................... 480
17.4.2 LinkedList類 ................... 483
17.4.3 HashSet類 ....................... 484
17.4.4 LinkedHashSet類 ............ 486
17.4.5 TreeSet類 ........................ 486
17.4.6 PriorityQueue類 .............. 487
17.4.7 ArrayDeque類 ................. 488
17.4.8 EnumSet類 ...................... 489
17.5 通過疊代器訪問集合 ............ 490
17.5.1 使用疊代器 ..................... 491 17.5.2 使用for-each循環替代
疊代器 ............................. 493 17.6 在集合中存儲用戶
定義的類................................ 494
17.7 RandomAccess接口 .............. 495
17.8 使用映射 ............................... 496
17.8.1 映射接口 ......................... 496
17.8.2 映射類 ............................. 500
17.9 比較器 ................................... 505
17.10 集合算法.............................. 508
17.11 Arrays類 .............................. 513
17.12 需要泛型集合的原因 .......... 518
17.13 遺留的類和接口 .................. 521
17.13.1 Enumeration接口 ....... 521
17.13.2 Vector類 ..................... 521
17.13.3 Stack類 ....................... 525
Java 完全參考手冊(第 8 版)
XIV
17.13.4 Dictionary類 .............. 527
17.13.5 Hashtable類 ............... 528
17.13.6 Properties類 ............... 532
17.13.7 使用store()和load() .... 535
17.14 集合小結 ............................. 537 第18章 java.util第2部分:更多實用
工具類 ................................. 539
18.1 StringTokenizer類 ................. 539
18.2 BitSet類 ................................ 541
18.3 Date類 ................................... 544
18.4 Calendar類 ............................ 546
18.5 GregorianCalendar類 ............ 549
18.6 TimeZone類 .......................... 550
18.7 SimpleTimeZone類 .............. 551
18.8 Locale類 ............................... 552
18.9 Random類 ............................. 554
18.10 Observable類 ...................... 555
18.10.1 Observer接口 ............. 556
18.10.2 Observer示例 ............. 556
18.11 Timer和TimerTask類 ........ 559
18.12 Currency類 ......................... 561
18.13 Formatter類 ........................ 562 18.13.1 Formatter類的
構造函式 .................... 563
18.13.2 Formatter類的方法 .... 563
18.13.3 格式化的基礎知識 .... 564
18.13.4 格式化字元串和字元 ... 566
18.13.5 格式化數字 ................ 566
18.13.6 格式化時間和日期 .... 567
18.13.7 %n和%%說明符 ....... 569
18.13.8 指定最小欄位寬度 .... 569
18.13.9 指定精度 .................... 571
18.13.10 使用格式標誌 .......... 572
18.13.11 對齊輸出 .................. 572 18.13.12 空格、“+”、“0”以及
“(”標誌 ................... 573
18.13.13 逗號標誌 .................. 574
18.13.14 “#:”標誌 ............... 574
18.13.15 大寫選項 ................... 574
18.13.16 使用參數索引 ........... 575
18.13.17 關閉Formatter對象 ... 577
18.13.18 printf()方法 ............... 577
18.14 Scanner類 ............................ 577 18.14.1 Scanner類的
構造函式 ..................... 577
18.14.2 掃描的基礎知識 ......... 578
18.14.3 一些Scanner示例 ...... 581
18.14.4 設定定界符 ................. 585
18.14.5 其他Scanner特性 ...... 587 18.15 ResourceBundle、 ListResourceBundle和
PropertyResourceBundle類.... 588
18.16 其他實用工具類和接口 ...... 592
18.17 java.util子包........................ 593 18.17.1 java.util.concurrent、 java.util.concurrent.atomic 和java.util.concurrent.
locks ............................ 593
18.17.2 java.util.jar ................... 593
18.17.3 java.util.logging ........... 593
18.17.4 java.util.prefs ............... 593
18.17.5 java.util.regex .............. 594
18.17.6 java.util.spi .................. 594
18.17.7 java.util.zip .................. 594
第19章 輸入/輸出:探究Java.io ...... 595
19.1 I/O類和接口 ......................... 596
19.2 File類 .................................... 597
19.2.1 目錄 ................................. 600 19.2.2 使用FilenameFilter
接口 ................................. 601
19.2.3 listFiles()方法 .................. 602
19.2.4 創建目錄 ......................... 602 19.3 AutoCloseable、Closeable和
Flushable接口 ....................... 602
目 錄
XV
19.4 I/O異常 ................................. 603
19.5 關閉流的兩種方式 ............... 604
19.6 流類 ....................................... 605
19.7 位元組流 ................................... 605
19.7.1 InputStream類 ................ 605
19.7.2 OutputStream類 ............. 606
19.7.3 FileInputStream類 .......... 606
19.7.4 FileOutputStream類 ....... 609 19.7.5 ByteArrayInputStream
類 ..................................... 611 19.7.6 ByteArrayOutputStream
類 .................................... 613
19.7.7 過濾的位元組流 ................. 614
19.7.8 快取的位元組流 ................. 614
19.7.9 SequenceInputStream類 .... 618
19.7.10 PrintStream類 ............... 620 19.7.11 DataOutputStream和
DataInputStream類 ...... 622
19.7.12 RandomAccessFile類 ... 624
19.8 字元流 ................................... 625
19.8.1 Reader類 ........................ 625
19.8.2 Writer類 ......................... 626
19.8.3 FileReader類 .................. 627
19.8.4 FileWriter類 ................... 627
19.8.5 CharArrayReader類 ....... 628
19.8.6 CharArrayWriter類 ........ 630
19.8.7 BufferedReader類 .......... 631
19.8.8 BufferedWriter類 ........... 633
19.8.9 PushbackReader類 ......... 633
19.8.10 PrintWriter類 ................ 634
19.9 Console類 ............................. 635
19.10 串列化 ................................. 637
19.10.1 Serializable接口 ........ 637
19.10.2 Externalizable接口 .... 637
19.10.3 ObjectOutput接口 ...... 638 19.10.4 ObjectOutputStream
類 ................................ 638
19.10.5 ObjectInput接口 ........ 639
19.10.6 ObjectInputStream類 .... 640
19.10.7 串列化示例 ................. 641
19.11 流的優點 .............................. 642
第20章 探究NIO ............................. 643
20.1 NIO類 ................................... 643
20.2 NIO的基礎知識 ................... 644
20.2.1 快取 ................................. 644
20.2.2 通道 ................................. 646
20.2.3 字元集和選擇器 ............. 647
20.3 JDK 7對NIO的增強 ........... 648
20.3.1 Path接口 ......................... 648
20.3.2 Files類 ............................ 649
20.3.3 Path接口 ......................... 651
20.3.4 檔案屬性接口 ................. 652 20.3.5 FileSystem、FileSystems
和FileStore類 ................ 654
20.4 使用NIO系統 ...................... 654 20.4.1 為基於通道的I/O使用
NIO .................................. 654 20.4.2 為基於流的I/O
使用NIO ......................... 663 20.4.3 為路徑和檔案系統操作
使用NIO ......................... 666 20.5 JDK 7之前基於通道的
例子 ....................................... 674
20.5.1 讀檔案(JDK 7之前) ....... 674
20.5.2 寫檔案(JDK 7之前) ....... 677
第21章 聯網 ..................................... 681
21.1 聯網的基礎知識 .................... 682
21.2 聯網類和接口........................ 683
21.3 InetAddress類 ....................... 683
21.3.1 工廠方法 ......................... 684
21.3.2 實例方法 ......................... 685 21.4 Inet4Address類和
Inet6Address類...................... 685
21.5 TCP/IP客戶端套接字 ........... 686
21.6 URL類 .................................. 689
Java 完全參考手冊(第 8 版)
XVI
21.7 URLConnection類 ................ 691
21.8 HttpURLConnection類 ......... 694
21.9 URI類 ................................... 696
21.10 cookie................................... 696
21.11 TCP/IP伺服器套接字 ........ 696
21.12 數據報 ................................. 697
21.12.1 DatagramSocket類 ..... 697
21.12.2 DatagramPacket類 ..... 698
21.12.3 數據報示例 ................ 699
第22章 Applet類 ............................. 701
22.1 applet的兩種類型................. 701
22.2 applet的基礎知識................. 702
22.3 applet的架構 ........................ 704
22.4 applet的骨架 ........................ 705
22.4.1 applet的初始化和終止 ... 706
22.4.2 重寫update()方法 .......... 707
22.5 簡單的applet顯示方法 ........ 707
22.6 請求重畫 ............................... 709
22.7 使用狀態欄視窗 ................... 712
22.8 HTML APPLET標籤 ............ 713
22.9 向applet傳遞參數................ 714 22.10 getDocumentBase()和
getCodeBase() ...................... 718 22.11 AppletContext接口和
showDocument()方法 .......... 718
22.12 AudioClip接口 ................... 720
22.13 AppletStub接口 .................. 720
22.14 向控制台輸出 ..................... 720
第23章 事件處理 .............................. 721
23.1 兩種事件處理機制 ............... 722
23.2 委託事件模型 ....................... 722
23.2.1 事件 ................................ 722
23.2.2 事件源 ............................ 723
23.2.3 事件監聽器 ..................... 723
23.3 事件類 ................................... 724
23.3.1 ActionEvent類 ............... 725
23.3.2 AdjustmentEvent類 ........ 726
23.3.3 ComponentEvent類 ........ 726
23.3.4 ContainerEvent類 ........... 727
23.3.5 FocusEvent類 ................. 727
23.3.6 InputEvent類................... 728
23.3.7 ItemEvent類 .................... 729
23.3.8 KeyEvent類 .................... 730
23.3.9 MouseEvent類 ................ 730
23.3.10 MouseWheelEvent類 .... 732
23.3.11 TextEvent類 .................. 733
23.3.12 WindowEvent類 ........... 733
23.4 事件源 ................................... 734
23.5 事件監聽器接口 .................... 735
23.5.1 ActionListener接口 ........ 736 23.5.2 AdjustmentListener
接口 ................................. 736 23.5.3 ComponentListener
接口 ................................. 736
23.5.4 ContainerListener接口 .... 736
23.5.5 FocusListener接口 .......... 736
23.5.6 ItemListener接口 ............ 736
23.5.7 KeyListener接口 ............. 737
23.5.8 MouseListener接口 ........ 737 23.5.9 MouseMotionListener
接口 ................................. 737 23.5.10 MouseWheelListener
接口 ............................... 737
23.5.11 TextListener接口 .......... 738 23.5.12 WindowFocusListener
接口 ............................... 738
23.5.13 WindowListener接口 .... 738
23.6 使用委託事件模型 ................ 738
23.6.1 處理滑鼠事件 ................. 739
23.6.2 處理鍵盤事件 ................. 741
23.7 適配器類 ............................... 744
23.8 內部類 ................................... 746 第24章 AWT介紹:使用視窗、
圖形和文本 .......................... 749
24.1 AWT類 .................................. 750
24.2 視窗基本元素........................ 752
24.2.1 Component類 .................. 752
目 錄
XVII
24.2.2 Container類 .................... 753
24.2.3 Panel類 ........................... 753
24.2.4 Window類 ...................... 753
24.2.5 Frame類 ......................... 753
24.2.6 Canvas類 ........................ 753
24.3 使用框架視窗 ....................... 753
24.3.1 設定視窗的尺寸 ............. 754
24.3.2 隱藏和顯示視窗 ............. 754
24.3.3 設定視窗的標題 ............. 754
24.3.4 關閉框架視窗 ................. 754
24.4 在applet中創建框架視窗 .... 755
24.5 創建基於視窗的程式 ........... 761
24.6 在視窗中顯示信息 ............... 763
24.7 使用圖形 ............................... 763
24.7.1 繪製直線......................... 764
24.7.2 繪製矩形......................... 765
24.7.3 繪製橢圓和圓 ................. 765
24.7.4 繪製弧形......................... 766
24.7.5 繪製多邊形 ..................... 767
24.7.6 改變圖形的大小 ............. 767
24.8 使用顏色 ............................... 768
24.8.1 Color類的方法 ............... 769
24.8.2 設定當前圖形的顏色 ..... 770
24.8.3 一個演示顏色的applet ... 770
24.9 設定繪圖模式 ....................... 771
24.10 使用字型 ............................. 773
24.10.1 確定可用字型 ............ 774
24.10.2 創建和選擇字型 ........ 775
24.10.3 獲取字型信息 ............ 777 24.11 使用FontMetrics管理文本
輸出 ...................................... 778
24.11.1 顯示多行文本 ............ 779
24.11.2 居中顯示文本 ............ 781
24.11.3 對齊多行文本 ............ 782 第25章 使用AWT控制項、布局
管理器和選單 ...................... 787
25.1 控制項的基礎知識 ................... 788
25.1.1 添加和移除控制項 ............. 788
25.1.2 回響控制項 ......................... 788
25.1.3 HeadlessException異常 ... 788
25.2 使用標籤 ............................... 789
25.3 使用命令按鈕........................ 790
25.4 使用複選框............................ 793
25.5 使用複選框組........................ 795
25.6 使用下拉列表........................ 796
25.7 使用列表框............................ 798
25.8 管理滾動條............................ 801
25.9 使用TextField ....................... 804
25.10 使用TextArea ...................... 807
25.11 理解布局管理器 .................. 808 25.11.1 FlowLayout布局
管理器 ......................... 809 25.11.2 BorderLayout布局
管理器 ......................... 811
25.11.3 使用Insets ................... 812 25.11.4 GridLayout布局
管理器 ......................... 814 25.11.5 CardLayout布局
管理器 ......................... 815 25.11.6 GridBagLayout布局
管理器 ......................... 818
25.12 選單欄和選單 ...................... 823
25.13 對話框 ................................. 829
25.14 FileDialog類 ....................... 834 25.15 擴展AWT控制項以處理
事件 ..................................... 835
25.15.1 擴展按鈕 ..................... 836
25.15.2 擴展複選框 ................. 837
25.15.3 擴展複選框組 ............. 838
25.15.4 擴展下拉列表 ............. 839
25.15.5 擴展列表框 ................. 840
25.15.6 擴展滾動條 ................. 841
25.16 關於重載paint()方法 .......... 842
Java 完全參考手冊(第 8 版)
XVIII
第26章 圖像 ..................................... 843
26.1 檔案格式 ............................... 844 26.2 圖像基礎:創建、載入與
顯示 ....................................... 844
26.2.1 創建Image對象 ............. 844
26.2.2 載入圖像......................... 845
26.2.3 顯示圖像......................... 845
26.3 ImageObserver接口 .............. 846
26.4 雙快取 ................................... 848
26.5 MediaTracker類 .................... 850
26.6 ImageProducer接口 .............. 853
26.7 ImageConsumer接口 ............ 855
26.8 ImageFilter類 ........................ 857
26.8.1 CropImageFilter類 ......... 858
26.8.2 RGBImageFilter類 ......... 860
26.9 單元格動畫 ........................... 870
26.10 其他圖像類 ......................... 873
第27章 並發實用工具 ...................... 875
27.1 並發API包 ........................... 876
27.1.1 java.util.concurrent包 ..... 876 27.1.2 java.util.concurrent.atomic
包 .................................... 877 27.1.3 java.util.concurrent.locks
包 .................................... 877
27.2 使用同步對象 ....................... 877
27.2.1 Semaphore類 .................. 878
27.2.2 CountDownLatch類 ....... 884
27.2.3 CyclicBarrier類 .............. 885
27.2.4 Exchanger類................... 888
27.2.5 Phaser類 ......................... 890
27.3 使用執行器 ........................... 898 27.3.1 一個簡單的執行器
示例 ............................ 898 27.3.2 使用Callable和Future
接口 ................................ 900
27.4 TimeUnit枚舉 ....................... 903
27.5 並發集合 ............................... 904
27.6 鎖 ........................................... 905
27.7 原子操作 ............................... 908 27.8 通過Fork/Join Framework
進行並行編程 ........................ 909
27.8.1 主要的Fork/Join類 ........ 909
27.8.2 分而治之的策略 ............. 912 27.8.3 一個簡單的Fork/Join
示例 ................................. 913 27.8.4 理解並行級別帶來的
影響 ................................. 915 27.8.5 一個使用RecursiveTask
的例子 ............................. 918
27.8.6 異步執行任務 ................. 921
27.8.7 取消任務 ......................... 921
27.8.8 確定任務的完成狀態 ..... 921
27.8.9 重新啟動任務 ................. 922
27.8.10 深入研究 ....................... 922 27.8.11 關於Fork/Join Framework
的一些提示 ................... 923 27.9 並發實用工具與Java傳統
方式的比較............................ 924
第28章 正則表達式和其他包 ........... 925
28.1 核心Java API包 ................... 926
28.2 正則表達式處理 .................... 927
28.2.1 Pattern類 ......................... 928
28.2.2 Matcher類 ....................... 928
28.2.3 正則表達式的語法 ......... 929
28.2.4 演示模式匹配 ................. 929
28.2.5 模式匹配的兩個選項 ..... 935
28.2.6 探究正則表達式 ............. 935
28.3 反射 ....................................... 936
28.4 遠程方法調用........................ 939
28.5 文本格式化............................ 943
28.5.1 DateFormat類 ................. 943
28.5.2 SimpleDateFormat類 ...... 945
目 錄
XIX
第Ⅲ部分 使用Java開發軟體
第29章 Java Bean ............................. 951
29.1 Java Bean是什麼 .................. 952
29.2 Java Bean的優勢 .................. 952
29.3 反省 ....................................... 952
29.3.1 屬性的設計模式 ............. 952
29.3.2 事件的設計模式 ............. 954
29.3.3 方法與設計模式 ............. 954
29.3.4 使用BeanInfo接口 ........ 955
29.4 綁定屬性與約束屬性 ........... 955
29.5 持久性 ................................... 955
29.6 定製器 ................................... 956
29.7 Java Bean API ........................ 956
29.7.1 Introspector類 ................ 958
29.7.2 PropertyDescriptor類 ..... 958
29.7.3 EventSetDescriptor類 .... 958
29.7.4 MethodDescriptor類 ...... 958
29.8 一個Bean示例 ..................... 958
第30章 Swing簡介 .......................... 963
30.1 Swing的起源 ........................ 964
30.2 Swing以AWT為基礎 ......... 964
30.3 兩個關鍵的Swing特性 ....... 964
30.3.1 Swing組件是輕量級的 ... 964
30.3.2 Swing支持可插入外觀 ... 965
30.4 MVC連線 ............................. 965
30.5 組件與容器 ........................... 966
30.5.1 組件 ................................ 966
30.5.2 容器 ................................ 967
30.5.3 頂級容器窗格 ................. 967
30.6 Swing包 ................................ 967 30.7 一個簡單的Swing
應用程式 ............................... 968
30.8 事件處理 ............................... 972
30.9 創建Swing applet ................. 975
30.10 在Swing中繪圖 ................. 977
30.10.1 繪圖的基礎知識 ........ 977
30.10.2 計算可繪製區域 ........ 978
30.10.3 一個繪圖示例 ............. 979
第31章 探究Swing .......................... 983
31.1 JLabel與ImageIcon .............. 984
31.2 JTextField ............................... 985
31.3 Swing按鈕 ............................ 987
31.3.1 JButton ............................. 988
31.3.2 JToggleButton .................. 990
31.3.3 複選框 ............................. 992
31.3.4 單選按鈕 ......................... 994
31.4 JTabbedPane .......................... 996
31.5 JScrollPane ............................. 998
31.6 JList ...................................... 1000
31.7 JComboBox.......................... 1003
31.8 樹 ......................................... 1006
31.9 JTable ................................... 1009
31.10 繼續研究Swing ................ 1011
第32章 servlet ............................... 1013
32.1 背景 ..................................... 1013
32.2 sevelet的生命周期 ............. 1014
32.3 Servlet開發選項 ................. 1015
32.4 使用Tomcat ......................... 1015
32.5 一個簡單的servlet .............. 1017 32.5.1 創建和編譯servlet
原始碼 .......................... 1017
32.5.2 啟動Tomcat ................. 1018 32.5.3 啟動Web瀏覽器並
請求servlet ................... 1018
32.6 servlet API ............................ 1018
32.7 javax.servlet包 .................... 1018
32.7.1 Servlet接口 .................. 1019
32.7.2 ServletConfig接口 ....... 1020
32.7.3 ServletContext接口 ..... 1020
32.7.4 ServletRequest接口 ..... 1020
32.7.5 ServletResponse接口 ... 1021
32.7.6 GenericServlet類 ......... 1022
32.7.7 ServletInputStream類 ... 1022
32.7.8 ServletOutputStream類 ... 1022
Java 完全參考手冊(第 8 版)
XX
32.7.9 servlet異常類 ............... 1022
32.8 讀取servlet參數 ................. 1022
32.9 javax.servlet.http包 ............. 1024 32.9.1 HttpServletRequest
接口 .............................. 1025 32.9.2 HttpServletResponse
接口 .............................. 1025
32.9.3 HttpSession接口 .......... 1026 32.9.4 HttpSessionBindingListener
接口 .............................. 1027
32.9.5 Cookie類 ...................... 1027
32.9.6 HttpServlet類 ............... 1028
32.9.7 HttpSessionEvent類 ..... 1029 32.9.8 HttpSessionBindingEvent
類 .................................. 1030
32.10 處理HTTP請求和回響 ... 1030 32.10.1 處理HTTP GET
請求 .......................... 1030 32.10.2 處理HTTP POST
請求 .......................... 1032
32.11 使用cookie ........................ 1033
32.12 會話跟蹤 ........................... 1035 第Ⅳ部分 Java套用
第33章 applet和servlet在金融領域的 套用 ................................... 1039
33.1 計算貸款的還款額 ............. 1040
33.1.1 RegPay中聲明的變數 ... 1044
33.1.2 init()方法....................... 1044
33.1.3 makeGUI()方法 ............ 1044
33.1.4 actionPerformed()方法 .... 1047
33.1.5 compute()方法 .............. 1048
33.2 計算投資的未來收益 ......... 1048 33.3 計算為達到未來收益所需
要的初始投資額 ................. 1052 33.4 計算為拿到期望的養老金
所需要的初始投資額 ......... 1056
33.5 計算給定投資的最大收益 ... 1060
33.6 計算貸款餘額 ..................... 1064 33.7 創建套用於金融領域的
servlet ................................... 1068 33.7.1 將RegPay applet轉換為
servlet............................ 1069
33.7.2 RegPayS servlet ............ 1069
33.8 一些嘗試 ............................. 1072
第34章 使用Java創建下載管理器 ... 1073
34.1 理解Internet下載 ............... 1074
34.2 下載管理器概述 .................. 1074
34.3 DownLoad類....................... 1075
34.3.1 DownLoad類的變數 ... 1079 34.3.2 DownLoad類的
構造函式 ...................... 1079
34.3.3 download()方法 ............ 1079
34.3.4 run()方法 ...................... 1079
34.3.5 stateChanged()方法 ...... 1083
34.3.6 動作和訪問器方法 ...... 1083
34.4 ProgressRenderer類 ............ 1083
34.5 DownloadsTableModel類 ... 1084
34.5.1 addDownload()方法 ..... 1086
34.5.2 clearDownload()方法 ... 1087
34.5.3 getColumnClass()方法 ... 1087
34.5.4 getValueAt()方法 .......... 1087
34.5.5 update()方法 ................. 1088
34.6 DownloadManager類 .......... 1088 34.6.1 DownloadManager類的
變數 .............................. 1094 34.6.2 DownloadManager類的
構造函式 ...................... 1095
34.6.3 verifyUrl()方法 ............. 1095 34.6.4 tableSelectionChanged()
方法 .............................. 1096
34.6.5 updateButtons()方法 ..... 1096
34.6.6 處理動作事件 .............. 1097
34.7 編譯和運行下載管理器 ...... 1098
34.8 進一步完善下載管理器 ...... 1098
附錄 使用Java的文檔注釋 ............. 1099