內容簡介
本書專門介紹Java編程,主要內容包括:Java基礎知識、Java語法基礎、條件語句、循環語句、數組、Java面向對象編程、集合、常用的類庫、泛型、異常處理、I/O檔案處理和流程、AWT、Swing、JavaFX基礎知識、UI組件、事件處理程式、基於JavaFX框架的Web和多媒體開發、資料庫編程、網捆榜端絡與通信編程、多執行緒和進程等。本書適合Java開發人員閱讀,也適合計算機相關專業的師生閱讀。
圖書目錄
第 1章 計算機基礎和Java開發入門 1
1.1 計算機基礎 2
1.1.1 中央處理器 2
1.1.2 比特和位元組 2
1.1.3 二進制 3
1.1.4 編碼格式 3
1.2 初識Java 4
1.2.1 何謂Java 4
1.2.2 Java的特點 5
1.2.3 Java的地位 5
1.3 技術解惑 6
1.3.1 對初學者的建議 6
1.3.2 理解Java的垃圾回收
機制 6
1.3.3 充分利用Java API文檔 7
1.4 夜糠汽棕課後練習 7
第 2章 第 一段Java程式 8
2.1 搭建Java開發環境 9
2.1.1 安裝JDK 9
2.1.2 配置開發環境—
Windows 7 11
2.1.3 配置開發環境—
Windows 10 11
2.2 編寫第 一段Java程式 13
2.2.1 第 一段Java代碼 13
2.2.2 關鍵字 13
2.2.3 標識符 14
2.2.4 注釋 14
2.2.5 main()方法 15
2.2.6 控制台的輸入和輸出 15
2.3 編譯並運行Java程式 15
2.3.1 編譯Java程式 15
2.3.2 運行Java程式 16
2.3.3 Java 11新特性:新的程式
運行方式 16
2.4 使用IDE工具—Eclipse 17
2.4.1 Eclipse 17
2.4.2 獲得並安裝Eclipse 17
2.4.3 新建一個Eclipse項目 20
2.4.4 編譯並運行Eclipse項目 23
2.4.5 使用Eclipse打開一個
Java項目 24
2.5 Java的運行機制 25
2.5.1 編譯型/解愚槓釋型語言的
運行機制 25
2.5.2 Java程式則要先編譯、
後運行 25
2.6 技術解惑 26
2.6.1 遵循Java源檔案的
命名規則 26
2.6.2 忽視系統檔案的擴展名 26
2.6.3 環境變數的問題 26
2.6.4 大小寫的問題 27
2.6.5 main()方法的問題 27
2.6.6 注意空格問題 27
2.6.7 到底用不用IDE工具 27
2.6.8 區分JRE和JDK 28
2.7 課後練習 28
第3章 Java語法基礎 29
3.1 常量和變數 30
3.1.1 常量 30
3.1.2 變數 31
3.2 數據類型 33
3.2.1 為什麼要使用數據類型 33
3.2.2 簡單數據類型的
取值範圍 34
3.2.3 字元型 34
3.2.4 整型 35
3.2.5 浮點型 36
3.2.6 布爾型 37
3.3 運算符 38
3.3.1 算術運算符 38
3.3.2 關係運算符和邏輯
運算殃遙灶符槓射她踏 41
3.3.3 位邏輯運算符 42
3.3.4 條件運算符 腳洪才43
3.3.5 賦值運算符 44
3.3.6 運算符的優先權 45
3.4 字元串 46
3.4.1 字蘭乘雄符串的初始化 46
3.4.2 String類 47
3.4.3 StringBuffer類 49
3.5 類型轉換 50
3.5.1 自動類型轉換 50
3.5.2 強制類型轉換 51
3.6 Java 11新特性:新增的
String函式 51
3.7 技術解惑 54
3.7.1 定義常量時的注意事項 54
3.7.2 char類型中單引號的
意義 54
3.7.3 正無窮和負無窮的
問題 55
3.7.4 移位運算符的限制 55
3.8 課後練習 55
第4章 條件語句 56
4.1 if語句詳解 57
4.1.1 if語句 57
4.1.2 if語句的延伸 58
4.1.3 有多個條件判斷的if
語句 59
4.2 switch語句詳解 60
4.2.1 switch語句的形式 61
4.2.2 無break的情況 62
4.2.3 case語句後沒有
執行語句 62
4.2.4 default可以不在末尾 63
4.3 條件語句演練 64
4.3.1 正確使用switch語句 64
4.3.2 正確使用if語句 64
4.3.3 switch語句的執行順序 65
4.4 技術解惑 66
4.4.1 if…else語句的意義 66
4.4.2 使用switch語句時的
幾個注意事項 67
4.4.3 switch語句和if…else if
語句的選擇 68
4.5 課後練習 68
第5章 循環語句 69
5.1 循環語句 70
5.1.1 for循環 70
5.1.2 while循環語句 72
5.1.3 do…while循環語句 73
5.2 跳轉語句 74
5.2.1 break語句的套用 74
5.2.2 return語句的套用 76
5.2.3 continue語句 77
5.3 技術解惑 77
5.3.1 使用for循環的技巧 77
5.3.2 跳轉語句的選擇技巧 78
5.4 課後練習 79
第6章 數組 80
6.1 簡單的一維數組 81
6.1.1 聲明一維數組 81
6.1.2 創建一維數組 81
6.1.3 初始化一維數組 82
6.2 二維數組 83
6.2.1 聲明二維數組 83
6.2.2 創建二維數組 83
6.2.3 初始化二維數組 84
6.3 三維數組 85
6.3.1 聲明三維數組 86
6.3.2 創建三維數組的方法 86
6.3.3 初始化三維數組 86
6.4 運算元組 87
6.4.1 複製數組 87
6.4.2 比較數組 87
6.4.3 排序數組 88
6.4.4 搜尋數組中的元素 89
6.4.5 填充數組 89
6.4.6 遍歷數組 90
6.5 技術解惑 90
6.5.1 動態初始化數組的規則 90
6.5.2 引用類型 91
6.5.3 數組的初始化 91
6.6 課後練習 91
第7章 Java的面向對象(上) 93
7.1 面向對象的基礎 94
7.1.1 面向對象的定義 94
7.1.2 Java的面向對象編程 94
7.1.3 一切皆為對象 94
7.1.4 Java面向對象的幾個
核心概念 95
7.2 創建類 96
7.2.1 定義類 96
7.2.2 定義屬性 97
7.2.3 定義方法 97
7.2.4 定義構造器 98
7.3 修飾符 98
7.3.1 public修飾符 98
7.3.2 private修飾符 99
7.3.3 protected修飾符 100
7.3.4 其他修飾符 100
7.4 方法詳解 101
7.4.1 方法與函式的關係 101
7.4.2 傳遞方法參數 102
7.4.3 長度可變的方法 102
7.4.4 不使用void關鍵字
構造方法名 103
7.4.5 遞歸方法 104
7.5 使用this 105
7.6 使用類和對象 105
7.6.1 創建和使用對象 106
7.6.2 使用靜態變數和
靜態方法 106
7.7 抽象類和抽象方法 107
7.7.1 抽象類和抽象方法的
基礎 107
7.7.2 抽象類必須有一個
抽象方法 108
7.7.3 抽象類的作用 109
7.8 軟體包 110
7.8.1 軟體包的定義 110
7.8.2 在Eclipse中定義
軟體包 110
7.8.3 在程式里插入軟體包 111
7.9 技術解惑 112
7.9.1 在Java中傳遞引用類型的
實質 112
7.9.2 掌握this的好處 113
7.9.3 推出抽象方法的原因 114
7.9.4 使用抽象類的時機 114
7.9.5 static修飾的作用 115
7.9.6 數組內是同一類型的
數據 115
7.10 課後練習 115
第8章 Java的面向對象(中) 116
8.1 類的繼承 117
8.1.1 繼承的定義 117
8.1.2 父類和子類 117
8.1.3 調用父類的構造方法 118
8.1.4 訪問父類的屬性和方法 119
8.1.5 多重繼承 120
8.1.6 重寫父類的方法 121
8.2 重寫和重載 122
8.2.1 重寫 122
8.2.2 重載 124
8.3 隱藏和封裝 125
8.3.1 Java中的封裝 125
8.3.2 訪問控制符 125
8.3.3 Java中的包 127
8.3.4 import 129
8.4 接口 129
8.4.1 定義接口 129
8.4.2 接口裡的常量和方法 130
8.4.3 引用接口 132
8.4.4 接口間的繼承 134
8.4.5 接口的私有方法 134
8.5 技術解惑 137
8.5.1 重寫方法的注意事項 137
8.5.2 重寫和重載的區別 138
8.5.3 舉例理解類的意義 138
8.5.4 Java包的一些規則 138
8.5.5 探討package和import
機制 138
8.5.6 接口編程的機理 139
8.5.7 接口和抽象類的區別和
聯繫 140
8.6 課後練習 141
第9章 Java的面向對象(下) 142
9.1 構造器詳解 143
9.1.1 初始化構造器 143
9.1.2 構造器重載 143
9.1.3 調用父類構造器 144
9.2 多態 145
9.2.1 多態的定義 145
9.2.2 演示Java中的多態 147
9.2.3 使用instanceof運算符 148
9.3 引用類型 149
9.3.1 4種引用類型 150
9.3.2 引用變數的強制
類型轉換 151
9.4 組合 152
9.5 初始化塊 154
9.5.1 初始化塊概述 154
9.5.2 靜態初始化塊 155
9.6 包裝類 156
9.7 final修飾符 157
9.7.1 用final修飾變數 158
9.7.2 final方法 159
9.8 內部類 160
9.8.1 內部類概述 160
9.8.2 非靜態內部類 160
9.8.3 成員內部類 162
9.8.4 局部內部類 162
9.8.5 靜態內部類 163
9.9 匿名類 163
9.9.1 定義匿名類 164
9.9.2 匿名內部類 164
9.9.3 匿名內部類使用final
形參 165
9.10 枚舉類 166
9.10.1 枚舉類的方法 166
9.10.2 模擬枚舉類 167
9.10.3 枚舉類型 168
9.11 Java 11新特性:嵌套訪問
控制 170
9.12 技術解惑 172
9.12.1 構造器和方法的區別 172
9.12.2 this在構造器中的
作用 173
9.12.3 子類構造器調用父類
構造器的情況 173
9.12.4 強制類型轉換的
局限性 174
9.12.5 繼承和組合的選擇 174
9.12.6 發生異常的原因 174
9.12.7 用final修飾基本類型和
引用類型變數之間的
區別 174
9.12.8 類的4種許可權 174
9.12.9 手工實現枚舉類的
缺點 175
9.13 課後練習 175
第 10章 集合 176
10.1 Java中的集合類 177
10.2 Collection接口和Iterator
接口 178
10.2.1 Collection接口概述 178
10.2.2 Iterator接口概述 179
10.2.3 使用Collection接口中的
方法來操作集合里的
元素 179
10.3 Set接口 180
10.3.1 Set接口概述 180
10.3.2 使用HashSet 183
10.3.3 使用TreeSet類 184
10.3.4 使用EnumSet類 186
10.4 List接口 188
10.4.1 List接口概述 188
10.4.2 根據索引操作集合內的
元素 190
10.4.3 使用ArrayList和
Vector類 191
10.5 Map接口 192
10.5.1 Map接口中的方法 192
10.5.2 Map接口中的
接口和類 193
10.5.3 使用HashMap和Hashtable
實現類 196
10.5.4 使用SortedMap接口和
TreeMap實現類 197
10.5.5 使用WeakHashMap類 199
10.5.6 使用IdentityHash
Map類 200
10.5.7 使用EnumMap類 201
10.6 Queue接口 201
10.6.1 LinkedList類 202
10.6.2 PriorityQueue類 203
10.7 集合工具類Collections 203
10.7.1 排序操作 203
10.7.2 查找和替換操作 204
10.8 其他集合類 205
10.8.1 Stack類 205
10.8.2 屬性類Properties 206
10.9 創建不可變的List、Set和
Map(Java 9新增功能) 209
10.9.1 Java 9以前版本的
解決方案 209
10.9.2 Java 9版本的解決
方案 209
10.10 使用var類型推斷(Java 10
新增功能) 211
10.11 技術解惑 212
10.11.1 Collection集合元素的
改變問題 212
10.11.2 深入理解HashSet 212
10.11.3 使用類EnumSet的
注意事項 213
10.11.4 ArrayList和Vector的
區別 213
10.11.5 TreeMap判斷兩個元素
相等的標準 213
10.11.6 分析Map類的性能 213
10.11.7 LinkedList、ArrayList、
Vector的性能問題 214
10.11.8 用swap()方法交換集合
中兩個位置的內容 214
10.12 課後練習 214
第 11章 常用的類庫 215
11.1 StringBuffer類 216
11.1.1 StringBuffer類概述 216
11.1.2 使用StringBuffer類 216
11.2 Runtime類 218
11.2.1 Runtime類概述 218
11.2.2 使用Runtime類 218
11.3 程式國際化 220
11.3.1 國際化基礎 220
11.3.2 Locale類 221
11.3.3 ResourceBundle類 221
11.3.4 處理動態文本 222
11.3.5 使用類代替資源檔案 223
11.4 System類 224
11.4.1 使用System類 224
11.4.2 垃圾對象的回收 225
11.5 Date類 225
11.5.1 使用Date類 226
11.5.2 使用Calendar類 226
11.5.3 使用DateFormat類 227
11.5.4 使用SimpleDate
Format類 228
11.6 Math類 229
11.7 Random類 230
11.8 NumberFormat類 231
11.9 BigInteger類 232
11.10 BigDecimal類 233
11.11 複製對象 235
11.12 Arrays類 235
11.13 Comparable接口 236
11.13.1 Comparable接口
概述 236
11.13.2 使用Comparable
接口 238
11.13.3 使用Comparator
接口 238
11.14 Observable類和Observer
接口 239
11.15 正則表達式 241
11.15.1 正則表達式概述 241
11.15.2 Java中的正則
表達式類 242
11.15.3 使用Pattern類和
Matcher類 243
11.15.4 String類和正則
表達式 243
11.15.5 Java 9新增的正則
表達式方法 244
11.15.6 Java 11新特性:正則
表達式參數的局部
變數語法 245
11.16 Timer類和TimerTask類 245
11.16.1 Timer類 246
11.16.2 TimerTask類 246
11.17 技術解惑 247
11.17.1 StringBuffer和String的
異同 247
11.17.2 通過System類獲取本機
的全部環境屬性 247
11.17.3 分析對象的
生命周期 248
11.17.4 若未實現Comparable
接口會出現異常 248
11.17.5 正則表達式的好處 248
11.18 課後練習 249
第 12章 泛型 250
12.1 泛型概述 251
12.1.1 泛型的優點 251
12.1.2 類型檢查 251
12.1.3 使用泛型 253
12.2 泛型詳解 253
12.2.1 定義泛型接口和類 253
12.2.2 派生子類 254
12.2.3 並不存在泛型類 255
12.3 類型通配符 255
12.3.1 設定類型實參的上限 256
12.3.2 設定類型形參的上限 257
12.3.3 設定通配符的下限 258
12.4 泛型方法 258
12.5 泛型接口 260
12.6 泛型繼承 261
12.6.1 以泛型類為父類 261
12.6.2 以非泛型類為父類 262
12.7 強制類型轉換 263
12.8 擦除 263
12.8.1 擦除的定義 263
12.8.2 擦除帶來的問題 265
12.9 技術解惑 266
12.9.1 Java語言中泛型的
本質 266
12.9.2 泛型方法和類型通配符的
區別 267
12.9.3 泛型類的繼承規則 268
12.9.4 類型擦除和泛型特性
之間的聯繫 268
12.9.5 使用原則和注意事項 268
12.10 課後練習 268
第 13章 異常處理 270
13.1 異常概述 271
13.1.1 認識異常 271
13.1.2 Java提供的異常
處理類 271
13.2 異常處理方式 272
13.2.1 try…catch語句 272
13.2.2 處理多個異常 273
13.2.3 finally語句 274
13.2.4 訪問異常信息 275
13.3 拋出異常 276
13.3.1 使用throws拋出異常 276
13.3.2 使用throw拋出異常 278
13.4 自定義異常 279
13.4.1 Throwable類及其子類 279
13.4.2 使用Throwable類
自定義異常 281
13.5 Checked異常和Runtime異常的
區別 282
13.5.1 機制上的差異 282
13.5.2 邏輯上的差異 283
13.6 技術解惑 283
13.6.1 使用嵌套異常處理是更
合理的方法 283
13.6.2 區別throws關鍵字和
throw關鍵字 284
13.6.3 異常類的繼承關係 284
13.6.4 子類Error和
Exception 284
13.7 課後練習 284
第 14章 I/O檔案處理和流處理 285
14.1 Java I/O概述 286
14.2 File類 286
14.2.1 File類中的方法 286
14.2.2 使用File類操作檔案 287
14.3 RandomAccessFile類 290
14.3.1 RandomAccessFile類的
常用方法 290
14.3.2 使用
RandomAccessFile類 291
14.4 位元組流與字元流 292
14.4.1 位元組流類和字元流類 292
14.4.2 使用位元組流 292
14.4.3 使用字元流 296
14.5 位元組轉換流 299
14.6 記憶體操作流 299
14.7 管道流 301
14.8 列印流 302
14.8.1 列印流概述 302
14.8.2 使用列印流 303
14.9 System類 303
14.9.1 System.out 304
14.9.2 System.err 304
14.9.3 System.in 305
14.9.4 輸入/輸出重定向 305
14.10 BufferedReader類 307
14.10.1 BufferedReader類
概述 307
14.10.2 使用
BufferedReader類 308
14.11 Scanner類 309
14.11.1 Scanner類概述 310
14.11.2 使用Scanner類 310
14.12 數據操作流 312
14.12.1 DataOutputStream類 313
14.12.2 DataInputStream類 313
14.13 合併流 315
14.14 壓縮流 316
14.14.1 ZIP壓縮輸入/
輸出流概述 316
14.14.2 ZipOutputStream類 316
14.14.3 ZipFile類 319
14.14.4 ZipInputStream類 319
14.15 回退流 320
14.16 字元編碼 321
14.16.1 得到本機編碼 322
14.16.2 產生亂碼 322
14.17 對象序列化 323
14.17.1 Serializable接口 323
14.17.2 對象輸出流
ObjectOutputStream 324
14.17.3 對象輸入流
ObjectInputStream 324
14.17.4 Externalizable接口 325
14.17.5 關鍵字transient 326
14.17.6 序列化一組對象 327
14.18 Buffer類 328
14.18.1 Buffer類中的
主要方法 329
14.18.2 使用Buffer類 330
14.19 Channel類 331
14.20 使用流API 333
14.20.1 Java 8中的流 333
14.20.2 Java 9中新增的
Stream 335
14.21 使用try…with…resources
語句 337
14.21.1 try…with…resources
語句概述 337
14.21.2 try…with…resources的
改進(Java 9新增
功能) 338
14.22 技術解惑 341
14.22.1 使用File.separator
表示分隔設定 341
14.22.2 綜合演練創建和
刪除檔案 341
14.22.3 File類的複雜用法 342
14.22.4 位元組流和字元流的
區別 342
14.22.5 System.err和
System.out的選擇 344
14.22.6 使用I/O實現一個簡單的
選單效果 344
14.22.7 對象序列化和對象反
序列化操作時的版本
兼容性問題 345
14.22.8 不能讓所有的類都實現
Serializable接口 346
14.23 課後練習 346
第 15章 AWT的奇幻世界 347
15.1 GUI框架概述 348
15.1.1 AWT框架 348
15.1.2 Swing框架 348
15.1.3 JavaFX框架 348
15.2 AWT框架的結構 349
15.3 容器 350
15.3.1 容器概述 350
15.3.2 容器中的常用組件 351
15.4 布局管理器 352
15.4.1 FlowLayout布局 353
15.4.2 BorderLayout布局 353
15.4.3 GridLayout布局 355
15.4.4 GridBagLayout布局 356
15.4.5 CardLayout布局 356
15.4.6 BoxLayout布局
管理器 357
15.5 AWT中的常用組件 357
15.5.1 AWT組件概覽 358
15.5.2 使用組件 358
15.6 AWT中的對話框 360
15.6.1 AWT對話框概述 360
15.6.2 使用AWT對話框 360
15.7 使用圖像多解析度API 361
15.7.1 圖像多解析度概述 361
15.7.2 圖像多解析度API
詳解 361
15.7.3 圖像多解析度API
實戰 362
15.8 javax.imageio.plugins.tiff 364
15.8.1 ImageIO模組概述 364
15.8.2 TIFF接口 366
15.9 技術解惑 367
15.9.1 使用絕對定位 367
15.9.2 對事件處理模型的
簡化 368
15.9.3 使用AWT開發動畫 368
15.9.4 圖片縮放在現實中的
意義 368
15.9.5 AWT和Swing是窗體
編程的兩個主角 368
15.9.6 AWT中的選單組件不能
創建圖示選單 368
15.9.7 Java的事件模型 368
15.9.8 事件和事件監聽器 370
15.10 課後練習 372
第 16章 Swing 373
16.1 Swing概述 374
16.2 Swing的組件 375
16.2.1 Swing組件的層次
結構 375
16.2.2 Swing實現AWT
組件 376
16.3 拖放處理 380
16.4 實現進度條效果 381
16.4.1 創建一個進度條 381
16.4.2 使用ProgressMonitor創建
進度條對話框 383
16.5 技術解惑 383
16.5.1 貫穿Java開發的MVC
模式 383
16.5.2 Swing的優勢 383
16.5.3 使用JSlider和
BoundedRangeModel測試
滑動條效果 384
16.5.4 使用ListCellRenderer改變
窗體中列表項的外觀 385
16.6 課後練習 385
第 17章 JavaFX開發基礎 386
17.1 JavaFX概述 387
17.1.1 JavaFX的特色 387
17.1.2 安裝e(fx)clipse外掛程式 387
17.1.3 認識第 一個JavaFX
程式 389
17.2 JavaFX界面結構 389
17.2.1 窗體結構剖析 389
17.2.2 屬性綁定 391
17.2.3 樣式屬性和角度屬性 392
17.3 使用Color類設定顏色 393
17.3.1 設定顏色的方法 393
17.3.2 使用RGB方式設定
顏色 395
17.3.3 使用Web方式設定
顏色 395
17.4 繪製文字 396
17.4.1 Text包概述 396
17.4.2 繪製指定樣式的文本 397
17.5 繪製形狀 398
17.5.1 使用Line繪製線條 398
17.5.2 使用Rectangle
繪製矩形 399
17.5.3 使用Circle繪製圓 401
17.5.4 使用Ellipse繪製橢圓 402
17.5.5 使用Arc繪製圓弧 403
17.5.6 使用Polygon繪製
多邊形 404
17.5.7 使用Polyline繪製
折線 405
17.5.8 使用CubicCurve繪製三次
曲線 406
17.5.9 使用QuadCurve繪製二次
曲線 407
17.6 顯示圖像 408
17.6.1 使用Image顯示圖像 408
17.6.2 使用ImageView顯示
圖像 409
17.7 界面布局 410
17.7.1 使用Pane的畫布功能 411
17.7.2 使用StackPane實現特定
面板功能 412
17.7.3 使用FlowPane實現
序列放置 412
17.7.4 使用GridPane實現
格線布局 414
17.7.5 使用BorderPane實現
區域布局 415
17.7.6 使用HBox實現水平
布局 417
17.7.7 使用VBox實現垂直
布局 418
17.8 技術解惑 419
17.8.1 Swing、AWT和JavaFX的
區別 419
17.8.2 JavaFX的屬性類型 419
17.9 課後練習 420
第 18章 使用JavaFX UI組件 421
18.1 使用標籤組件 422
18.1.1 標籤屬性和方法 422
18.1.2 標籤組件實戰演練 423
18.2 使用按鈕組件 424
18.2.1 按鈕屬性和方法 424
18.2.2 按鈕組件實戰演練 425
18.3 使用複選框組件 426
18.3.1 複選框屬性和方法 426
18.3.2 複選框組件實戰演練 427
18.4 使用單選按鈕組件 428
18.4.1 單選按鈕屬性和方法 428
18.4.2 單選按鈕組件實戰
演練 429
18.5 使用文本框組件 430
18.5.1 文本框的屬性和方法 430
18.5.2 文本框組件實戰演練 431
18.6 使用文本域組件 432
18.6.1 文本域的屬性和方法 432
18.6.2 文本域組件實戰演練 432
18.7 使用選擇框組件 434
18.7.1 選擇框的屬性和方法 434
18.7.2 選擇框組件實戰演練 434
18.8 使用密碼框組件 435
18.8.1 密碼框的屬性和方法 435
18.8.2 密碼框組件實戰演練 436
18.9 使用組合框組件 437
18.9.1 組合框的屬性和方法 437
18.9.2 組合框實戰演練 438
18.10 使用列表視圖組件 439
18.10.1 列表視圖的屬性和
方法 439
18.10.2 列表視圖組件實戰
演練 440
18.11 使用滾動條組件 442
18.11.1 滾動條的屬性和
方法 442
18.11.2 滾動條組件實戰
演練 442
18.12 使用滑塊組件 444
18.12.1 滑塊的屬性和方法 444
18.12.2 滑塊組件實戰演連 445
18.13 使用樹視圖組件 446
18.13.1 樹視圖的屬性和
方法 446
18.13.2 樹視圖組件實戰
演練 447
18.14 使用進度組件 448
18.14.1 進度指示器 448
18.14.2 進度條 448
18.14.3 進度組件實戰演練 448
18.15 使用HTML編輯器組件 449
18.15.1 HTML編輯器組件
概述 450
18.15.2 HTML編輯器組件實戰
演練 450
18.16 使用選單組件 451
18.16.1 選單組件概述 451
18.16.2 創建選單欄 452
18.17 使用檔案選擇框組件 453
18.17.1 檔案選擇框概述 453
18.17.2 檔案選擇框組件
實戰演練 454
18.18 使用顏色選擇器組件 456
18.18.1 顏色選擇器概述 456
18.18.2 顏色選擇器組件
實戰演練 458
18.19 技術解惑 459
18.19.1 製作圓形按鈕 459
18.19.2 設定按鈕的內容 460
18.19.3 樹表視圖 460
18.20 課後練習 460
第 19章 JavaFX事件處理程式 461
19.1 JavaFX事件處理系統概述 462
19.1.1 Java的事件模型 462
19.1.2 JavaFX中的事件 462
19.1.3 事件處理機制的流程 463
19.1.4 事件處理 465
19.1.5 事件和事件源 465
19.2 使用快捷方法實現事件處理 467
19.2.1 快捷方法概述 467
19.2.2 處理按鈕事件 468
19.3 處理滑鼠事件 469
19.3.1 滑鼠事件概述 469
19.3.2 使用滑鼠事件 469
19.4 處理鍵盤事件 470
19.4.1 鍵盤事件概述 470
19.4.2 使用鍵盤事件 471
19.5 使用事件過濾器 472
19.5.1 註冊和移除事件
過濾器 472
19.5.2 使用事件過濾器 473
19.6 使用事件處理程式 475
19.6.1 註冊和移除事件
處理程式 475
19.6.2 使用事件處理程式 476
19.7 使用可觸摸設備的事件 477
19.7.1 手勢和觸摸事件 477
19.7.2 手勢事件實戰 478
19.8 技術解惑 483
19.8.1 實現滑鼠移到按鈕上
按鈕變大的效果 483
19.8.2 實現JavaFX綁定 483
19.9 課後練習 483
第 20章 JavaFX框架下的Web開發 484
20.1 JavaFX內嵌瀏覽器概述 485
20.2 使用WebView組件 486
20.2.1 WebView組件概述 486
20.2.2 WebView組件
實戰演練 487
20.3 使用WebEngine接口 488
20.3.1 WebEngine概述 488
20.3.2 在JavaFX中執行
JavaScript程式 489
20.3.3 在Web頁面中調用
JavaFX程式 492
20.3.4 實現彈出式視窗 493
20.4 管理Web歷史記錄 495
20.4.1 WebHistory概述 495
20.4.2 網頁瀏覽歷史記錄
實戰 495
20.5 使用CSS檔案 496
20.6 使用FXML 499
20.6.1 FXML概述 499
20.6.2 FXML實戰演練 500
20.7 技術解惑 504
20.7.1 JavaFX集合 504
20.7.2 使用標題面板 505
20.8 課後練習 505
第 21章 JavaFX框架下的多媒體開發 506
21.1 變換操作 507
21.1.1 變換概述 507
21.1.2 變換操作 507
21.2 動畫效果 510
21.2.1 過渡動畫 510
21.2.2 時間軸動畫 512
21.3 視覺特效 514
21.3.1 混合特效 514
21.3.2 發光特效 515
21.3.3 模糊特效 517
21.3.4 陰影特效 519
21.3.5 內陰影特效 520
21.3.6 倒影特效 522
21.3.7 光照特效 523
21.4 3D特效 524
21.4.1 JavaFX 3D概述 524
21.4.2 使用3D形狀 524
21.4.3 3D鏡頭 525
21.4.4 使用子場景 527
21.4.5 使用光照 529
21.4.6 使用材質 530
21.5 音頻和視頻 532
21.5.1 使用Media獲取獲得
媒體源 532
21.5.2 使用MediaPlayer播放並
控制媒體 532
21.5.3 使用MediaView
顯示視頻 533
21.5.4 控制播放的視頻演練 533
21.6 CSS API(Java 9新增功能) 535
21.6.1 使用傳統方式 535
21.6.2 使用Skin API 536
21.7 技術解惑 538
21.7.1 註冊一個事件
處理程式 538
21.7.2 注意場景背景圖的
問題 539
21.7.3 y-down坐標系和y-up
坐標系 539
21.8 課後練習 539
第 22章 資料庫編程 540
22.1 SQL基礎 541
22.1.1 數據定義 541
22.1.2 數據操縱 542
22.2 初識JDBC 544
22.2.1 JDBC API 544
22.2.2 JDBC驅動類型 544
22.2.3 JDBC的常用接口
和類 545
22.2.4 JDBC編程的一般
步驟 547
22.3 連線Access資料庫 549
22.3.1 Access資料庫概述 549
22.3.2 連線本地Access
資料庫 550
22.4 連線SQL Server資料庫 552
22.4.1 下載並安裝
SQL Sever 2016驅動 552
22.4.2 測試連線 553
22.4.3 獲取SQL Server資料庫中
指定的表 554
22.5 連線MySQL資料庫 555
22.5.1 下載並配置MySQL
驅動 555
22.5.2 將MySQL驅動載入到
Eclipse中 556
22.5.3 測試連線 557
22.6 技術解惑 557
22.6.1 連線池的功效 557
22.6.2 伺服器自帶連線池的
問題 557
22.6.3 連線池模型 559
22.6.4 數據模型、概念模型和
關係數據模型 559
22.6.5 資料庫系統的結構 560
22.7 課後練習 560
第 23章 網路與通信編程 561
23.1 Java中的網路包 562
23.1.1 InetAddress類 562
23.1.2 URLDecoder類和
URLEncoder類 562
23.1.3 URL類和
URLConnection類 563
23.1.4 實踐演練 564
23.2 TCP編程 567
23.2.1 使用ServerSocket 567
23.2.2 使用Socket 568
23.2.3 TCP中的多執行緒 569
23.3 UDP編程 572
23.3.1 使用DatagramSocket 572
23.3.2 使用MulticastSocket 574
23.4 代理伺服器 577
23.4.1 代理伺服器概述 577
23.4.2 使用Proxy創建
連線 578
23.4.3 使用ProxySelector
選擇代理伺服器 579
23.5 HTTP/2 Client API(Java 10的
改進) 581
23.5.1 孵化器模組usergrid
概述 581
23.5.2 HTTP/2 Client API
概述 582
23.5.3 處理HTTP請求 582
23.6 技術解惑 584
23.6.1 使用異常處理完善
程式 584
23.6.2 使用ServerSocketChannel
的弊端 584
23.6.3 體會複雜的
DatagramPacket 585
23.6.4 MulticastSocket類的
重要意義 585
23.6.5 繼承ProxySelector時需
要做的工作 585
23.6.6 代理服務無止境 585
23.6.7 生成jdk.incubator.httpclient
模組的Javadoc 586
23.7 課後練習 586
第 24章 多執行緒和進程 587
24.1 執行緒概述 588
24.1.1 執行緒與進程 588
24.1.2 執行緒的意義 588
24.1.3 Java的執行緒模型 589
24.2 創建執行緒 590
24.2.1 使用Thread類創建
執行緒 590
24.2.2 使用Runnable接口創建
執行緒 592
24.2.3 使用Thread.onSpinWait()
方法實現循環等待 593
24.3 執行緒的生命周期 594
24.3.1 執行緒的運行與停止 594
24.3.2 執行緒的掛起和喚醒 595
24.3.3 終止執行緒的3種
方法 596
24.3.4 執行緒的阻塞 597
24.3.5 執行緒的死亡 597
24.4 控制執行緒 598
24.4.1 使用join方法 599
24.4.2 慎重使用volatile
關鍵字 599
24.4.3 後台、讓步和睡眠 602
24.5 執行緒傳遞數據 603
24.5.1 向執行緒傳遞數據的
方法 603
24.5.2 執行緒中返回數據的
方法 605
24.6 進程 606
24.6.1 使用類ProcessBuilder 606
24.6.2 使用類Process 609
24.6.3 使用類ProcessHandle
(Java 9新增功能) 609
24.7 技術解惑 612
24.7.1 執行緒和函式的關係 612
24.7.2 在run方法中使用執行緒名
時產生的問題 612
24.7.3 繼承Thread類或實現
Runnable接口的比較 612
24.7.4 start()和run()的區別 613
24.7.5 使用sleep()方法的
注意事項 613
24.7.6 執行緒的優先權 613
24.7.7 如何確定發生死鎖 613
24.7.8 關鍵字synchronized和
volatile的區別 614
24.7.9 sleep()方法和yield()
方法的區別 614
24.7.10 分析Swing的多執行緒
死鎖問題 614
24.8 課後練習 615
第 25章 大數據綜合實戰:爬取並分析
知乎用戶信息 616
25.1 系統設計 617
25.1.1 系統目標 617
25.1.2 系統功能結構 617
25.2 資料庫設計 618
25.3 知乎爬蟲請求分析 618
25.4 系統資料夾組織結構 621
25.5 系統詳細運行流程圖 622
25.6 具體編碼 623
25.6.1 核心模組代碼的編寫 623
25.6.2 知乎抓取功能模組 629
25.6.3 代理功能模組 637
25.7 知乎用戶大數據分析 645
25.7.1 數據展示模組 645
25.7.2 運行展示 646
25.8 項目開發難點分析 648
2.6.5 main()方法的問題 27
2.6.6 注意空格問題 27
2.6.7 到底用不用IDE工具 27
2.6.8 區分JRE和JDK 28
2.7 課後練習 28
第3章 Java語法基礎 29
3.1 常量和變數 30
3.1.1 常量 30
3.1.2 變數 31
3.2 數據類型 33
3.2.1 為什麼要使用數據類型 33
3.2.2 簡單數據類型的
取值範圍 34
3.2.3 字元型 34
3.2.4 整型 35
3.2.5 浮點型 36
3.2.6 布爾型 37
3.3 運算符 38
3.3.1 算術運算符 38
3.3.2 關係運算符和邏輯
運算符 41
3.3.3 位邏輯運算符 42
3.3.4 條件運算符 43
3.3.5 賦值運算符 44
3.3.6 運算符的優先權 45
3.4 字元串 46
3.4.1 字元串的初始化 46
3.4.2 String類 47
3.4.3 StringBuffer類 49
3.5 類型轉換 50
3.5.1 自動類型轉換 50
3.5.2 強制類型轉換 51
3.6 Java 11新特性:新增的
String函式 51
3.7 技術解惑 54
3.7.1 定義常量時的注意事項 54
3.7.2 char類型中單引號的
意義 54
3.7.3 正無窮和負無窮的
問題 55
3.7.4 移位運算符的限制 55
3.8 課後練習 55
第4章 條件語句 56
4.1 if語句詳解 57
4.1.1 if語句 57
4.1.2 if語句的延伸 58
4.1.3 有多個條件判斷的if
語句 59
4.2 switch語句詳解 60
4.2.1 switch語句的形式 61
4.2.2 無break的情況 62
4.2.3 case語句後沒有
執行語句 62
4.2.4 default可以不在末尾 63
4.3 條件語句演練 64
4.3.1 正確使用switch語句 64
4.3.2 正確使用if語句 64
4.3.3 switch語句的執行順序 65
4.4 技術解惑 66
4.4.1 if…else語句的意義 66
4.4.2 使用switch語句時的
幾個注意事項 67
4.4.3 switch語句和if…else if
語句的選擇 68
4.5 課後練習 68
第5章 循環語句 69
5.1 循環語句 70
5.1.1 for循環 70
5.1.2 while循環語句 72
7.8.1 軟體包的定義 110
7.8.2 在Eclipse中定義
軟體包 110
7.8.3 在程式里插入軟體包 111
7.9 技術解惑 112
7.9.1 在Java中傳遞引用類型的
實質 112
7.9.2 掌握this的好處 113
7.9.3 推出抽象方法的原因 114
7.9.4 使用抽象類的時機 114
7.9.5 static修飾的作用 115
7.9.6 數組內是同一類型的
數據 115
7.10 課後練習 115
第8章 Java的面向對象(中) 116
8.1 類的繼承 117
8.1.1 繼承的定義 117
8.1.2 父類和子類 117
8.1.3 調用父類的構造方法 118
8.1.4 訪問父類的屬性和方法 119
8.1.5 多重繼承 120
8.1.6 重寫父類的方法 121
8.2 重寫和重載 122
8.2.1 重寫 122
8.2.2 重載 124
8.3 隱藏和封裝 125
8.3.1 Java中的封裝 125
8.3.2 訪問控制符 125
8.3.3 Java中的包 127
8.3.4 import 129
8.4 接口 129
8.4.1 定義接口 129
8.4.2 接口裡的常量和方法 130
8.4.3 引用接口 132
8.4.4 接口間的繼承 134
8.4.5 接口的私有方法 134
8.5 技術解惑 137
8.5.1 重寫方法的注意事項 137
8.5.2 重寫和重載的區別 138
8.5.3 舉例理解類的意義 138
8.5.4 Java包的一些規則 138
8.5.5 探討package和import
機制 138
8.5.6 接口編程的機理 139
8.5.7 接口和抽象類的區別和
聯繫 140
8.6 課後練習 141
第9章 Java的面向對象(下) 142
9.1 構造器詳解 143
9.1.1 初始化構造器 143
9.1.2 構造器重載 143
9.1.3 調用父類構造器 144
9.2 多態 145
9.2.1 多態的定義 145
9.2.2 演示Java中的多態 147
9.2.3 使用instanceof運算符 148
9.3 引用類型 149
9.3.1 4種引用類型 150
9.3.2 引用變數的強制
類型轉換 151
9.4 組合 152
9.5 初始化塊 154
9.5.1 初始化塊概述 154
9.5.2 靜態初始化塊 155
9.6 包裝類 156
9.7 final修飾符 157
9.7.1 用final修飾變數 158
9.7.2 final方法 159
9.8 內部類 160
9.8.1 內部類概述 160
9.8.2 非靜態內部類 160
9.8.3 成員內部類 162
9.8.4 局部內部類 162
9.8.5 靜態內部類 163
9.9 匿名類 163
9.9.1 定義匿名類 164
9.9.2 匿名內部類 164
9.9.3 匿名內部類使用final
形參 165
9.10 枚舉類 166
9.10.1 枚舉類的方法 166
9.10.2 模擬枚舉類 167
9.10.3 枚舉類型 168
9.11 Java 11新特性:嵌套訪問
控制 170
9.12 技術解惑 172
9.12.1 構造器和方法的區別 172
9.12.2 this在構造器中的
作用 173
9.12.3 子類構造器調用父類
構造器的情況 173
9.12.4 強制類型轉換的
局限性 174
9.12.5 繼承和組合的選擇 174
9.12.6 發生異常的原因 174
9.12.7 用final修飾基本類型和
引用類型變數之間的
區別 174
9.12.8 類的4種許可權 174
9.12.9 手工實現枚舉類的
缺點 175
9.13 課後練習 175
第 10章 集合 176
10.1 Java中的集合類 177
10.2 Collection接口和Iterator
接口 178
10.2.1 Collection接口概述 178
10.2.2 Iterator接口概述 179
10.2.3 使用Collection接口中的
方法來操作集合里的
元素 179
10.3 Set接口 180
10.3.1 Set接口概述 180
10.3.2 使用HashSet 183
10.3.3 使用TreeSet類 184
10.3.4 使用EnumSet類 186
10.4 List接口 188
10.4.1 List接口概述 188
10.4.2 根據索引操作集合內的
元素 190
10.4.3 使用ArrayList和
Vector類 191
10.5 Map接口 192
10.5.1 Map接口中的方法 192
10.5.2 Map接口中的
接口和類 193
10.5.3 使用HashMap和Hashtable
實現類 196
10.5.4 使用SortedMap接口和
TreeMap實現類 197
10.5.5 使用WeakHashMap類 199
10.5.6 使用IdentityHash
Map類 200
10.5.7 使用EnumMap類 201
10.6 Queue接口 201
10.6.1 LinkedList類 202
10.6.2 PriorityQueue類 203
10.7 集合工具類Collections 203
10.7.1 排序操作 203
10.7.2 查找和替換操作 204
10.8 其他集合類 205
10.8.1 Stack類 205
10.8.2 屬性類Properties 206
10.9 創建不可變的List、Set和
Map(Java 9新增功能) 209
10.9.1 Java 9以前版本的
解決方案 209
10.9.2 Java 9版本的解決
方案 209
10.10 使用var類型推斷(Java 10
新增功能) 211
10.11 技術解惑 212
10.11.1 Collection集合元素的
改變問題 212
10.11.2 深入理解HashSet 212
10.11.3 使用類EnumSet的
注意事項 213
10.11.4 ArrayList和Vector的
區別 213
10.11.5 TreeMap判斷兩個元素
相等的標準 213
10.11.6 分析Map類的性能 213
10.11.7 LinkedList、ArrayList、
Vector的性能問題 214
10.11.8 用swap()方法交換集合
中兩個位置的內容 214
10.12 課後練習 214
第 11章 常用的類庫 215
11.1 StringBuffer類 216
11.1.1 StringBuffer類概述 216
11.1.2 使用StringBuffer類 216
11.2 Runtime類 218
11.2.1 Runtime類概述 218
11.2.2 使用Runtime類 218
11.3 程式國際化 220
11.3.1 國際化基礎 220
11.3.2 Locale類 221
11.3.3 ResourceBundle類 221
11.3.4 處理動態文本 222
11.3.5 使用類代替資源檔案 223
11.4 System類 224
11.4.1 使用System類 224
11.4.2 垃圾對象的回收 225
11.5 Date類 225
11.5.1 使用Date類 226
11.5.2 使用Calendar類 226
11.5.3 使用DateFormat類 227
11.5.4 使用SimpleDate
Format類 228
11.6 Math類 229
11.7 Random類 230
11.8 NumberFormat類 231
11.9 BigInteger類 232
11.10 BigDecimal類 233
11.11 複製對象 235
11.12 Arrays類 235
11.13 Comparable接口 236
11.13.1 Comparable接口
概述 236
11.13.2 使用Comparable
接口 238
11.13.3 使用Comparator
接口 238
11.14 Observable類和Observer
接口 239
11.15 正則表達式 241
11.15.1 正則表達式概述 241
11.15.2 Java中的正則
表達式類 242
11.15.3 使用Pattern類和
Matcher類 243
11.15.4 String類和正則
表達式 243
11.15.5 Java 9新增的正則
表達式方法 244
11.15.6 Java 11新特性:正則
表達式參數的局部
變數語法 245
11.16 Timer類和TimerTask類 245
11.16.1 Timer類 246
11.16.2 TimerTask類 246
11.17 技術解惑 247
11.17.1 StringBuffer和String的
異同 247
11.17.2 通過System類獲取本機
的全部環境屬性 247
11.17.3 分析對象的
生命周期 248
11.17.4 若未實現Comparable
接口會出現異常 248
11.17.5 正則表達式的好處 248
11.18 課後練習 249
第 12章 泛型 250
12.1 泛型概述 251
12.1.1 泛型的優點 251
12.1.2 類型檢查 251
12.1.3 使用泛型 253
12.2 泛型詳解 253
12.2.1 定義泛型接口和類 253
12.2.2 派生子類 254
12.2.3 並不存在泛型類 255
12.3 類型通配符 255
12.3.1 設定類型實參的上限 256
12.3.2 設定類型形參的上限 257
12.3.3 設定通配符的下限 258
12.4 泛型方法 258
12.5 泛型接口 260
12.6 泛型繼承 261
12.6.1 以泛型類為父類 261
12.6.2 以非泛型類為父類 262
12.7 強制類型轉換 263
12.8 擦除 263
12.8.1 擦除的定義 263
12.8.2 擦除帶來的問題 265
12.9 技術解惑 266
12.9.1 Java語言中泛型的
本質 266
12.9.2 泛型方法和類型通配符的
區別 267
12.9.3 泛型類的繼承規則 268
12.9.4 類型擦除和泛型特性
之間的聯繫 268
12.9.5 使用原則和注意事項 268
12.10 課後練習 268
第 13章 異常處理 270
13.1 異常概述 271
13.1.1 認識異常 271
13.1.2 Java提供的異常
處理類 271
13.2 異常處理方式 272
13.2.1 try…catch語句 272
13.2.2 處理多個異常 273
13.2.3 finally語句 274
13.2.4 訪問異常信息 275
13.3 拋出異常 276
13.3.1 使用throws拋出異常 276
13.3.2 使用throw拋出異常 278
13.4 自定義異常 279
13.4.1 Throwable類及其子類 279
13.4.2 使用Throwable類
自定義異常 281
13.5 Checked異常和Runtime異常的
區別 282
13.5.1 機制上的差異 282
13.5.2 邏輯上的差異 283
13.6 技術解惑 283
13.6.1 使用嵌套異常處理是更
合理的方法 283
13.6.2 區別throws關鍵字和
throw關鍵字 284
13.6.3 異常類的繼承關係 284
13.6.4 子類Error和
Exception 284
13.7 課後練習 284
第 14章 I/O檔案處理和流處理 285
14.1 Java I/O概述 286
14.2 File類 286
14.2.1 File類中的方法 286
14.2.2 使用File類操作檔案 287
14.3 RandomAccessFile類 290
14.3.1 RandomAccessFile類的
常用方法 290
14.3.2 使用
RandomAccessFile類 291
14.4 位元組流與字元流 292
14.4.1 位元組流類和字元流類 292
14.4.2 使用位元組流 292
14.4.3 使用字元流 296
14.5 位元組轉換流 299
14.6 記憶體操作流 299
14.7 管道流 301
14.8 列印流 302
14.8.1 列印流概述 302
14.8.2 使用列印流 303
14.9 System類 303
14.9.1 System.out 304
14.9.2 System.err 304
14.9.3 System.in 305
14.9.4 輸入/輸出重定向 305
14.10 BufferedReader類 307
14.10.1 BufferedReader類
概述 307
14.10.2 使用
BufferedReader類 308
14.11 Scanner類 309
14.11.1 Scanner類概述 310
14.11.2 使用Scanner類 310
14.12 數據操作流 312
14.12.1 DataOutputStream類 313
14.12.2 DataInputStream類 313
14.13 合併流 315
14.14 壓縮流 316
14.14.1 ZIP壓縮輸入/
輸出流概述 316
14.14.2 ZipOutputStream類 316
14.14.3 ZipFile類 319
14.14.4 ZipInputStream類 319
14.15 回退流 320
14.16 字元編碼 321
14.16.1 得到本機編碼 322
14.16.2 產生亂碼 322
14.17 對象序列化 323
14.17.1 Serializable接口 323
14.17.2 對象輸出流
ObjectOutputStream 324
14.17.3 對象輸入流
ObjectInputStream 324
14.17.4 Externalizable接口 325
14.17.5 關鍵字transient 326
14.17.6 序列化一組對象 327
14.18 Buffer類 328
14.18.1 Buffer類中的
主要方法 329
14.18.2 使用Buffer類 330
14.19 Channel類 331
14.20 使用流API 333
14.20.1 Java 8中的流 333
14.20.2 Java 9中新增的
Stream 335
14.21 使用try…with…resources
語句 337
14.21.1 try…with…resources
語句概述 337
14.21.2 try…with…resources的
改進(Java 9新增
功能) 338
14.22 技術解惑 341
14.22.1 使用File.separator
表示分隔設定 341
14.22.2 綜合演練創建和
刪除檔案 341
14.22.3 File類的複雜用法 342
14.22.4 位元組流和字元流的
區別 342
14.22.5 System.err和
System.out的選擇 344
14.22.6 使用I/O實現一個簡單的
選單效果 344
14.22.7 對象序列化和對象反
序列化操作時的版本
兼容性問題 345
14.22.8 不能讓所有的類都實現
Serializable接口 346
14.23 課後練習 346
第 15章 AWT的奇幻世界 347
15.1 GUI框架概述 348
15.1.1 AWT框架 348
15.1.2 Swing框架 348
15.1.3 JavaFX框架 348
15.2 AWT框架的結構 349
15.3 容器 350
15.3.1 容器概述 350
15.3.2 容器中的常用組件 351
15.4 布局管理器 352
15.4.1 FlowLayout布局 353
15.4.2 BorderLayout布局 353
15.4.3 GridLayout布局 355
15.4.4 GridBagLayout布局 356
15.4.5 CardLayout布局 356
15.4.6 BoxLayout布局
管理器 357
15.5 AWT中的常用組件 357
15.5.1 AWT組件概覽 358
15.5.2 使用組件 358
15.6 AWT中的對話框 360
15.6.1 AWT對話框概述 360
15.6.2 使用AWT對話框 360
15.7 使用圖像多解析度API 361
15.7.1 圖像多解析度概述 361
15.7.2 圖像多解析度API
詳解 361
15.7.3 圖像多解析度API
實戰 362
15.8 javax.imageio.plugins.tiff 364
15.8.1 ImageIO模組概述 364
15.8.2 TIFF接口 366
15.9 技術解惑 367
15.9.1 使用絕對定位 367
15.9.2 對事件處理模型的
簡化 368
15.9.3 使用AWT開發動畫 368
15.9.4 圖片縮放在現實中的
意義 368
15.9.5 AWT和Swing是窗體
編程的兩個主角 368
15.9.6 AWT中的選單組件不能
創建圖示選單 368
15.9.7 Java的事件模型 368
15.9.8 事件和事件監聽器 370
15.10 課後練習 372
第 16章 Swing 373
16.1 Swing概述 374
16.2 Swing的組件 375
16.2.1 Swing組件的層次
結構 375
16.2.2 Swing實現AWT
組件 376
16.3 拖放處理 380
16.4 實現進度條效果 381
16.4.1 創建一個進度條 381
16.4.2 使用ProgressMonitor創建
進度條對話框 383
16.5 技術解惑 383
16.5.1 貫穿Java開發的MVC
模式 383
16.5.2 Swing的優勢 383
16.5.3 使用JSlider和
BoundedRangeModel測試
滑動條效果 384
16.5.4 使用ListCellRenderer改變
窗體中列表項的外觀 385
16.6 課後練習 385
第 17章 JavaFX開發基礎 386
17.1 JavaFX概述 387
17.1.1 JavaFX的特色 387
17.1.2 安裝e(fx)clipse外掛程式 387
17.1.3 認識第 一個JavaFX
程式 389
17.2 JavaFX界面結構 389
17.2.1 窗體結構剖析 389
17.2.2 屬性綁定 391
17.2.3 樣式屬性和角度屬性 392
17.3 使用Color類設定顏色 393
17.3.1 設定顏色的方法 393
17.3.2 使用RGB方式設定
顏色 395
17.3.3 使用Web方式設定
顏色 395
17.4 繪製文字 396
17.4.1 Text包概述 396
17.4.2 繪製指定樣式的文本 397
17.5 繪製形狀 398
17.5.1 使用Line繪製線條 398
17.5.2 使用Rectangle
繪製矩形 399
17.5.3 使用Circle繪製圓 401
17.5.4 使用Ellipse繪製橢圓 402
19.3.2 使用滑鼠事件 469
19.4 處理鍵盤事件 470
19.4.1 鍵盤事件概述 470
19.4.2 使用鍵盤事件 471
19.5 使用事件過濾器 472
19.5.1 註冊和移除事件
過濾器 472
19.5.2 使用事件過濾器 473
19.6 使用事件處理程式 475
19.6.1 註冊和移除事件
處理程式 475
19.6.2 使用事件處理程式 476
19.7 使用可觸摸設備的事件 477
19.7.1 手勢和觸摸事件 477
19.7.2 手勢事件實戰 478
19.8 技術解惑 483
19.8.1 實現滑鼠移到按鈕上
按鈕變大的效果 483
19.8.2 實現JavaFX綁定 483
19.9 課後練習 483
第 20章 JavaFX框架下的Web開發 484
20.1 JavaFX內嵌瀏覽器概述 485
20.2 使用WebView組件 486
20.2.1 WebView組件概述 486
20.2.2 WebView組件
實戰演練 487
20.3 使用WebEngine接口 488
20.3.1 WebEngine概述 488
20.3.2 在JavaFX中執行
JavaScript程式 489
20.3.3 在Web頁面中調用
JavaFX程式 492
20.3.4 實現彈出式視窗 493
20.4 管理Web歷史記錄 495
20.4.1 WebHistory概述 495
20.4.2 網頁瀏覽歷史記錄
實戰 495
20.5 使用CSS檔案 496
20.6 使用FXML 499
20.6.1 FXML概述 499
20.6.2 FXML實戰演練 500
20.7 技術解惑 504
20.7.1 JavaFX集合 504
20.7.2 使用標題面板 505
20.8 課後練習 505
第 21章 JavaFX框架下的多媒體開發 506
21.1 變換操作 507
21.1.1 變換概述 507
21.1.2 變換操作 507
21.2 動畫效果 510
21.2.1 過渡動畫 510
21.2.2 時間軸動畫 512
21.3 視覺特效 514
21.3.1 混合特效 514
21.3.2 發光特效 515
21.3.3 模糊特效 517
21.3.4 陰影特效 519
21.3.5 內陰影特效 520
21.3.6 倒影特效 522
21.3.7 光照特效 523
21.4 3D特效 524
21.4.1 JavaFX 3D概述 524
21.4.2 使用3D形狀 524
21.4.3 3D鏡頭 525
21.4.4 使用子場景 527
21.4.5 使用光照 529
21.4.6 使用材質 530
21.5 音頻和視頻 532
21.5.1 使用Media獲取獲得
媒體源 532
21.5.2 使用MediaPlayer播放並
控制媒體 532
21.5.3 使用MediaView
顯示視頻 533
21.5.4 控制播放的視頻演練 533
21.6 CSS API(Java 9新增功能) 535
21.6.1 使用傳統方式 535
21.6.2 使用Skin API 536
21.7 技術解惑 538
21.7.1 註冊一個事件
處理程式 538
21.7.2 注意場景背景圖的
問題 539
21.7.3 y-down坐標系和y-up
坐標系 539
21.8 課後練習 539
第 22章 資料庫編程 540
22.1 SQL基礎 541
22.1.1 數據定義 541
22.1.2 數據操縱 542
22.2 初識JDBC 544
22.2.1 JDBC API 544
22.2.2 JDBC驅動類型 544
22.2.3 JDBC的常用接口
和類 545
22.2.4 JDBC編程的一般
步驟 547
22.3 連線Access資料庫 549
22.3.1 Access資料庫概述 549
22.3.2 連線本地Access
資料庫 550
22.4 連線SQL Server資料庫 552
22.4.1 下載並安裝
SQL Sever 2016驅動 552
22.4.2 測試連線 553
22.4.3 獲取SQL Server資料庫中
指定的表 554
22.5 連線MySQL資料庫 555
22.5.1 下載並配置MySQL
驅動 555
22.5.2 將MySQL驅動載入到
Eclipse中 556
22.5.3 測試連線 557
22.6 技術解惑 557
22.6.1 連線池的功效 557
22.6.2 伺服器自帶連線池的
問題 557
22.6.3 連線池模型 559
22.6.4 數據模型、概念模型和
關係數據模型 559
22.6.5 資料庫系統的結構 560
22.7 課後練習 560
第 23章 網路與通信編程 561
23.1 Java中的網路包 562
23.1.1 InetAddress類 562
23.1.2 URLDecoder類和
URLEncoder類 562
23.1.3 URL類和
URLConnection類 563
23.1.4 實踐演練 564
23.2 TCP編程 567
23.2.1 使用ServerSocket 567
23.2.2 使用Socket 568
23.2.3 TCP中的多執行緒 569
23.3 UDP編程 572
23.3.1 使用DatagramSocket 572
23.3.2 使用MulticastSocket 574
23.4 代理伺服器 577
23.4.1 代理伺服器概述 577
23.4.2 使用Proxy創建
連線 578
23.4.3 使用ProxySelector
選擇代理伺服器 579
23.5 HTTP/2 Client API(Java 10的
改進) 581
23.5.1 孵化器模組usergrid
概述 581
23.5.2 HTTP/2 Client API
概述 582
23.5.3 處理HTTP請求 582
23.6 技術解惑 584
23.6.1 使用異常處理完善
程式 584
23.6.2 使用ServerSocketChannel
的弊端 584
23.6.3 體會複雜的
DatagramPacket 585
23.6.4 MulticastSocket類的
重要意義 585
23.6.5 繼承ProxySelector時需
要做的工作 585
23.6.6 代理服務無止境 585
23.6.7 生成jdk.incubator.httpclient
模組的Javadoc 586
23.7 課後練習 586
第 24章 多執行緒和進程 587
24.1 執行緒概述 588
24.1.1 執行緒與進程 588
24.1.2 執行緒的意義 588
24.1.3 Java的執行緒模型 589
24.2 創建執行緒 590
24.2.1 使用Thread類創建
執行緒 590
24.2.2 使用Runnable接口創建
執行緒 592
24.2.3 使用Thread.onSpinWait()
方法實現循環等待 593
24.3 執行緒的生命周期 594
24.3.1 執行緒的運行與停止 594
24.3.2 執行緒的掛起和喚醒 595
24.3.3 終止執行緒的3種
方法 596
24.3.4 執行緒的阻塞 597
24.3.5 執行緒的死亡 597
24.4 控制執行緒 598
24.4.1 使用join方法 599
24.4.2 慎重使用volatile
關鍵字 599
24.4.3 後台、讓步和睡眠 602
24.5 執行緒傳遞數據 603
24.5.1 向執行緒傳遞數據的
方法 603
24.5.2 執行緒中返回數據的
方法 605
24.6 進程 606
24.6.1 使用類ProcessBuilder 606
24.6.2 使用類Process 609
24.6.3 使用類ProcessHandle
(Java 9新增功能) 609
24.7 技術解惑 612
24.7.1 執行緒和函式的關係 612
24.7.2 在run方法中使用執行緒名
時產生的問題 612
24.7.3 繼承Thread類或實現
Runnable接口的比較 612
24.7.4 start()和run()的區別 613
24.7.5 使用sleep()方法的
注意事項 613
24.7.6 執行緒的優先權 613
24.7.7 如何確定發生死鎖 613
24.7.8 關鍵字synchronized和
volatile的區別 614
24.7.9 sleep()方法和yield()
方法的區別 614
24.7.10 分析Swing的多執行緒
死鎖問題 614
24.8 課後練習 615
第 25章 大數據綜合實戰:爬取並分析
知乎用戶信息 616
25.1 系統設計 617
25.1.1 系統目標 617
25.1.2 系統功能結構 617
25.2 資料庫設計 618
25.3 知乎爬蟲請求分析 618
25.4 系統資料夾組織結構 621
25.5 系統詳細運行流程圖 622
25.6 具體編碼 623
25.6.1 核心模組代碼的編寫 623
25.6.2 知乎抓取功能模組 629
25.6.3 代理功能模組 637
25.7 知乎用戶大數據分析 645
25.7.1 數據展示模組 645
25.7.2 運行展示 646
25.8 項目開發難點分析 648