本書專門介紹Java編程,主要內容包括:Java基礎知識、Java語法基礎、條件語句、循環(huán)語句、數組、Java面向對象編程、集合、常用的類庫、泛型、異常處理、I/O文件處理和流程、AWT、Swing、JavaFX基礎知識、UI組件、事件處理程序、基于JavaFX框架的Web和多媒體開發(fā)、數據庫編程、網絡與通信編程、多線程和進程等。本書適合Java開發(fā)人員閱讀,也適合計算機相關專業(yè)的師生閱讀。
Java是一門神奇的編程語言,一直雄踞各編程語言排行榜的榜首,用它開發(fā)的軟件遍布各行各業(yè)。本書作為一本Java的入門書籍,其豐富的配套資源讓一樣的編程語言有不一樣的學法: ·770 個實例,使讀者有更多的實踐演練機會 ·300 多個拓展實例,真正地做到舉一反三 ·2000 多分鐘的視頻講解,幫助讀者降低學習難度 ·100 多個技術解惑 ,破解學習的難點 與市面上同類圖書相比,我們這本書根據讀者的學習習慣、結合程序設計專業(yè)的教學特點,以技術講解 范例演練技術解惑貫穿全書,幫助零基礎讀者全面掌握Java 語言開發(fā)。 ● 技術講解:詳細介紹Java 9、Java 10 和Java 11 的新特性和各個知識點 ● 范例演練:1070 多個實例, 讓讀者在實踐中學會Java 語言 ● 技術解惑:把容易混淆的概念單獨講解和剖析,幫助讀者繞過學習中的陷阱 QQ 群 網站論壇實現教學互動,形成互幫互學的朋友圈 ● 網站論壇:作者答疑/學習輔導/ PPT 資源下載 ● 答疑QQ 群:疑惑快速解答/和作者直接交流 另外,我們這本書在內容和服務上,有以下優(yōu)勢: 1.提供100個提高程序性能的技巧,讓讀者少走彎路; 2.增加課后練習模塊 ,鞏固讀者所學內容; 3.1本書的內容,3本書的容量,讓讀者買得值,學得會; 4.按照Java10新版本寫作,讓讀者真正和現實項目結合起來; 5.全視頻講解,不會的地方看視頻更容易; 6.不定期開設輔導讀者的視頻課,學習更高效。
扶松柏,上海大學計算機科學技術學院碩士,通信工程博士,精通Java、C語言、C 程序開發(fā),擅長底層技術和應用程序的結合。具有豐富的Java開發(fā)經驗和編程心得。
目 錄
第 1章 計算機基礎和Java開發(fā)入門 1
1.1 計算機基礎 2
1.1.1 中央處理器 2
1.1.2 比特和字節(jié) 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開發(fā)環(huán)境 9
2.1.1 安裝JDK 9
2.1.2 配置開發(fā)環(huán)境
Windows 7 11
2.1.3 配置開發(fā)環(huán)境
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源文件的
命名規(guī)則 26
2.6.2 忽視系統(tǒng)文件的擴展名 26
2.6.3 環(huán)境變量的問題 26
2.6.4 大小寫的問題 27
2.6.5 main()方法的問題 27
2.6.6 注意空格問題 27
2.6.7 到底用不用IDE工具 27
2.6.8 區(qū)分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 運算符的優(yōu)先級 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語句后沒有
執(zhí)行語句 62
4.2.4 default可以不在末尾 63
4.3 條件語句演練 64
4.3.1 正確使用switch語句 64
4.3.2 正確使用if語句 64
4.3.3 switch語句的執(zhí)行順序 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章 循環(huán)語句 69
5.1 循環(huán)語句 70
5.1.1 for循環(huán) 70
5.1.2 while循環(huán)語句 72
5.1.3 do…while循環(huán)語句 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循環(huán)的技巧 77
5.3.2 跳轉語句的選擇技巧 78
5.4 課后練習 79
第6章 數組 80
6.1 簡單的一維數組 81
6.1.1 聲明一維數組 81
6.1.2 創(chuàng)建一維數組 81
6.1.3 初始化一維數組 82
6.2 二維數組 83
6.2.1 聲明二維數組 83
6.2.2 創(chuàng)建二維數組 83
6.2.3 初始化二維數組 84
6.3 三維數組 85
6.3.1 聲明三維數組 86
6.3.2 創(chuàng)建三維數組的方法 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 動態(tài)初始化數組的規(guī)則 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 創(chuàng)建類 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 創(chuàng)建和使用對象 106
7.6.2 使用靜態(tài)變量和
靜態(tài)方法 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 重寫和重載的區(qū)別 138
8.5.3 舉例理解類的意義 138
8.5.4 Java包的一些規(guī)則 138
8.5.5 探討package和import
機制 138
8.5.6 接口編程的機理 139
8.5.7 接口和抽象類的區(qū)別和
聯系 140
8.6 課后練習 141
第9章 Java的面向對象(下) 142
9.1 構造器詳解 143
9.1.1 初始化構造器 143
9.1.2 構造器重載 143
9.1.3 調用父類構造器 144
9.2 多態(tài) 145
9.2.1 多態(tài)的定義 145
9.2.2 演示Java中的多態(tài) 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 靜態(tài)初始化塊 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 非靜態(tài)內部類 160
9.8.3 成員內部類 162
9.8.4 局部內部類 162
9.8.5 靜態(tài)內部類 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 構造器和方法的區(qū)別 172
9.12.2 this在構造器中的
作用 173
9.12.3 子類構造器調用父類
構造器的情況 173
9.12.4 強制類型轉換的
局限性 174
9.12.5 繼承和組合的選擇 174
9.12.6 發(fā)生異常的原因 174
9.12.7 用final修飾基本類型和
引用類型變量之間的
區(qū)別 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 創(chuàng)建不可變的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的
區(qū)別 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 處理動態(tài)文本 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類獲取本機
的全部環(huán)境屬性 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 泛型的優(yōu)點 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 泛型方法和類型通配符的
區(qū)別 267
12.9.3 泛型類的繼承規(guī)則 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異常的
區(qū)別 282
13.5.1 機制上的差異 282
13.5.2 邏輯上的差異 283
13.6 技術解惑 283
13.6.1 使用嵌套異常處理是更
合理的方法 283
13.6.2 區(qū)別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 字節(jié)流與字符流 292
14.4.1 字節(jié)流類和字符流類 292
14.4.2 使用字節(jié)流 292
14.4.3 使用字符流 296
14.5 字節(jié)轉換流 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 綜合演練創(chuàng)建和
刪除文件 341
14.22.3 File類的復雜用法 342
14.22.4 字節(jié)流和字符流的
區(qū)別 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
實戰(zhàn) 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開發(fā)動畫 368
15.9.4 圖片縮放在現實中的
意義 368
15.9.5 AWT和Swing是窗體
編程的兩個主角 368
15.9.6 AWT中的菜單組件不能
創(chuàng)建圖標菜單 368
15.9.7 Java的事件模型 368
15.9.8 事件和事件監(jiān)聽器 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 創(chuàng)建一個進度條 381
16.4.2 使用ProgressMonitor創(chuàng)建
進度條對話框 383
16.5 技術解惑 383
16.5.1 貫穿Java開發(fā)的MVC
模式 383
16.5.2 Swing的優(yōu)勢 383
16.5.3 使用JSlider和
BoundedRangeModel測試
滑動條效果 384
16.5.4 使用ListCellRenderer改變
窗體中列表項的外觀 385
16.6 課后練習 385
第 17章 JavaFX開發(fā)基礎 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實現
區(qū)域布局 415
17.7.6 使用HBox實現水平
布局 417
17.7.7 使用VBox實現垂直
布局 418
17.8 技術解惑 419
17.8.1 Swing、AWT和JavaFX的
區(qū)別 419
17.8.2 JavaFX的屬性類型 419
17.9 課后練習 420
第 18章 使用JavaFX UI組件 421
18.1 使用標簽組件 422
18.1.1 標簽屬性和方法 422
18.1.2 標簽組件實戰(zhàn)演練 423
18.2 使用按鈕組件 424
18.2.1 按鈕屬性和方法 424
18.2.2 按鈕組件實戰(zhàn)演練 425
18.3 使用復選框組件 426
18.3.1 復選框屬性和方法 426
18.3.2 復選框組件實戰(zhàn)演練 427
18.4 使用單選按鈕組件 428
18.4.1 單選按鈕屬性和方法 428
18.4.2 單選按鈕組件實戰(zhàn)
演練 429
18.5 使用文本框組件 430
18.5.1 文本框的屬性和方法 430
18.5.2 文本框組件實戰(zhàn)演練 431
18.6 使用文本域組件 432
18.6.1 文本域的屬性和方法 432
18.6.2 文本域組件實戰(zhàn)演練 432
18.7 使用選擇框組件 434
18.7.1 選擇框的屬性和方法 434
18.7.2 選擇框組件實戰(zhàn)演練 434
18.8 使用密碼框組件 435
18.8.1 密碼框的屬性和方法 435
18.8.2 密碼框組件實戰(zhàn)演練 436
18.9 使用組合框組件 437
18.9.1 組合框的屬性和方法 437
18.9.2 組合框實戰(zhàn)演練 438
18.10 使用列表視圖組件 439
18.10.1 列表視圖的屬性和
方法 439
18.10.2 列表視圖組件實戰(zhàn)
演練 440
18.11 使用滾動條組件 442
18.11.1 滾動條的屬性和
方法 442
18.11.2 滾動條組件實戰(zhàn)
演練 442
18.12 使用滑塊組件 444
18.12.1 滑塊的屬性和方法 444
18.12.2 滑塊組件實戰(zhàn)演連 445
18.13 使用樹視圖組件 446
18.13.1 樹視圖的屬性和
方法 446
18.13.2 樹視圖組件實戰(zhàn)
演練 447
18.14 使用進度組件 448
18.14.1 進度指示器 448
18.14.2 進度條 448
18.14.3 進度組件實戰(zhàn)演練 448
18.15 使用HTML編輯器組件 449
18.15.1 HTML編輯器組件
概述 450
18.15.2 HTML編輯器組件實戰(zhàn)
演練 450
18.16 使用菜單組件 451
18.16.1 菜單組件概述 451
18.16.2 創(chuàng)建菜單欄 452
18.17 使用文件選擇框組件 453
18.17.1 文件選擇框概述 453
18.17.2 文件選擇框組件
實戰(zhàn)演練 454
18.18 使用顏色選擇器組件 456
18.18.1 顏色選擇器概述 456
18.18.2 顏色選擇器組件
實戰(zhàn)演練 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事件處理系統(tǒng)概述 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 手勢事件實戰(zhàn) 478
19.8 技術解惑 483
19.8.1 實現鼠標移到按鈕上
按鈕變大的效果 483
19.8.2 實現JavaFX綁定 483
19.9 課后練習 483
第 20章 JavaFX框架下的Web開發(fā) 484
20.1 JavaFX內嵌瀏覽器概述 485
20.2 使用WebView組件 486
20.2.1 WebView組件概述 486
20.2.2 WebView組件
實戰(zhàn)演練 487
20.3 使用WebEngine接口 488
20.3.1 WebEngine概述 488
20.3.2 在JavaFX中執(zhí)行
JavaScript程序 489
20.3.3 在Web頁面中調用
JavaFX程序 492
20.3.4 實現彈出式窗口 493
20.4 管理Web歷史記錄 495
20.4.1 WebHistory概述 495
20.4.2 網頁瀏覽歷史記錄
實戰(zhàn) 495
20.5 使用CSS文件 496
20.6 使用FXML 499
20.6.1 FXML概述 499
20.6.2 FXML實戰(zhàn)演練 500
20.7 技術解惑 504
20.7.1 JavaFX集合 504
20.7.2 使用標題面板 505
20.8 課后練習 505
第 21章 JavaFX框架下的多媒體開發(fā) 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 發(fā)光特效 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 使用傳統(tǒng)方式 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 數據庫系統(tǒng)的結構 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創(chuàng)建
連接 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 創(chuàng)建線程 590
24.2.1 使用Thread類創(chuàng)建
線程 590
24.2.2 使用Runnable接口創(chuàng)建
線程 592
24.2.3 使用Thread.onSpinWait()
方法實現循環(huán)等待 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
。↗ava 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()的區(qū)別 613
24.7.5 使用sleep()方法的
注意事項 613
24.7.6 線程的優(yōu)先級 613
24.7.7 如何確定發(fā)生死鎖 613
24.7.8 關鍵字synchronized和
volatile的區(qū)別 614
24.7.9 sleep()方法和yield()
方法的區(qū)別 614
24.7.10 分析Swing的多線程
死鎖問題 614
24.8 課后練習 615
第 25章 大數據綜合實戰(zhàn):爬取并分析
知乎用戶信息 616
25.1 系統(tǒng)設計 617
25.1.1 系統(tǒng)目標 617
25.1.2 系統(tǒng)功能結構 617
25.2 數據庫設計 618
25.3 知乎爬蟲請求分析 618
25.4 系統(tǒng)文件夾組織結構 621
25.5 系統(tǒng)詳細運行流程圖 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 項目開發(fā)難點分析 648