本书对接信息技术的相关岗位需求,主要满足高等职业教育信息技术类相关专业Java程序设计课程的教学需要,分为Java程序设计基础(学习Java基础)、Java面向对象(学习Java面向对象)、Java核心技术实战(实现多人聊天室系统)和Java实用场景开发(实用场景应用开发)四部分,并通过鸿蒙App开发、多人聊天室系统,以及发送邮件和短信、生成和识别二维码、识别车牌等具有代表性的实用案例项目来讲解Java程序设计基础、Java面向对象、多线程、集合框架、I/O流、网络编程、异常处理、GUI等Java核心编程技术。本书提供一系列实践场景,通过完成编程任务和分析代码,融入Java编程的概念和技术,帮助学生沉浸式地学习Java核心编程技术。小节根据需要设置【随堂测试】和【动手练习】环节,用于促进师生互动,提高教与学的效果。支持模块化教学,可以使教师根据学生基础和教学目标,选取相关单元进行教学,具有“活页式”教材的效果。本书体系完整,内容实用,配套资源丰富,既可以作为高等职业教育信息技术类相关专业包括高职和本科学生的学习用书,也可以作为Java技术爱好者的自学参考用书。
覃国蓉,女,教授,就职于全国双高院校深圳信息职业技术学院,一直致力于物联网等专业的教学和科研工作,从业以来一直兢兢业业,教学经验丰富,是一位双师型高校教师。
第一部分 学习Java基础
单元1 初识Java 2
1.1 任务描述 2
1.2 了解什么是Java 2
1.3 JDK的下载和安装 3
1.3.1 区分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中创建Java项目和Java类 13
单元2 掌握Java编程基础 16
2.1 任务描述 16
2.2 在IDEA中完成一个可以交互的Java程序 16
2.3 Java编程基础 17
2.3.1 类、对象、方法和实例变量的概念 17
2.3.2 方法的调用 18
2.3.3 数据类型、变量和标识符的使用 19
2.3.4 算术运算符和赋值运算符的使用 21
2.4 初识面向对象 24
2.4.1 构造方法 24
2.4.2 方法的重载 25
2.4.3 类的实例成员和静态成员 26
2.4.4 final关键字 27
单元3 掌握Java的流程控制和数组类型 29
3.1 任务描述 29
3.2 掌握Java的流程控制 29
3.2.1 关系运算符和逻辑运算符 29
3.2.2 if判断 31
3.2.3 switch多重选择 33
3.2.4 条件表达式 35
3.2.5 while循环 35
3.2.6 do while循环 37
3.2.7 for循环 37
3.3 掌握Java的数组类型 38
3.3.1 数组变量的定义和初始化 38
3.3.2 查看数组的大小并访问数组中的元素 39
3.3.3 使用for循环遍历数组 40
3.3.4 使用for each循环遍历数组 41
3.3.5 多维数组 42
阶段测试:Java编程基础测试 43
第二部分 学习Java面向对象
单元4 开发一个简单的鸿蒙App 50
4.1 任务描述 50
4.2 搭建鸿蒙开发环境 50
4.2.1 注册华为账号并开通华为云 50
4.2.2 登录华为开发者联盟官网完成实名认证 51
4.2.3 安装并配置鸿蒙开发环境DevEco Studio 53
4.3 快速开发一个基于Java的鸿蒙App 58
4.3.1 创建一个新的项目 58
4.3.2 启动模拟器运行程序 59
4.4 掌握Java面向对象的基础 62
4.4.1 认识鸿蒙App中Java的类和包 62
4.4.2 通过继承编写鸿蒙App的Java类 64
4.4.3 通过覆盖实现App自身的业务逻辑 66
4.4.4 掌握super和this关键字 66
单元5 开发一个可以交互的鸿蒙App 68
5.1 任务描述 68
5.2 在布局文件中添加一个单击按钮 69
5.3 添加initiateUI()方法获得界面组件对象并初始化界面 70
5.3.1 在MainAbilitySlice类中添加数据成员 70
5.3.2 在Java中定义方法的语法 71
5.3.3 添加initiateUI()方法 72
5.4 实现事件监听者接口处理交互 73
5.4.1 通过添加addListener()方法来处理单击事件 73
5.4.2 事件监听者和接口 74
5.4.3 内部类和内部接口 75
5.4.4 类的继承关系和Object根类 76
5.5 在AbilitySlice类的onStart()方法中调用方法初始化界面并添加事件监听者 76
5.5.1 在onStart()方法中调用initiateUI()方法和addListener()方法 76
5.5.2 重新启动模拟器并运行程序 77
5.5.3 匿名内部类 78
5.6 掌握抽象类、接口和Java的单继承机制 79
阶段测试:Java面向对象测试 80
第三部分 实现多人聊天室系统
单元6 准备开发环境 88
6.1 任务描述 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个区和5个状态 100
6.3.4 在本地对源代码进行基本的版本控制 101
6.3.5 通过远程版本库管理源代码的版本 105
6.3.6 在IDEA中配置全局Git 110
阶段测试:使用Maven及Git测试 111
单元7 连接客户端与服务器端 114
7.1 了解多人聊天室系统的需求和本单元任务 114
7.1.1 了解多人聊天室系统的需求 114
7.1.2 本单元任务描述及实现思路 115
7.2 编写聊天服务器的ChatServer类 116
7.2.1 创建ChatServer类 116
7.2.2 创建绑定到指定端口的ServerSocket对象 119
7.2.3 监听客户端连接请求 121
7.2.4 获得socket对象对应的输入流对象 122
7.2.5 通过调用对象流的readObject()方法来接收客户端的输入 124
7.2.6 输出客户端进入聊天室的提示信息 125
7.2.7 向客户端发送欢迎信息 126
7.3 编写客户端的ChatClient类 128
7.4 联合测试ChatServer和ChatClient 131
7.5 编写支持与多个客户端交互的ChatChannel类 133
7.5.1 线程的引入 133
7.5.2 编写ChatChannel类 137
7.6 将版本1代码托管到码云 139
7.6.1 在码云上添加一个远程仓库 139
7.6.2 在IDEA中创建本地仓库 140
7.6.3 在IDEA中将代码提交到本地仓库 140
7.6.4 在IDEA中建立本地仓库与远程仓库的关联 142
7.6.5 在IDEA中上传代码到码云 142
阶段测试:网络编程、I/O流、异常及多线程测试 143
单元8 让客户端可以不断收发消息 145
8.1 本单元的任务描述及实现思路 145
8.1.1 任务描述 145
8.1.2 实现思路 145
8.2 修改服务器端的ChatChannel类 147
8.2.1 使服务器端能不断接收并转发客户端发送的消息 147
8.2.2 抽取ois、oos和name局部变量为成员变量 148
8.2.3 抽取接收用户姓名并发送欢迎信息的代码到方法中 150
8.3 修改客户端的ChatClient类 153
8.3.1 抽取socket、oos、ois、name局部变量为ChatClient类的成员变量 153
8.3.2 在客户端添加处理接收消息的线程并启动 154
8.3.3 在客户端添加处理发送消息的线程并启动 156
8.3.4 抽取输入并发送姓名和接收欢迎信息的代码到方法中 157
8.4 联合测试并向码云提交一个新的版本 161
8.4.1 服务器端与客户端的联合测试 161
8.4.2 向码云提交一个新的版本 161
单元9 实现群聊和私聊 164
9.1 任务描述 164
9.2 任务1:群聊的实现 164
9.2.1 群聊的实现思路和集合的引入 164
9.2.2 增加一个用static修饰的Map类的allMap成员变量 166
9.2.3 定义一个群发消息给所有客户端的sendToAll()方法 167
9.2.4 同步allMap和客户端的变化 167
9.2.5 增加在收到客户端消息时群发消息的代码 169
9.2.6 联合测试群聊 169
9.2.7 选择文件并提交到码云 170
9.3 任务2:私聊的实现 172
9.3.1 私聊的实现思路和String的相关方法 172
9.3.2 定义发送私聊消息的sendSecretMsg()方法 173
9.3.3 解析客户端发送的消息以区分私聊和群聊 173
9.3.4 联合测试私聊 175
9.3.5 选择文件并提交到码云 176
阶段测试:多线程、字符串、I/O流、异常及集合类测试 178
单元10 提高系统健壮性和用户体验 181
10.1 任务描述及实现思路 181
10.2 简单处理服务器端未启动:提示后直接退出 182
10.2.1 定位处理位置 182
10.2.2 在处理位置出现提示后直接退出 183
10.2.3 测试客户端并提交代码到码云 185
10.3 高级处理服务器端未启动:尝试不断连接服务器 186
10.3.1 在ChatClient中定义连接服务器的connect()方法 186
10.3.2 通过调用connect()方法来连接服务器 187
10.3.3 联合测试并提交到码云 188
10.4 简单处理聊天过程中服务器端宕机:提示后直接退出 189
10.4.1 定位处理位置 189
10.4.2 简单处理聊天过程中服务器端宕机 190
10.4.3 联合测试简单处理并提交代码到码云 193
10.5 高级处理聊天过程中服务器端宕机:尝试不断连接服务器 194
10.5.1 在ChatClient中定义重连方法reconnect() 194
10.5.2 高级处理聊天过程中服务器端宕机 195
10.5.3 修改sendNameAndRecvEcho()方法 198
10.5.4 联合测试高级处理并提交代码到码云 199
阶段测试:Java程序设计测试 200
单元11 图形用户界面的实现 204
11.1 任务描述及实现思路 204
11.2 实现界面的ClientUI类 206
11.2.1 将界面组件定义成界面ClientUI类的成员变量 206
11.2.2 定义搭建界面的initiateUI()方法并在构造方法中调用 206
11.2.3 使ClientUI类成为事件监听者 209
11.2.4 定义添加事件监听者的addListener()方法并在构造方法中调用 211
11.2.5 界面部分单独测试 214
11.3 完成一个具有图形界面的客户端类 215
11.3.1 删除ChatClient类中发送消息的线程代码 215
11.3.2 将ClientUI类定义成ChatClient类的内部类 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 联合测试并提交代码 223
11.4.1 联合测试 223
11.4.2 提交到码云 227
第四部分 实用场景应用开发
单元12 实现发送邮件和发送短信 230
12.1 任务描述 230
12.2 任务1:实现发送邮件 230
12.2.1 JavaMail介绍 230
12.2.2 使用JavaMail发送邮件 231
12.2.3 将发送邮件的代码封装到工具类MailUtil中 234
12.3 任务2:实现发送短信 238
12.3.1 阿里短信服务平台API介绍 238
12.3.2 使用阿里短信服务编写代码实现发送短信 239
单元13 实现车牌识别系统 245
13.1 任务描述 245
13.2 文字识别开发接口Tesseract OCR和百度AI开放平台 246
13.2.1 文字识别开发接口Tesseract OCR和Java开发包Tess4J 246
13.2.2 百度AI开放平台OCR服务 246
13.3 准备测试图片 246
13.4 使用Tess4J实现车牌识别 247
13.4.1 创建Maven项目chepai并添加相关依赖 247
13.4.2 准备中文字库 249
13.4.3 编码实现车牌识别 250
13.4.4 将车牌识别代码封装到方法中并测试3个车牌 252
13.5 使用百度AI开放平台实现车牌识别 255
13.5.1 编码前的准备 255
13.5.2 调用百度API接口实现车牌识别系统 256
13.5.3 使用GsonFormatPlus生成识别结果的实体类Result 263
13.5.4 定义重载的车牌识别方法 267
13.5.5 使用webcam-capture增加摄像头抓拍车牌功能 270
单元14 生成和识别二维码 275
14.1 任务描述 275
14.2 创建Maven项目、添加ZXing相关依赖并创建类 276
14.3 实现生成二维码图片 277
14.4 实现识别二维码 281
14.5 将编码和解码封装到工具类QRCodeUtil中 284
14.6 实现扫码识别二维码 287
14.6.1 搭建界面 287
14.6.2 增加一个参数为BufferedImage的识别二维码的方法 287
14.6.3 定义一个线程不断捕获图片 290