Java是目前最具影响力的、卓越的编程语言之一。Java凭借其编写一次,到处运行的特性很好地支持互联网应用所要求的跨平台能力,成为服务器端开发的主流语言。现在人类已进入移动互联网时代,而Java依然是当之无愧的主角。随着人工智能和大数据技术的蓬勃发展,Java也不断发展,使其在数据处理方面大有用武之地。
Java是经典的面向对象编程语言,同时也是一门优秀的教学语言。Java拥有优雅和简明的语法及丰富的类库,让编程人员尽可能地将精力集中在业务领域的问题求解上。
本书内容具有以下特点:
(1) 作为面向初学者的教程,本书编写和取材着重体现Java面向对象编程思想和面向问题求解的理念; 采用基础优先、案例驱动的教学方式,从编程基础开始,逐步引入面向对象思想。
(2) 本书包含三大主题: Java编程语言、Java面向对象思想和Java常用类库。这些是一名专业Java程序员必须熟练掌握的核心内容。
(3) 本书基于Java 17版本,该版本是一个长期支持的Java版本(LTS)。本书对上一版进行了全面修订,新增内容主要包括JShell编程环境、新的switch结构和switch表达式、局部变量类型推断、文本块、记录类型等。
全书共分19章,主要内容如下:
第1章介绍Java语言的起源和发展、Java开发环境的构建、简单Java程序的开发和运行、集成开发环境Eclipse及JShell的使用。
第2章介绍数据类型、常用运算符、表达式及数据类型的转换等。
第3章讨论程序的流程控制结构,包括选择结构和循环结构,重点介绍if结构、switch结构、while循环、do…while循环及for循环结构。
第4章重点介绍类的定义以及对象的创建,包括方法的设计、static修饰符的使用、对象初始化和变量作用域、局部变量类型推断以及垃圾回收等。
第5章和第6章分别介绍数组和字符串,它们是基本的编程结构,包括数组和多维数组、String类和StringBuilder类等,另外还介绍了Arrays类的使用、格式化输出等。
第7章介绍面向对象特征,主要内容有包与类库、封装性与访问修饰符、类的继承、final关键字、对象转换与多态性等。这些是面向对象编程的核心内容。
第8章介绍Java常用核心类,包括Object类、Math类、System类和基本类型包装类等,另外介绍了BigInteger和BigDecimal类及新的日期和时间API类。
第9章介绍接口和内部类,包括接口的定义、接口继承、接口实现以及在接口中定义静态方法、默认方法和私有方法,还介绍了内部类的使用。
第10章介绍Java异常处理,包括异常类型、异常处理机制、自定义异常和断言的使用。
第11章介绍记录、枚举和注解类型。它们是Java的引用数据类型,应用在特定场合,为编程提供了方便。
第12章介绍泛型和集合,包括泛型编程的基本概念、各种类型集合接口和类的使用、Collections类的常用方法等。
第13章介绍Java输入输出,包括二进制流和文本流的使用、对象序列化、Files类的常用操作。
第14章介绍函数式编程,包括Lambda表达式、函数式接口的使用及Stream API的基本操作。
第15章和第16章介绍JavaFX图形界面编程,包括界面布局面板、JavaFX各类形状的使用、事件处理,还介绍了图像和特效、多媒体和动画以及各种常用控件的使用。
第17章介绍JDBC数据库编程,包括JDBC体系结构、数据库访问步骤、常用的JDBC API以及DAO设计模式等。
第18章介绍并发编程基础,主要介绍多线程编程、线程的状态与调度、线程同步与协调、并发工具等。
第19章介绍Java网络编程,主要介绍基于TCP的通信、基于UDP的通信、基于HTTP的URL编程等。
附录A是综合案例,介绍了6个综合项目案例,每个案例利用本书介绍的多个知识点实现。读者应仔细分析和研究这些案例的设计思想,为实现较大的项目奠定坚实基础。
为便于教学,本书提供丰富的配套资源,包括教学大纲、教学课件、电子教案、程序源码、习题答案、
教学进度表、在线作业及答案和30小时的微课视频。
资源下载提示
课件等资源: 扫描封底的课件下载二维码,在公众号书圈下载。
素材(源码)等资源: 扫描目录上方的二维码下载。
在线作业: 扫描封底的作业系统二维码,登录网站在线做题及查看答案。
视频等资源: 扫描封底的文泉云盘防盗码,再扫描书中相应章节的二维码,可以在线学习。
本书吸取了国内外有关著作和
资料的精华,同时凝聚了作者多年的教学实践经验。
本书由沈泽刚主编,伞晓丽、鲁富宇、彭霞、孙蕾、宋微、董研、张丽娟和周津等老师参加了部分编写工作。
感谢清华大学出版社魏江江分社长的大力支持以及许多编辑的辛勤工作。
感谢使用本书的老师提出的宝贵的修改建议。感谢本书参考的文献的作者。
由于作者水平有限,书中难免存在不妥和错误之处,恳请广大读者和同行批评指正。
编者2023年4月
第1章Java起步入门
1.1Java的起源与演进
1.1.1Java的发展历程
1.1.2Java语言的优点
1.2Java平台与运行机制
1.2.1Java平台与应用领域
1.2.2JVM、JRE和JDK
1.2.3Java字节码与平台
独立
1.3建立开发环境
1.3.1JDK的下载与安装
1.3.2关于环境变量
1.3.3Java API文档
1.4第一个Java程序
1.4.1Java程序开发步骤
1.4.2第一个程序分析
1.5集成开发环境
1.5.1使用Eclipse开发Java
程序
1.5.2使用IntelliJ IDEA开发
Java程序
1.6JShell交互式编程环境
1.7小结
编程练习
第2章数据类型与运算符
2.1Java数据类型
2.1.1基本数据类型
2.1.2引用数据类型
2.2标识符与语句
2.2.1Java标识符
2.2.2Java关键字
2.2.3变量与赋值
2.2.4语句
2.3基本数据类型及字面值
2.3.1整数类型
2.3.2浮点类型
2.3.3字符类型
2.3.4布尔类型
2.4字符串类型
2.5软件开发过程
2.6数据类型转换
2.6.1自动类型转换
2.6.2强制类型转换
2.6.3表达式类型自动提升
2.7运算符
2.7.1算术运算符
2.7.2关系运算符
2.7.3逻辑运算符
2.7.4赋值运算符
2.7.5位运算符
2.7.6运算符的优先级和
结合性
2.8程序文档风格和注释
2.8.1一致的缩进和空白
2.8.2块的风格
2.8.3程序注释
2.9案例学习求解线性
方程组
2.10案例学习计算并显示当前
时间
2.11小结
编程练习
第3章结构化编程
3.1选择结构
3.1.1单分支if语句
3.1.2双分支if…else语句
3.1.3条件运算符
3.1.4嵌套的if语句和多分支的
if…else语句
3.2switch语句与switch表
达式
3.2.1switch语句
3.2.2switch表达式
3.3案例学习两位数加减
运算
3.4循环结构
3.4.1while循环
3.4.2do…while循环
3.4.3for循环
3.4.4循环的嵌套
3.4.5break语句和continue
语句
3.5案例学习求最大公
约数
3.6案例学习打印输出若干
素数
3.7小结
编程练习
第4章类、对象和方法
4.1面向对象概述
4.1.1OOP的产生
4.1.2基本概念
4.1.3OOP的优势
4.2定义类与创建对象
4.2.1类的定义
4.2.2创建和使用对象
4.2.3用UML图表示类
4.2.4理解栈与堆
4.3构造方法
4.3.1无参数构造方法
4.3.2带参数构造方法
4.3.3构造方法的重载
4.3.4this关键字
4.4案例学习使用自定义Date
日期类
4.5方法设计
4.5.1如何设计方法
4.5.2调用方法
4.5.3方法重载
4.5.4方法参数的传递
4.6案例学习分数类Fraction
的设计
4.7静态变量和静态方法
4.7.1静态变量
4.7.2静态方法
4.7.3静态工厂方法
4.7.4单例模式
4.7.5方法递归
4.8案例学习打印斐波那契
数列
4.9对象初始化
4.9.1实例变量的初始化
4.9.2静态变量的初始化
4.10变量的作用域
4.11局部变量类型推断
4.12垃圾回收
4.13小结
编程练习
第5章数组
5.1创建和使用数组
5.1.1声明和创建数组
5.1.2访问数组元素
5.1.3数组初始化器
5.1.4增强的for循环
5.2数组的应用
5.2.1数组元素的复制
5.2.2数组参数与返回值
5.2.3可变参数的方法
5.2.4数组的查找
5.3案例学习数组起泡
排序
5.4java.util.Arrays类
5.4.1数组的复制
5.4.2数组的排序
5.4.3元素的查找
5.4.4数组的比较
5.4.5填充数组元素
5.5案例学习桥牌随机
发牌
5.6二维数组
5.6.1二维数组的定义
5.6.2数组元素的使用
5.6.3数组初始化器
5.6.4实例矩阵乘法
5.6.5不规则二维数组
5.7案例学习打印输出魔
方数
5.8小结
编程练习
第6章字符串类
6.1String类及基本操作
6.1.1创建String类对象
6.1.2字符串基本操作
6.1.3String对象的不变性
6.1.4字符串比较
6.1.5字符串的查找和
匹配
6.1.6字符串的拆分与
组合
6.1.7字符串转换为数组
6.2文本块
6.3命令行参数
6.4格式化数据
6.5StringBuilder类
6.5.1创建StringBuilder
对象
6.5.2StringBuilder类常用
操作
6.5.3 运算符的重载
6.6案例学习判定回
文串
6.7案例学习字符串加密、
解密
6.8小结
编程练习
第7章面向对象特征
7.1面向对象的三大特征
7.2包、类库与模块
7.2.1包与package语句
7.2.2类的导入
7.2.3Java类库
7.2.4Java模块系统
7.3封装性与访问权限
7.3.1类的访问权限
7.3.2类成员的访问权限
7.4类的继承
7.4.1类继承的实现
7.4.2方法覆盖
7.4.3super关键字
7.4.4调用父类的构造方法
7.5final关键字
7.5.1final修饰类
7.5.2final修饰方法
7.5.3final修饰变量
7.6抽象类
7.7对象转换与多态性
7.7.1对象转换
7.7.2instanceof运算符
7.7.3多态与动态绑定
7.8案例学习自定义类库的
开发
7.9小结
编程练习
第8章Java核心类库
8.1java.lang.Object类
8.1.1toString()方法
8.1.2equals()方法
8.1.3hashCode()方法
8.1.4clone()方法
8.2java.lang.Math类
8.3java.lang.System类
8.4基本类型包装类
8.4.1Character 类
8.4.2Boolean类
8.4.3创建数值类对象
8.4.4数值类的常量
8.4.5自动装箱与自动拆箱
8.4.6字符串与基本类型
转换
8.5案例学习一个整数栈的
实现
8.6BigInteger类和BigDecimal
类
8.7日期和时间API
8.7.1LocalDate本地
日期类
8.7.2LocalTime本地
时间类
8.7.3LocalDateTime本地日期
和时间类
8.7.4Instant类、Duration类
和Period类
8.7.5其他常用类
8.7.6日期和时间API的解析
和格式化
8.8案例学习打印输出
年历
8.9小结
编程练习
第9章接口与内部类
9.1接口
9.1.1接口的定义
9.1.2常量
9.1.3接口的实现
9.1.4接口的继承
9.1.5接口类型的使用
9.2接口的非抽象方法
9.2.1静态方法
9.2.2默认方法
9.2.3私有方法
9.2.4解决默认方法冲突
9.3内部类
9.3.1成员内部类
9.3.2静态内部类
9.3.3匿名内部类
9.3.4局部内部类
9.4接口示例
9.4.1ComparableT
接口
9.4.2ComparatorT
接口
9.5案例学习比较员工对象
大小
9.6小结
编程练习
第10章异常处理
10.1异常与异常类
10.1.1异常的概念
10.1.2异常类
10.2捕获异常
10.2.1异常的抛出与
捕获
10.2.2try…catch…finally
语句
10.3捕获多个异常
10.4throws短语和throw
语句
10.5try…with…resources
语句
10.6自定义异常类
10.7断言
10.7.1使用断言
10.7.2开启和关闭断言
10.7.3何时使用断言
10.8案例学习数组不匹配
异常
10.9小结
编程练习
第11章记录、枚举和注解类型
11.1记录类型
11.2枚举类型
11.2.1枚举类型的定义
11.2.2枚举类型的方法
11.2.3枚举在switch语句
中的应用
11.2.4枚举类型的构造
方法
11.3注解类型
11.3.1注解概述
11.3.2标准注解
11.3.3定义注解类型
11.3.4标准元注解
11.4小结
编程练习
第12章泛型与集合
12.1泛型
12.1.1泛型类
12.1.2泛型接口
12.1.3泛型方法
12.1.4通配符(?)的使用
12.1.5有界类型参数
12.1.6类型擦除
12.2集合框架
12.3List接口及实现类
12.3.1List的操作
12.3.2ArrayList类
12.3.3遍历集合元素
12.3.4数组转换为List
对象
12.4Set接口及实现类
12.4.1HashSet类
12.4.2用Set对象实现集合
运算
12.4.3TreeSet类
12.4.4对象顺序
12.5Queue接口及实现
类
12.5.1Queue接口和Deque
接口
12.5.2ArrayDeque类和
LinkedList类
12.5.3集合转换
12.6案例学习用集合存储、
遍历员工记录
12.7Map接口及实现类
12.7.1Map接口
12.7.2HashMap类
12.7.3TreeMap类
12.7.4在Map键和值上
迭代
12.7.5Hashtable类和Enu
meration接口
12.8Collections类
12.9案例学习用Map统计
单词数量
12.10小结
编程练习
第13章输入/输出
13.1I/O概述
13.1.1File类应用
13.1.2文本I/O与二进制
I/O
13.2二进制I/O流
13.2.1OutputStream类和
InputStream类
13.2.2FileOutputStream类和
FileInputStream类
13.2.3BufferedOutputStream类
和BufferedInputStream
类
13.2.4DataOutputStream类和
DataInputStream类
13.2.5PrintStream类
13.2.6标准输入/输出流
13.3案例学习文件加密、解密
程序
13.4文本I/O流
13.4.1Reader类和Writer类
13.4.2FileWriter类和
FileReader类
13.4.3BufferedReader类和
BufferedWriter类
13.4.4PrintWriter类
13.4.5使用Scanner对象
13.5案例学习统计文件行数、
单词数和字符数
13.6对象序列化
13.6.1对象序列化与
对象流
13.6.2向ObjectOutputStream
中写入对象
13.6.3从ObjectInputStream
中读取对象
13.6.4序列化数组
13.7Files类操作
13.7.1Path对象
13.7.2创建和删除目录及
文件
13.7.3文件属性操作
13.7.4文件和目录的复制与
移动
13.7.5获取目录的对象
13.7.6小文件的读写
13.7.7使用Files类创建流
对象
13.8小结
编程练习
第14章函数式编程
14.1Lambda表达式
14.1.1从匿名类到Lambda
表达式
14.1.2Lambda表达式
语法
14.1.3函数式接口
14.2预定义函数式接口
14.2.1ConsumerT
接口
14.2.2SupplierT
接口
14.2.3PredicateT
接口
14.2.4FunctionT,R
接口
14.3方法引用和构造方法
引用
14.3.1方法引用
14.3.2构造方法引用
14.4Stream API
14.4.1流概述
14.4.2创建与获得流
14.4.3连接流和限制流
14.4.4过滤流
14.4.5流转换
14.4.6流归约
14.4.7收集结果
14.4.8基本类型流
14.4.9并行流
14.5案例学习用Stream统计
员工的平均年龄
14.6案例学习用Stream计算
多个数的斐波那契数
14.7小结
编程练习
第15章JavaFX图形界面
15.1JavaFX概述
15.1.1Java GUI编程
简史
15.1.2添加JavaFX软
件包
15.1.3JavaFX的主要
功能
15.2JavaFX程序基本结构
15.2.1舞台和场景
15.2.2场景图和节点
15.2.3Application类生命周期
方法
15.2.4JavaFX程序启动
15.3JavaFX属性与绑定
15.3.1JavaFX属性
15.3.2属性绑定
15.4JavaFX界面布局
15.4.1JavaFX坐标系
15.4.2Pane面板
15.4.3HBox面板
15.4.4VBox面板
15.4.5BorderPane面板
15.4.6FlowPane面板
15.4.7GridPane面板
15.4.8StackPane面板
15.4.9使用CSS设置控件
样式
15.5Color类和Font类
15.5.1Color类
15.5.2Font类
15.6JavaFX形状
15.6.1Line类
15.6.2Rectangle类
15.6.3Circle类
15.6.4Ellipse类
15.6.5Arc类
15.6.6Polygon类
15.6.7Text类
15.7Image类和ImageView
类
15.8特效实现
15.8.1阴影效果
15.8.2模糊效果
15.8.3倒影效果
15.8.4发光效果
15.9案例学习考试成绩
分布图
15.10小结
编程练习
第16章事件处理与常用控件
16.1事件处理
16.1.1事件处理模型
16.1.2事件类和事件
类型
16.1.3使用事件处理器
16.1.4动作事件
16.1.5鼠标事件
16.1.6键盘事件
16.1.7为属性添加监
听器
16.2常用控件
16.2.1Label类
16.2.2Button类
16.2.3TextField类和
PasswordField类
16.2.4TextArea类
16.2.5CheckBox类
16.2.6RadioButton类
16.2.7ComboBox类
16.2.8Slider类
16.2.9菜单设计
16.2.10FileChooser类
16.3案例学习一个猜数
游戏
16.4音频和视频
16.5动画
16.5.1过渡动画
16.5.2淡出效果
16.5.3移动效果
16.5.4缩放效果
16.5.5旋转效果
16.5.6时间轴动画
16.6案例学习升国旗
奏国歌
16.7小结
编程练习
第17章JDBC数据库编程
17.1数据库简介
17.1.1关系数据库简述
17.1.2数据库语言SQL
17.2JDBC体系结构
17.2.1JDBC访问数据库
17.2.2JDBC API
17.3数据库访问步骤
17.3.1加载驱动程序
17.3.2建立连接对象
17.3.3创建语句对象
17.3.4执行语句获得执行
结果
17.3.5关闭有关对象
17.4使用PreparedStatement
对象
17.4.1创建PreparedStatement
对象
17.4.2带参数的SQL
语句
17.5创建和访问 MySQL
数据库
17.5.1创建数据库和表
17.5.2访问MySQL
数据库
17.6案例学习使用数据源
连接数据库
17.7DAO设计模式
17.8可滚动和可更新的
ResultSet
17.8.1可滚动的ResultSet
17.8.2可更新的ResultSet
17.9案例学习数据库存取
图像数据
17.10小结
编程练习
第18章并发编程基础
18.1Java多线程
18.2创建任务和线程
18.2.1实现Runnable
接口
18.2.2继承Thread类
18.2.3主线程与守护
线程
18.3线程的状态与调度
18.3.1线程的状态
18.3.2线程的优先级和
调度
18.3.3控制线程的结束
18.4线程同步与对象锁
18.4.1线程冲突与原子
操作
18.4.2方法同步
18.4.3块同步
18.5线程协调
18.5.1不正确的设计
18.5.2监视器模型
18.6并发工具
18.6.1原子变量
18.6.2Executor和
ExecutorService
18.6.3Callable和
Future
18.6.4使用Lock锁定
对象
18.7案例学习百米飞人
大战
18.8小结
编程练习
第19章Java网络编程
19.1网络编程概述
19.1.1网络分层与协议
19.1.2客户服务器结构
19.1.3IP地址和域名
19.1.4端口号与套接字
19.2基于TCP的通信
19.2.1基于TCP和UDP通信
的对比
19.2.2ServerSocket类和
Socket类
19.2.3简单的TCP通信的
例子
19.3基于UDP的通信
19.3.1DatagramSocket类和
DatagramPacket类
19.3.2简单的UDP通信
例子
19.4基于HTTP的通信
19.4.1理解HTTP
19.4.2URL和URL类
19.4.3URLConnection类
19.5案例学习访问Web
应用程序
19.6小结
编程练习
附录A综合案例
案例1英文字母随机漫步
案例2八皇后问题
案例3简单的日历程序
案例4简易计算器
案例5简单的五子棋游戏
案例6简单的Web服务器
参考文献