本書(shū)基于新版的Java 11編寫(xiě),全面系統(tǒng)地介紹Java程序員必須掌握的核心基礎(chǔ)知識(shí),這些內(nèi)容融合在三大主題中——Java語(yǔ)言基礎(chǔ)、面向?qū)ο缶幊桃约癑ava核心類。其中,Java語(yǔ)言基礎(chǔ)包括數(shù)據(jù)類型和運(yùn)算符、控制結(jié)構(gòu)、數(shù)組、類和對(duì)象、異常處理、枚舉和注解等;面向?qū)ο蟀ǚ庋b性、繼承性、多態(tài)性、接口與抽象類、泛型與集合、多線程與并發(fā)編程等;Java核心類包括日期時(shí)間API、輸入/輸出、JavaFX圖形界面、Lambda表達(dá)式和Stream的使用、數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)編程。本書(shū)還介紹了安全性和Java Web編程基礎(chǔ)的相關(guān)知識(shí)。
本書(shū)是為專業(yè)級(jí)Java程序員打造的理想教程,也可作為高等院校計(jì)算機(jī)相關(guān)專業(yè)“面向?qū)ο缶幊獭焙汀癑ava語(yǔ)言程序設(shè)計(jì)”等課程的教學(xué)用書(shū)。
1.本書(shū)基于Java SE 11編寫(xiě),版本新;
2.作者有多部計(jì)算機(jī)專業(yè)圖書(shū)的寫(xiě)作經(jīng)驗(yàn),并有多年的軟件開(kāi)發(fā)經(jīng)驗(yàn);
3.本書(shū)包含Java編程語(yǔ)言、Java面向?qū)ο缶幊蹋∣OP)以及Java核心類三大主題,可有效助力Java程序員成長(zhǎng)。
Budi Kurniawan是Brainy Software的高級(jí)開(kāi)發(fā)人員,曾為世界各地的多家機(jī)構(gòu)擔(dān)任顧問(wèn)。他著有How Tomcat Works、Servlet and JSP: A Tutorial、Struts 2 Design and Programming等多部圖書(shū)。他以清晰的寫(xiě)作風(fēng)格而聞名,他的寫(xiě)作基于20年的軟件架構(gòu)師和軟件開(kāi)發(fā)經(jīng)驗(yàn)。他的Java教程最近被德國(guó)斯圖加特HDM計(jì)算機(jī)科學(xué)教學(xué)團(tuán)隊(duì)選中,作為大學(xué)的主要教材。
第 1章 新手起步 1
1.1 下載和安裝JDK 1
1.1.1 在Windows上安裝 1
1.1.2 在Linux上安裝 2
1.1.3 在macOS上安裝 3
1.1.4 設(shè)置系統(tǒng)環(huán)境變量 3
1.1.5 安裝測(cè)試 4
1.1.6 下載Java API文檔 4
1.2 第 一個(gè)Java程序 4
1.2.1 編寫(xiě)Java程序 4
1.2.2 編譯Java程序 4
1.2.3 執(zhí)行Java程序 5
1.3 Java編碼規(guī)范 5
1.4 集成開(kāi)發(fā)環(huán)境 6
1.5 JShell 6
1.6 小結(jié) 7
習(xí)題 7
第 2章 語(yǔ)言基礎(chǔ) 8
2.1 ASCII和Unicode 8
2.2 分隔符 9
2.3 基本類型 10
2.4 變量 11
2.5 局部變量類型推斷 13
2.6 常量 13
2.7 字面值 14
2.7.1 整數(shù)字面值 14
2.7.2 浮點(diǎn)字面值 15
2.7.3 布爾字面值 16
2.7.4 字符字面值 16
2.8 基本類型轉(zhuǎn)換 17
2.8.1 加寬轉(zhuǎn)換 17
2.8.2 縮窄轉(zhuǎn)換 18
2.9 運(yùn)算符 18
2.9.1 一元運(yùn)算符 19
2.9.2 算術(shù)運(yùn)算符 21
2.9.3 相等運(yùn)算符 22
2.9.4 關(guān)系運(yùn)算符 22
2.9.5 條件運(yùn)算符 23
2.9.6 移位運(yùn)算符 23
2.9.7 賦值運(yùn)算符 24
2.9.8 整數(shù)按位運(yùn)算符(& | ^) 24
2.9.9 邏輯運(yùn)算符 25
2.9.10 運(yùn)算符優(yōu)先級(jí) 25
2.9.11 類型提升 26
2.10 注釋 27
2.11 小結(jié) 27
習(xí)題 27
第3章 語(yǔ)句 29
3.1 概述 29
3.2 if語(yǔ)句 30
3.3 while語(yǔ)句 32
3.4 do-while語(yǔ)句 33
3.5 for語(yǔ)句 34
3.6 break語(yǔ)句 37
3.7 continue語(yǔ)句 38
3.8 switch語(yǔ)句 39
3.9 小結(jié) 40
習(xí)題 40
第4章 對(duì)象和類 41
4.1 什么是Java對(duì)象 41
4.2 Java類 42
4.2.1 字段 43
4.2.2 方法 43
4.2.3 main方法 44
4.2.4 構(gòu)造方法 44
4.2.5 可變參數(shù)方法 45
4.2.6 UML類圖中的類成員 45
4.3 創(chuàng)建對(duì)象 46
4.4 null關(guān)鍵字 46
4.5 為對(duì)象分配內(nèi)存 47
4.6 Java包 49
4.7 封裝與訪問(wèn)控制 50
4.7.1 類訪問(wèn)控制修飾符 50
4.7.2 類成員訪問(wèn)控制修飾符 51
4.8 this關(guān)鍵字 54
4.9 使用其他類 54
4.10 final變量 56
4.11 靜態(tài)成員 56
4.12 靜態(tài)final變量 58
4.13 靜態(tài)導(dǎo)入 59
4.14 變量作用域 60
4.15 方法重載 60
4.16 靜態(tài)工廠方法 61
4.17 按值還是按引用傳遞 62
4.18 加載、鏈接和初始化 64
4.18.1 加載 64
4.18.2 鏈接 65
4.18.3 初始化 65
4.19 對(duì)象創(chuàng)建初始化 66
4.20 垃圾回收器 68
4.21 創(chuàng)建對(duì)象的其他方法 69
4.22 小結(jié) 69
習(xí)題 70
第5章 核心類 71
5.1 java.lang.Object 71
5.2 java.lang.String 72
5.2.1 比較兩個(gè)String對(duì)象 72
5.2.2 字符串字面值 73
5.2.3 字符轉(zhuǎn)義 74
5.2.4 switch中的String 74
5.2.5 String類的構(gòu)造方法 75
5.2.6 String類的方法 75
5.3 java.lang.StringBuffer和java.lang.StringBuilder 78
5.3.1 StringBuilder類的構(gòu)造方法 78
5.3.2 StringBuilder類的方法 79
5.4 基本類型包裝類 80
5.4.1 java.lang.Integer 80
5.4.2 java.lang.Boolean 80
5.4.3 java.lang.Character 81
5.5 java.lang.Class 82
5.6 java.lang.System 83
5.7 java.util.Scanner 86
5.8 小結(jié) 87
習(xí)題 87
第6章 數(shù)組 88
6.1 概述 88
6.2 迭代數(shù)組 90
6.3 java.util.Arrays類 90
6.4 修改數(shù)組大小 91
6.5 查找數(shù)組 92
6.6 將String數(shù)組傳遞給main 93
6.7 多維數(shù)組 94
6.8 小結(jié) 94
習(xí)題 95
第7章 繼承 96
7.1 概述 96
7.1.1 extends關(guān)鍵字 96
7.1.2 is-a關(guān)系 97
7.2 可訪問(wèn)性 98
7.3 方法覆蓋 99
7.4 調(diào)用超類的構(gòu)造方法 100
7.5 調(diào)用超類的隱藏成員 102
7.6 類型轉(zhuǎn)換 102
7.7 final類 103
7.8 instanceof運(yùn)算符 103
7.9 小結(jié) 104
習(xí)題 104
第8章 錯(cuò)誤處理 105
8.1 概述 105
8.2 捕獲異常 106
8.3 不帶catch的try 108
8.4 捕獲多個(gè)異!108
8.5 try-with-resources語(yǔ)句 108
8.6 java.lang.Exception類 109
8.7 從方法拋出異常 110
8.8 用戶自定義異!111
8.9 異常處理說(shuō)明 112
8.10 小結(jié) 113
習(xí)題 113
第9章 處理數(shù)字 114
9.1 裝箱與拆箱 114
9.2 數(shù)字解析 114
9.3 數(shù)字格式化 115
9.4 用java.text.NumberFormat解析數(shù)字 116
9.5 java.lang.Math類 116
9.6 使用貨幣值 117
9.7 生成隨機(jī)數(shù) 118
9.8 小結(jié) 119
習(xí)題 119
第 10章 接口和抽象類 120
10.1 接口的概念 120
10.2 從技術(shù)角度看接口 121
10.2.1 接口中的字段 122
10.2.2 抽象方法 122
10.2.3 擴(kuò)展接口 123
10.3 接口中的實(shí)現(xiàn) 123
10.3.1 默認(rèn)方法 123
10.3.2 靜態(tài)方法 124
10.3.3 私有方法 124
10.4 基類 124
10.5 抽象類 125
10.6 抽象類說(shuō)明 126
10.7 小結(jié) 127
習(xí)題 127
第 11章 多態(tài) 128
11.1 概述 128
11.2 多態(tài)實(shí)戰(zhàn) 130
11.3 多態(tài)與反射 131
11.4 小結(jié) 133
習(xí)題 133
第 12章 枚舉 134
12.1 概述 134
12.2 類中的枚舉 135
12.3 java.lang.Enum類 136
12.4 迭代枚舉值 136
12.5 在switch中使用枚舉 136
12.6 枚舉成員 137
12.7 小結(jié) 138
習(xí)題 138
第 13章 處理日期和時(shí)間 139
13.1 概述 139
13.2 Instant類 140
13.3 LocalDate 140
13.4 Period 142
13.5 LocalDateTime 144
13.6 時(shí)區(qū) 145
13.7 ZonedDateTime 146
13.8 Duration 147
13.9 格式化日期-時(shí)間 150
13.10 解析日期-時(shí)間 151
13.11 舊的日期和時(shí)間API 152
13.11.1 java.util.Date類 152
13.11.2 java.util.Calendar類 152
13.11.3 用DateFormat進(jìn)行解析和格式化 153
13.12 小結(jié) 155
習(xí)題 156
第 14章 集合框架 157
14.1 集合框架概述 157
14.2 Collection接口 158
14.3 List和ArrayList 158
14.4 用Iterator和for迭代集合 160
14.5 Set和HashSet 161
14.6 Queue和LinkedList 162
14.7 集合轉(zhuǎn)換 163
14.8 Map和HashMap 163
14.9 對(duì)象比較和排序 164
14.9.1 使用java.lang.Comparable 165
14.9.2 使用Comparator 167
14.10 小結(jié) 171
習(xí)題 171
第 15章 泛型 172
15.1 沒(méi)有泛型的時(shí)代 172
15.2 泛型類型 173
15.3 使用沒(méi)有類型參數(shù)的泛型類型 175
15.4 使用“?”通配符 176
15.5 在方法中使用有界通配符 177
15.6 泛型方法 178
15.7 編寫(xiě)泛型類型 179
15.8 小結(jié) 180
習(xí)題 180
第 16章 輸入/輸出 181
16.1 File類 181
16.1.1 File類的構(gòu)造方法 182
16.1.2 File類的方法 183
16.2 文件系統(tǒng)和路徑 184
16.3 文件和目錄的處理及操作 185
16.3.1 創(chuàng)建和刪除文件及目錄 185
16.3.2 檢索目錄中的對(duì)象 186
16.3.3 復(fù)制和移動(dòng)文件 186
16.3.4 讀取和寫(xiě)入文件 187
16.4 輸入流/輸出流 189
16.5 讀二進(jìn)制數(shù)據(jù) 189
16.6 寫(xiě)入二進(jìn)制數(shù)據(jù) 193
16.7 寫(xiě)入文本(字符) 195
16.7.1 Writer 196
16.7.2 OutputStreamWriter 196
16.7.3 PrintWriter 198
16.8 讀取文本(字符) 199
16.8.1 Reader 200
16.8.2 InputStreamReader 200
16.8.3 BufferedReader 201
16.9 用PrintStream記錄日志 202
16.10 隨機(jī)訪問(wèn)文件 203
16.11 對(duì)象序列化 207
16.12 小結(jié) 209
習(xí)題 209
第 17章 注解 210
17.1 概述 210
17.1.1 注解和注解類型 210
17.1.2 注解語(yǔ)法 211
17.1.3 Annotation接口 211
17.2 標(biāo)準(zhǔn)注解 212
17.2.1 Override 212
17.2.2 Deprecated 213
17.2.3 SuppressWarnings 213
17.3 一般注解 214
17.4 標(biāo)準(zhǔn)元注解 215
17.4.1 Documented 215
17.4.2 Inherited 215
17.4.3 Retention 216
17.4.4 Target 216
17.5 自定義注解類型 216
17.5.1 編寫(xiě)自定義注解類型 217
17.5.2 使用自定義注解類型 217
17.5.3 用反射查詢注解 217
17.6 小結(jié) 218
習(xí)題 218
第 18章 嵌套類和內(nèi)部類 219
18.1 嵌套類的概述 219
18.2 靜態(tài)嵌套類 220
18.3 成員內(nèi)部類 221
18.4 局部?jī)?nèi)部類 223
18.5 匿名內(nèi)部類 224
18.6 嵌套類和內(nèi)部類的幕后 225
18.7 小結(jié) 227
習(xí)題 227
第 19章 Lambda表達(dá)式 228
19.1 為何使用Lambda表達(dá)式 228
19.2 函數(shù)式接口 229
19.3 Lambda表達(dá)式語(yǔ)法 229
19.4 預(yù)定義函數(shù)式接口 230
19.4.1 Function、BiFunction及變體 230
19.4.2 Predicate 232
19.4.3 Supplier 233
19.4.4 Consumer 233
19.5 方法引用 235
19.5.1 引用靜態(tài)方法 235
19.5.2 引用對(duì)象可用的實(shí)例方法 238
19.5.3 引用對(duì)象不可用的實(shí)例方法 238
19.5.4 引用構(gòu)造方法 240
19.6 Optional與類似的類 241
19.7 小結(jié) 246
習(xí)題 246
第 20章 使用Stream 247
20.1 概述 247
20.2 創(chuàng)建和獲得流 248
20.3 連接流 249
20.4 過(guò)濾 250
20.5 映射 251
20.6 歸約 252
20.7 可變歸約 256
20.8 并行流 260
20.9 小結(jié) 261
習(xí)題 261
第 21章 Java數(shù)據(jù)庫(kù)連接 262
21.1 JDBC簡(jiǎn)介 262
21.2 數(shù)據(jù)訪問(wèn)的5個(gè)步驟 263
21.2.1 加載JDBC驅(qū)動(dòng)程序 263
21.2.2 獲得數(shù)據(jù)庫(kù)連接 264
21.2.3 創(chuàng)建Statement對(duì)象 265
21.2.4 創(chuàng)建ResultSet對(duì)象 266
21.2.5 關(guān)閉JDBC對(duì)象 266
21.3 綜合應(yīng)用 267
21.4 使用DAO模式 269
21.5 讀取元數(shù)據(jù) 275
21.6 小結(jié) 278
習(xí)題 278
第 22章 JavaFX入門 279
22.1 概述 279
22.2 第 一個(gè)JavaFX程序 279
22.3 Application、Stage和Scene類 280
22.3.1 Application類 281
22.3.2 Stage類 281
22.3.3 Scene類 281
22.4 UI組件 282
22.5 控件 282
22.6 區(qū)域 285
22.7 事件驅(qū)動(dòng)編程 287
22.7.1 Java事件模型 288
22.7.2 JavaFX事件 288
22.8 使用CSS樣式 290
22.9 小結(jié) 293
習(xí)題 293
第 23章 JavaFX與FXML 294
23.1 概述 294
23.2 一個(gè)基于FXML的簡(jiǎn)單應(yīng)用 295
23.3 FXML的事件處理 298
23.4 小結(jié) 302
習(xí)題 302
第 24章 Java線程 303
24.1 Java線程簡(jiǎn)介 303
24.2 創(chuàng)建線程 303
24.2.1 擴(kuò)展Thread類 304
24.2.2 實(shí)現(xiàn)Runnable接口 305
24.3 使用多線程 306
24.4 線程優(yōu)先級(jí) 308
24.5 停止線程 309
24.6 同步 312
24.6.1 線程干擾 312
24.6.2 塊同步 314
24.7 可見(jiàn)性 315
24.8 join方法 317
24.9 線程協(xié)調(diào) 317
24.10 使用Timer 321
24.11 小結(jié) 324
習(xí)題 324
第 25章 并發(fā)工具 325
25.1 原子變量 325
25.2 Executor和ExecutorService 326
25.3 命名線程 331
25.4 Callable和Future 333
25.5 JavaFX任務(wù) 336
25.6 鎖 339
25.7 小結(jié) 340
習(xí)題 340
第 26章 Java網(wǎng)絡(luò) 341
26.1 網(wǎng)絡(luò)概述 341
26.2 超文本傳輸協(xié)議(HTTP) 341
26.2.1 HTTP請(qǐng)求 342
26.2.2 HTTP響應(yīng) 343
26.3 HttpClient API 343
26.4 java.net.Socket 346
26.5 java.net.ServerSocket 348
26.6 創(chuàng)建一個(gè)Web服務(wù)器 349
26.6.1 HttpServer類 349
26.6.2 Request類 352
26.6.3 Response類 354
26.6.4 運(yùn)行應(yīng)用程序 356
26.7 小結(jié) 357
習(xí)題 357
第 27章 安全 358
27.1 Java安全概述 358
27.2 使用安全管理器 359
27.3 策略文件 359
27.3.1 keystore 361
27.3.2 grant 361
27.4 權(quán)限 362
27.4.1 java.io.FilePermission 362
27.4.2 java.security.BasicPermission 363
27.4.3 java.util.PropertyPermission
363
27.4.4 java.net.SocketPermission 363
27.4.5 java.security.UnresolvedPermission 363
27.4.6 java.security.RuntimePermission 363
27.4.7 java.net.NetPermission 364
27.4.8 java.lang.reflect.ReflectPermission 364
27.4.9 java.io.SerializablePermission 364
27.4.10 java.security.SecurityPermission 364
27.4.11 java.security.AllPermission 365
27.4.12 javax.security.auth.AuthPermission 365
27.5 安全編程 365
27.6 加密概述 366
27.6.1 加密/解密 367
27.6.2 身份驗(yàn)證 367
27.6.3 數(shù)據(jù)完整性 369
27.6.4 SSL的工作原理 369
27.7 創(chuàng)建證書(shū) 370
27.8 KeyTool程序 370
27.8.1 生成配對(duì)的密鑰 371
27.8.2 進(jìn)行認(rèn)證 372
27.8.3 將證書(shū)導(dǎo)入密鑰庫(kù) 372
27.8.4 從密鑰庫(kù)導(dǎo)出證書(shū) 372
27.8.5 列出密鑰庫(kù)條目 373
27.9 JarSigner工具 373
27.9.1 簽名jar文件 373
27.9.2 驗(yàn)證已簽名的jar文件 373
27.10 Java加密API 374
27.11 小結(jié) 374
習(xí)題 374
第 28章 Java Web應(yīng)用程序 375
28.1 Servlet應(yīng)用程序架構(gòu) 375
28.2 Servlet API概述 376
28.3 Servlet 377
28.4 編寫(xiě)基本的Servlet應(yīng)用程序 378
28.4.1 安裝Tomcat 378
28.4.2 編寫(xiě)和編譯Servlet類 378
28.4.3 應(yīng)用程序目錄結(jié)構(gòu) 380
28.4.4 訪問(wèn)Servlet 380
28.5 ServletRequest 381
28.6 ServletResponse 381
28.7 ServletConfig 382
28.8 ServletContext 384
28.9 GenericServlet 384
28.10 HTTP Servlet 386
28.10.1 HttpServlet 386
28.10.2 HttpServletRequest 388
28.10.3 HttpServletResponse 388
28.10.4 編寫(xiě)一個(gè)HTTP Servlet 388
28.11 使用部署描述符 392
28.12 小結(jié) 395
習(xí)題 395
第 29章 JavaServer Pages 396
29.1 JSP概述 396
29.2 jspInit、jspDestroy及其他方法 398
29.3 隱含對(duì)象 398
29.4 JSP語(yǔ)法元素 400
29.4.1 指令 400
29.4.2 腳本元素 402
29.5 處理錯(cuò)誤 404
29.6 小結(jié) 404
習(xí)題 404
第30章 模塊 405
30.1 概述 405
30.2 Java標(biāo)準(zhǔn)模塊 406
30.3 創(chuàng)建模塊應(yīng)用程序 406
30.4 創(chuàng)建自包含的應(yīng)用程序包 407
30.5 創(chuàng)建安裝程序 409
30.6 小結(jié) 410
習(xí)題 410