本書對接信息技術(shù)的相關(guān)崗位需求,主要滿足高等職業(yè)教育信息技術(shù)類相關(guān)專業(yè)Java程序設(shè)計(jì)課程的教學(xué)需要,分為Java程序設(shè)計(jì)基礎(chǔ)(學(xué)習(xí)Java基礎(chǔ))、Java面向?qū)ο螅▽W(xué)習(xí)Java面向?qū)ο螅、Java核心技術(shù)實(shí)戰(zhàn)(實(shí)現(xiàn)多人聊天室系統(tǒng))和Java實(shí)用場景開發(fā)(實(shí)用場景應(yīng)用開發(fā))四部分,并通過鴻蒙App開發(fā)、多人聊天室系統(tǒng),以及發(fā)送郵件和短信、生成和識別二維碼、識別車牌等具有代表性的實(shí)用案例項(xiàng)目來講解Java程序設(shè)計(jì)基礎(chǔ)、Java面向?qū)ο、多線程、集合框架、I/O流、網(wǎng)絡(luò)編程、異常處理、GUI等Java核心編程技術(shù)。本書提供一系列實(shí)踐場景,通過完成編程任務(wù)和分析代碼,融入Java編程的概念和技術(shù),幫助學(xué)生沉浸式地學(xué)習(xí)Java核心編程技術(shù)。小節(jié)根據(jù)需要設(shè)置【隨堂測試】和【動手練習(xí)】環(huán)節(jié),用于促進(jìn)師生互動,提高教與學(xué)的效果。支持模塊化教學(xué),可以使教師根據(jù)學(xué)生基礎(chǔ)和教學(xué)目標(biāo),選取相關(guān)單元進(jìn)行教學(xué),具有“活頁式”教材的效果。本書體系完整,內(nèi)容實(shí)用,配套資源豐富,既可以作為高等職業(yè)教育信息技術(shù)類相關(guān)專業(yè)包括高職和本科學(xué)生的學(xué)習(xí)用書,也可以作為Java技術(shù)愛好者的自學(xué)參考用書。
覃國蓉,女,教授,就職于全國雙高院校深圳信息職業(yè)技術(shù)學(xué)院,一直致力于物聯(lián)網(wǎng)等專業(yè)的教學(xué)和科研工作,從業(yè)以來一直兢兢業(yè)業(yè),教學(xué)經(jīng)驗(yàn)豐富,是一位雙師型高校教師。
第一部分 學(xué)習(xí)Java基礎(chǔ)
單元1 初識Java 2
1.1 任務(wù)描述 2
1.2 了解什么是Java 2
1.3 JDK的下載和安裝 3
1.3.1 區(qū)分JVM、JRE和JDK 3
1.3.2 下載并安裝JDK 4
1.4 完成并分析第一個Java程序 7
1.4.1 完成第一個Java程序 7
1.4.2 Java代碼的基本格式 8
1.4.3 Java注釋 8
1.4.4 Java程序入口方法main() 9
1.5 IntelliJ IDEA的安裝和配置 10
1.5.1 了解什么是IntelliJ IDEA 10
1.5.2 下載并安裝IDEA 11
1.5.3 在IDEA中配置全局JDK 11
1.5.4 在IDEA中創(chuàng)建Java項(xiàng)目和Java類 13
單元2 掌握J(rèn)ava編程基礎(chǔ) 16
2.1 任務(wù)描述 16
2.2 在IDEA中完成一個可以交互的Java程序 16
2.3 Java編程基礎(chǔ) 17
2.3.1 類、對象、方法和實(shí)例變量的概念 17
2.3.2 方法的調(diào)用 18
2.3.3 數(shù)據(jù)類型、變量和標(biāo)識符的使用 19
2.3.4 算術(shù)運(yùn)算符和賦值運(yùn)算符的使用 21
2.4 初識面向?qū)ο?24
2.4.1 構(gòu)造方法 24
2.4.2 方法的重載 25
2.4.3 類的實(shí)例成員和靜態(tài)成員 26
2.4.4 final關(guān)鍵字 27
單元3 掌握J(rèn)ava的流程控制和數(shù)組類型 29
3.1 任務(wù)描述 29
3.2 掌握J(rèn)ava的流程控制 29
3.2.1 關(guān)系運(yùn)算符和邏輯運(yùn)算符 29
3.2.2 if判斷 31
3.2.3 switch多重選擇 33
3.2.4 條件表達(dá)式 35
3.2.5 while循環(huán) 35
3.2.6 do while循環(huán) 37
3.2.7 for循環(huán) 37
3.3 掌握J(rèn)ava的數(shù)組類型 38
3.3.1 數(shù)組變量的定義和初始化 38
3.3.2 查看數(shù)組的大小并訪問數(shù)組中的元素 39
3.3.3 使用for循環(huán)遍歷數(shù)組 40
3.3.4 使用for each循環(huán)遍歷數(shù)組 41
3.3.5 多維數(shù)組 42
階段測試:Java編程基礎(chǔ)測試 43
第二部分 學(xué)習(xí)Java面向?qū)ο?br>單元4 開發(fā)一個簡單的鴻蒙App 50
4.1 任務(wù)描述 50
4.2 搭建鴻蒙開發(fā)環(huán)境 50
4.2.1 注冊華為賬號并開通華為云 50
4.2.2 登錄華為開發(fā)者聯(lián)盟官網(wǎng)完成實(shí)名認(rèn)證 51
4.2.3 安裝并配置鴻蒙開發(fā)環(huán)境DevEco Studio 53
4.3 快速開發(fā)一個基于Java的鴻蒙App 58
4.3.1 創(chuàng)建一個新的項(xiàng)目 58
4.3.2 啟動模擬器運(yùn)行程序 59
4.4 掌握J(rèn)ava面向?qū)ο蟮幕A(chǔ) 62
4.4.1 認(rèn)識鴻蒙App中Java的類和包 62
4.4.2 通過繼承編寫鴻蒙App的Java類 64
4.4.3 通過覆蓋實(shí)現(xiàn)App自身的業(yè)務(wù)邏輯 66
4.4.4 掌握super和this關(guān)鍵字 66
單元5 開發(fā)一個可以交互的鴻蒙App 68
5.1 任務(wù)描述 68
5.2 在布局文件中添加一個單擊按鈕 69
5.3 添加initiateUI()方法獲得界面組件對象并初始化界面 70
5.3.1 在MainAbilitySlice類中添加數(shù)據(jù)成員 70
5.3.2 在Java中定義方法的語法 71
5.3.3 添加initiateUI()方法 72
5.4 實(shí)現(xiàn)事件監(jiān)聽者接口處理交互 73
5.4.1 通過添加addListener()方法來處理單擊事件 73
5.4.2 事件監(jiān)聽者和接口 74
5.4.3 內(nèi)部類和內(nèi)部接口 75
5.4.4 類的繼承關(guān)系和Object根類 76
5.5 在AbilitySlice類的onStart()方法中調(diào)用方法初始化界面并添加事件監(jiān)聽者 76
5.5.1 在onStart()方法中調(diào)用initiateUI()方法和addListener()方法 76
5.5.2 重新啟動模擬器并運(yùn)行程序 77
5.5.3 匿名內(nèi)部類 78
5.6 掌握抽象類、接口和Java的單繼承機(jī)制 79
階段測試:Java面向?qū)ο鬁y試 80
第三部分 實(shí)現(xiàn)多人聊天室系統(tǒng)
單元6 準(zhǔn)備開發(fā)環(huán)境 88
6.1 任務(wù)描述 88
6.2 掌握Maven的基本使用方法 88
6.2.1 了解什么是Maven 88
6.2.2 下載并安裝Maven 91
6.2.3 配置Maven的本地倉庫位置和中央倉庫鏡像 93
6.2.4 mvn命令的使用 94
6.2.5 在IDEA中配置全局Maven 98
6.3 掌握Git的基本使用方法 99
6.3.1 了解什么是Git 99
6.3.2 下載并安裝Git 100
6.3.3 Git的4個區(qū)和5個狀態(tài) 100
6.3.4 在本地對源代碼進(jìn)行基本的版本控制 101
6.3.5 通過遠(yuǎn)程版本庫管理源代碼的版本 105
6.3.6 在IDEA中配置全局Git 110
階段測試:使用Maven及Git測試 111
單元7 連接客戶端與服務(wù)器端 114
7.1 了解多人聊天室系統(tǒng)的需求和本單元任務(wù) 114
7.1.1 了解多人聊天室系統(tǒng)的需求 114
7.1.2 本單元任務(wù)描述及實(shí)現(xiàn)思路 115
7.2 編寫聊天服務(wù)器的ChatServer類 116
7.2.1 創(chuàng)建ChatServer類 116
7.2.2 創(chuàng)建綁定到指定端口的ServerSocket對象 119
7.2.3 監(jiān)聽客戶端連接請求 121
7.2.4 獲得socket對象對應(yīng)的輸入流對象 122
7.2.5 通過調(diào)用對象流的readObject()方法來接收客戶端的輸入 124
7.2.6 輸出客戶端進(jìn)入聊天室的提示信息 125
7.2.7 向客戶端發(fā)送歡迎信息 126
7.3 編寫客戶端的ChatClient類 128
7.4 聯(lián)合測試ChatServer和ChatClient 131
7.5 編寫支持與多個客戶端交互的ChatChannel類 133
7.5.1 線程的引入 133
7.5.2 編寫ChatChannel類 137
7.6 將版本1代碼托管到碼云 139
7.6.1 在碼云上添加一個遠(yuǎn)程倉庫 139
7.6.2 在IDEA中創(chuàng)建本地倉庫 140
7.6.3 在IDEA中將代碼提交到本地倉庫 140
7.6.4 在IDEA中建立本地倉庫與遠(yuǎn)程倉庫的關(guān)聯(lián) 142
7.6.5 在IDEA中上傳代碼到碼云 142
階段測試:網(wǎng)絡(luò)編程、I/O流、異常及多線程測試 143
單元8 讓客戶端可以不斷收發(fā)消息 145
8.1 本單元的任務(wù)描述及實(shí)現(xiàn)思路 145
8.1.1 任務(wù)描述 145
8.1.2 實(shí)現(xiàn)思路 145
8.2 修改服務(wù)器端的ChatChannel類 147
8.2.1 使服務(wù)器端能不斷接收并轉(zhuǎn)發(fā)客戶端發(fā)送的消息 147
8.2.2 抽取ois、oos和name局部變量為成員變量 148
8.2.3 抽取接收用戶姓名并發(fā)送歡迎信息的代碼到方法中 150
8.3 修改客戶端的ChatClient類 153
8.3.1 抽取socket、oos、ois、name局部變量為ChatClient類的成員變量 153
8.3.2 在客戶端添加處理接收消息的線程并啟動 154
8.3.3 在客戶端添加處理發(fā)送消息的線程并啟動 156
8.3.4 抽取輸入并發(fā)送姓名和接收歡迎信息的代碼到方法中 157
8.4 聯(lián)合測試并向碼云提交一個新的版本 161
8.4.1 服務(wù)器端與客戶端的聯(lián)合測試 161
8.4.2 向碼云提交一個新的版本 161
單元9 實(shí)現(xiàn)群聊和私聊 164
9.1 任務(wù)描述 164
9.2 任務(wù)1:群聊的實(shí)現(xiàn) 164
9.2.1 群聊的實(shí)現(xiàn)思路和集合的引入 164
9.2.2 增加一個用static修飾的Map類的allMap成員變量 166
9.2.3 定義一個群發(fā)消息給所有客戶端的sendToAll()方法 167
9.2.4 同步allMap和客戶端的變化 167
9.2.5 增加在收到客戶端消息時群發(fā)消息的代碼 169
9.2.6 聯(lián)合測試群聊 169
9.2.7 選擇文件并提交到碼云 170
9.3 任務(wù)2:私聊的實(shí)現(xiàn) 172
9.3.1 私聊的實(shí)現(xiàn)思路和String的相關(guān)方法 172
9.3.2 定義發(fā)送私聊消息的sendSecretMsg()方法 173
9.3.3 解析客戶端發(fā)送的消息以區(qū)分私聊和群聊 173
9.3.4 聯(lián)合測試私聊 175
9.3.5 選擇文件并提交到碼云 176
階段測試:多線程、字符串、I/O流、異常及集合類測試 178
單元10 提高系統(tǒng)健壯性和用戶體驗(yàn) 181
10.1 任務(wù)描述及實(shí)現(xiàn)思路 181
10.2 簡單處理服務(wù)器端未啟動:提示后直接退出 182
10.2.1 定位處理位置 182
10.2.2 在處理位置出現(xiàn)提示后直接退出 183
10.2.3 測試客戶端并提交代碼到碼云 185
10.3 高級處理服務(wù)器端未啟動:嘗試不斷連接服務(wù)器 186
10.3.1 在ChatClient中定義連接服務(wù)器的connect()方法 186
10.3.2 通過調(diào)用connect()方法來連接服務(wù)器 187
10.3.3 聯(lián)合測試并提交到碼云 188
10.4 簡單處理聊天過程中服務(wù)器端宕機(jī):提示后直接退出 189
10.4.1 定位處理位置 189
10.4.2 簡單處理聊天過程中服務(wù)器端宕機(jī) 190
10.4.3 聯(lián)合測試簡單處理并提交代碼到碼云 193
10.5 高級處理聊天過程中服務(wù)器端宕機(jī):嘗試不斷連接服務(wù)器 194
10.5.1 在ChatClient中定義重連方法reconnect() 194
10.5.2 高級處理聊天過程中服務(wù)器端宕機(jī) 195
10.5.3 修改sendNameAndRecvEcho()方法 198
10.5.4 聯(lián)合測試高級處理并提交代碼到碼云 199
階段測試:Java程序設(shè)計(jì)測試 200
單元11 圖形用戶界面的實(shí)現(xiàn) 204
11.1 任務(wù)描述及實(shí)現(xiàn)思路 204
11.2 實(shí)現(xiàn)界面的ClientUI類 206
11.2.1 將界面組件定義成界面ClientUI類的成員變量 206
11.2.2 定義搭建界面的initiateUI()方法并在構(gòu)造方法中調(diào)用 206
11.2.3 使ClientUI類成為事件監(jiān)聽者 209
11.2.4 定義添加事件監(jiān)聽者的addListener()方法并在構(gòu)造方法中調(diào)用 211
11.2.5 界面部分單獨(dú)測試 214
11.3 完成一個具有圖形界面的客戶端類 215
11.3.1 刪除ChatClient類中發(fā)送消息的線程代碼 215
11.3.2 將ClientUI類定義成ChatClient類的內(nèi)部類 215
11.3.3 改為從圖形用戶界面中輸入姓名 216
11.3.4 在ChatClient類中定義showMessage()方法 216
11.3.5 在ChatClient類中定義send()方法 217
11.3.6 用showMessage()方法替換System.out.println()方法 218
11.4 聯(lián)合測試并提交代碼 223
11.4.1 聯(lián)合測試 223
11.4.2 提交到碼云 227
第四部分 實(shí)用場景應(yīng)用開發(fā)
單元12 實(shí)現(xiàn)發(fā)送郵件和發(fā)送短信 230
12.1 任務(wù)描述 230
12.2 任務(wù)1:實(shí)現(xiàn)發(fā)送郵件 230
12.2.1 JavaMail介紹 230
12.2.2 使用JavaMail發(fā)送郵件 231
12.2.3 將發(fā)送郵件的代碼封裝到工具類MailUtil中 234
12.3 任務(wù)2:實(shí)現(xiàn)發(fā)送短信 238
12.3.1 阿里短信服務(wù)平臺API介紹 238
12.3.2 使用阿里短信服務(wù)編寫代碼實(shí)現(xiàn)發(fā)送短信 239
單元13 實(shí)現(xiàn)車牌識別系統(tǒng) 245
13.1 任務(wù)描述 245
13.2 文字識別開發(fā)接口Tesseract OCR和百度AI開放平臺 246
13.2.1 文字識別開發(fā)接口Tesseract OCR和Java開發(fā)包Tess4J 246
13.2.2 百度AI開放平臺OCR服務(wù) 246
13.3 準(zhǔn)備測試圖片 246
13.4 使用Tess4J實(shí)現(xiàn)車牌識別 247
13.4.1 創(chuàng)建Maven項(xiàng)目chepai并添加相關(guān)依賴 247
13.4.2 準(zhǔn)備中文字庫 249
13.4.3 編碼實(shí)現(xiàn)車牌識別 250
13.4.4 將車牌識別代碼封裝到方法中并測試3個車牌 252
13.5 使用百度AI開放平臺實(shí)現(xiàn)車牌識別 255
13.5.1 編碼前的準(zhǔn)備 255
13.5.2 調(diào)用百度API接口實(shí)現(xiàn)車牌識別系統(tǒng) 256
13.5.3 使用GsonFormatPlus生成識別結(jié)果的實(shí)體類Result 263
13.5.4 定義重載的車牌識別方法 267
13.5.5 使用webcam-capture增加攝像頭抓拍車牌功能 270
單元14 生成和識別二維碼 275
14.1 任務(wù)描述 275
14.2 創(chuàng)建Maven項(xiàng)目、添加ZXing相關(guān)依賴并創(chuàng)建類 276
14.3 實(shí)現(xiàn)生成二維碼圖片 277
14.4 實(shí)現(xiàn)識別二維碼 281
14.5 將編碼和解碼封裝到工具類QRCodeUtil中 284
14.6 實(shí)現(xiàn)掃碼識別二維碼 287
14.6.1 搭建界面 287
14.6.2 增加一個參數(shù)為BufferedImage的識別二維碼的方法 287
14.6.3 定義一個線程不斷捕獲圖片 290