本書基于新版的Java 11編寫,全面系統(tǒng)地介紹Java程序員必須掌握的核心基礎(chǔ)知識,這些內(nèi)容融合在三大主題中——Java語言基礎(chǔ)、面向?qū)ο缶幊桃约癑ava核心類。其中,Java語言基礎(chǔ)包括數(shù)據(jù)類型和運算符、控制結(jié)構(gòu)、數(shù)組、類和對象、異常處理、枚舉和注解等;面向?qū)ο蟀ǚ庋b性、繼承性、多態(tài)性、接口與抽象類、泛型與集合、多線程與并發(fā)編程等;Java核心類包括日期時間API、輸入/輸出、JavaFX圖形界面、Lambda表達式和Stream的使用、數(shù)據(jù)庫和網(wǎng)絡(luò)編程。本書還介紹了安全性和Java Web編程基礎(chǔ)的相關(guān)知識。
本書是為專業(yè)級Java程序員打造的理想教程,也可作為高等院校計算機相關(guān)專業(yè)“面向?qū)ο缶幊獭焙汀癑ava語言程序設(shè)計”等課程的教學(xué)用書。
1.本書基于Java SE 11編寫,版本新;
2.作者有多部計算機專業(yè)圖書的寫作經(jīng)驗,并有多年的軟件開發(fā)經(jīng)驗;
3.本書包含Java編程語言、Java面向?qū)ο缶幊蹋∣OP)以及Java核心類三大主題,可有效助力Java程序員成長。
Budi Kurniawan是Brainy Software的高級開發(fā)人員,曾為世界各地的多家機構(gòu)擔(dān)任顧問。他著有How Tomcat Works、Servlet and JSP: A Tutorial、Struts 2 Design and Programming等多部圖書。他以清晰的寫作風(fēng)格而聞名,他的寫作基于20年的軟件架構(gòu)師和軟件開發(fā)經(jīng)驗。他的Java教程最近被德國斯圖加特HDM計算機科學(xué)教學(xué)團隊選中,作為大學(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 安裝測試 4
1.1.6 下載Java API文檔 4
1.2 第 一個Java程序 4
1.2.1 編寫Java程序 4
1.2.2 編譯Java程序 4
1.2.3 執(zhí)行Java程序 5
1.3 Java編碼規(guī)范 5
1.4 集成開發(fā)環(huán)境 6
1.5 JShell 6
1.6 小結(jié) 7
習(xí)題 7
第 2章 語言基礎(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 浮點字面值 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 運算符 18
2.9.1 一元運算符 19
2.9.2 算術(shù)運算符 21
2.9.3 相等運算符 22
2.9.4 關(guān)系運算符 22
2.9.5 條件運算符 23
2.9.6 移位運算符 23
2.9.7 賦值運算符 24
2.9.8 整數(shù)按位運算符(& | ^) 24
2.9.9 邏輯運算符 25
2.9.10 運算符優(yōu)先級 25
2.9.11 類型提升 26
2.10 注釋 27
2.11 小結(jié) 27
習(xí)題 27
第3章 語句 29
3.1 概述 29
3.2 if語句 30
3.3 while語句 32
3.4 do-while語句 33
3.5 for語句 34
3.6 break語句 37
3.7 continue語句 38
3.8 switch語句 39
3.9 小結(jié) 40
習(xí)題 40
第4章 對象和類 41
4.1 什么是Java對象 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)建對象 46
4.4 null關(guān)鍵字 46
4.5 為對象分配內(nèi)存 47
4.6 Java包 49
4.7 封裝與訪問控制 50
4.7.1 類訪問控制修飾符 50
4.7.2 類成員訪問控制修飾符 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 對象創(chuàng)建初始化 66
4.20 垃圾回收器 68
4.21 創(chuàng)建對象的其他方法 69
4.22 小結(jié) 69
習(xí)題 70
第5章 核心類 71
5.1 java.lang.Object 71
5.2 java.lang.String 72
5.2.1 比較兩個String對象 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 可訪問性 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運算符 103
7.9 小結(jié) 104
習(xí)題 104
第8章 錯誤處理 105
8.1 概述 105
8.2 捕獲異!106
8.3 不帶catch的try 108
8.4 捕獲多個異!108
8.5 try-with-resources語句 108
8.6 java.lang.Exception類 109
8.7 從方法拋出異!110
8.8 用戶自定義異!111
8.9 異常處理說明 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 生成隨機數(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 擴展接口 123
10.3 接口中的實現(xiàn) 123
10.3.1 默認方法 123
10.3.2 靜態(tài)方法 124
10.3.3 私有方法 124
10.4 基類 124
10.5 抽象類 125
10.6 抽象類說明 126
10.7 小結(jié) 127
習(xí)題 127
第 11章 多態(tài) 128
11.1 概述 128
11.2 多態(tài)實戰(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章 處理日期和時間 139
13.1 概述 139
13.2 Instant類 140
13.3 LocalDate 140
13.4 Period 142
13.5 LocalDateTime 144
13.6 時區(qū) 145
13.7 ZonedDateTime 146
13.8 Duration 147
13.9 格式化日期-時間 150
13.10 解析日期-時間 151
13.11 舊的日期和時間API 152
13.11.1 java.util.Date類 152
13.11.2 java.util.Calendar類 152
13.11.3 用DateFormat進行解析和格式化 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 對象比較和排序 164
14.9.1 使用java.lang.Comparable 165
14.9.2 使用Comparator 167
14.10 小結(jié) 171
習(xí)題 171
第 15章 泛型 172
15.1 沒有泛型的時代 172
15.2 泛型類型 173
15.3 使用沒有類型參數(shù)的泛型類型 175
15.4 使用“?”通配符 176
15.5 在方法中使用有界通配符 177
15.6 泛型方法 178
15.7 編寫泛型類型 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 檢索目錄中的對象 186
16.3.3 復(fù)制和移動文件 186
16.3.4 讀取和寫入文件 187
16.4 輸入流/輸出流 189
16.5 讀二進制數(shù)據(jù) 189
16.6 寫入二進制數(shù)據(jù) 193
16.7 寫入文本(字符) 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 隨機訪問文件 203
16.11 對象序列化 207
16.12 小結(jié) 209
習(xí)題 209
第 17章 注解 210
17.1 概述 210
17.1.1 注解和注解類型 210
17.1.2 注解語法 211
17.1.3 Annotation接口 211
17.2 標準注解 212
17.2.1 Override 212
17.2.2 Deprecated 213
17.2.3 SuppressWarnings 213
17.3 一般注解 214
17.4 標準元注解 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 編寫自定義注解類型 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 局部內(nèi)部類 223
18.5 匿名內(nèi)部類 224
18.6 嵌套類和內(nèi)部類的幕后 225
18.7 小結(jié) 227
習(xí)題 227
第 19章 Lambda表達式 228
19.1 為何使用Lambda表達式 228
19.2 函數(shù)式接口 229
19.3 Lambda表達式語法 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 引用對象可用的實例方法 238
19.5.3 引用對象不可用的實例方法 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 過濾 250
20.5 映射 251
20.6 歸約 252
20.7 可變歸約 256
20.8 并行流 260
20.9 小結(jié) 261
習(xí)題 261
第 21章 Java數(shù)據(jù)庫連接 262
21.1 JDBC簡介 262
21.2 數(shù)據(jù)訪問的5個步驟 263
21.2.1 加載JDBC驅(qū)動程序 263
21.2.2 獲得數(shù)據(jù)庫連接 264
21.2.3 創(chuàng)建Statement對象 265
21.2.4 創(chuàng)建ResultSet對象 266
21.2.5 關(guān)閉JDBC對象 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 第 一個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ū)動編程 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 一個基于FXML的簡單應(yīng)用 295
23.3 FXML的事件處理 298
23.4 小結(jié) 302
習(xí)題 302
第 24章 Java線程 303
24.1 Java線程簡介 303
24.2 創(chuàng)建線程 303
24.2.1 擴展Thread類 304
24.2.2 實現(xiàn)Runnable接口 305
24.3 使用多線程 306
24.4 線程優(yōu)先級 308
24.5 停止線程 309
24.6 同步 312
24.6.1 線程干擾 312
24.6.2 塊同步 314
24.7 可見性 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請求 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)建一個Web服務(wù)器 349
26.6.1 HttpServer類 349
26.6.2 Request類 352
26.6.3 Response類 354
26.6.4 運行應(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 身份驗證 367
27.6.3 數(shù)據(jù)完整性 369
27.6.4 SSL的工作原理 369
27.7 創(chuàng)建證書 370
27.8 KeyTool程序 370
27.8.1 生成配對的密鑰 371
27.8.2 進行認證 372
27.8.3 將證書導(dǎo)入密鑰庫 372
27.8.4 從密鑰庫導(dǎo)出證書 372
27.8.5 列出密鑰庫條目 373
27.9 JarSigner工具 373
27.9.1 簽名jar文件 373
27.9.2 驗證已簽名的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 編寫基本的Servlet應(yīng)用程序 378
28.4.1 安裝Tomcat 378
28.4.2 編寫和編譯Servlet類 378
28.4.3 應(yīng)用程序目錄結(jié)構(gòu) 380
28.4.4 訪問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 編寫一個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 隱含對象 398
29.4 JSP語法元素 400
29.4.1 指令 400
29.4.2 腳本元素 402
29.5 處理錯誤 404
29.6 小結(jié) 404
習(xí)題 404
第30章 模塊 405
30.1 概述 405
30.2 Java標準模塊 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