本书以最新的Java SE 8为基础,全面讲解Java编程语言、Java面向对象技术和Java核心类库。全书共18章,主要内容包括Java语言基础(数据类型、运算符与表达式、程序流程控制)、类与对象基础、数组与字符串、Java面向对象特征(类的继承与多态、内部类与注解类型、接口与Lambda表达式)、常用核心类、泛型与集合框架、异常处理、输入输出、JavaFX图形界面及事件处理、常用控件、JDBC数据库编程、并发编程基础、网络编程等。
本书知识点全面,体系结构清晰,重点突出,文字准确,内容组织循序渐进,并有大量精选示例。每章配有精心设计的编程练习题,帮助读者理解掌握编程技术。本书提供教学课件、程序源代码以及部分教学视频与习题解答等资源。
本书可作为高等院校计算机专业或相关专业的“Java程序设计”或“面向对象程序设计”课程的教材,也可作为Java认证考试及编程爱好者的参考资料。
前言
Java是一门卓越的程序设计语言,同时,它也是基于Java语言、从移动应用开发到企业级开发的平台。随着Web的发展,应用Web成为大型应用开发的主流方式,Java凭借其“编写一次,到处运行”的特性很好地支持了互联网应用所要求的跨平台能力,成为服务器端开发的主流语言。现在人类已进入移动互联网时代,而Java依然是当之无愧的主角。
Java是一门经典的面向对象语言,同时也是一门优秀的教学语言。Java拥有优雅和简明的语法以及丰富的类库,让编程人员尽可能地将精力集中在业务领域的问题求解上。
本版在第2版的基础上增加了Java SE 8的新特性,如接口的默认方法和静态方法、Lambda表达式、新的日期/时间API、Stream API,图形用户界面用JavaFX替换了Swing,另外增加了Java网络编程一章,其他章节也做了部分修订。
本书作为面向初学者的教程,编写和取材着重体现Java面向对象编程思想和面向问题求解的理念。本书采用基础优先的方式,从编程基础开始,逐步引入面向对象思想。
本书包含三大主题,这是一名专业Java程序员必须熟练掌握的内容。
-
Java编程语言;
-
Java面向对象思想;
-
Java核心类库。
全书共18章,主要内容如下:
第1章介绍Java语言的起源和发展、Java开发环境的构建、简单Java程序的开发和运行、程序设计风格与文档以及集成开发环境Eclipse的使用。
第2章介绍数据类型、常用运算符、表达式以及数据类型的转换等。
第3章介绍程序的流程控制结构,包括选择结构和循环结构。重点介绍if结构、switch结构、while循环、do-while循环以及for循环结构。
第4章首先介绍了面向对象编程的基本概念,然后讲解Java类的定义以及对象的创建,其中还包括方法的设计、static修饰符的使用、包的概念以及类的导入等。
第5和第6章介绍Java数组和字符串及其应用,包括数组和多维数组、String类、StringBuilder类和StringBuffer类,另外还介绍了Arrays类的使用、格式化输出等。
第7章介绍类的继承与多态,其中包括继承性、封装性、多态性以及对象转换等。这是面向对象编程的核心内容。
第8章介绍Java常用核心类,包括Object类、Math类、基本数据类型包装类等,另外介绍了Java 8新增的日期-时间API相关的类。
第9章介绍内部类、枚举类型和注解类型,包括各种类型的内部类、枚举的定义与使用,标准注解的使用、自定义注解类型。
第10章介绍接口和Lambda表达式,包括接口的定义、接口继承、接口实现以及在接口中定义静态方法和默认方法。此外,还介绍了Lambda表达式的使用。
第11章介绍Java集合框架,包括泛型编程基本概念、各种类型集合接口与类的使用、Collections类的常用方法,同时还介绍了Stream API的简单用法。
第12章介绍Java异常处理,包括异常类型、异常处理机制、自定义异常、断言的使用。
第13章介绍Java输入输出,包括二进制流和文本流的使用、对象序列化以及Files类的常用操作。
第14和第15章介绍JavaFX图形界面编程,包括界面布局面板、JavaFX各类形状的使用、事件处理,还包括图像和特效、多媒体和动画以及各种常用控件的使用。
第16章介绍JDBC数据库编程基础,包括数据库和MySQL基础,数据库访问步骤、常用的JDBC API以及DAO设计模式等。
第17章介绍Java并发编程基础,包括多线程编程、线程的状态与调度、线程同步与协调、并发工具等。
第18章介绍Java网络编程,包括基于TCP的Java套接字和基于UDP的编程、基于HTTP的URL编程等。
本书吸取了国内外有关著作和资料的精华,强调面向问题求解的教学方法是本书特色,同时凝聚了作者多年的教学实践经验。
本书每章提供的二维码可观看相应章节的视频讲解。扫描封底“课件下载”二维码可获得本书PPT教学课件、程序源代码、教学大纲等课程资源。与本书配套的《Java语言程序设计(第3版)学习指导与习题解析》(清华大学出版社出版)中提供了学习指导、实训任务及编程练习的参考答案。
本书由沈泽刚主编,伞晓丽、彭霞、孙蕾、宋微、董研、张丽娟等教师参加了部分编写和资料整理工作。本书出版得到了清华大学出版社魏江江主任的大力支持与合作。在此谨向以上各位表示衷心感谢。
本书在写作中参考了大量文献,向这些文献的作者表示衷心感谢。由于作者水平有限,书中难免存在不妥和错误之处,恳请广大读者和同行批评指正。
第1章 Java语言概述... 1
1.1 Java起源与发展... 1
1.1.1 Java的起源... 1
1.1.2 Java的发展历程... 2
1.1.3 Java语言的优点... 3
1.2 Java平台与开发环境... 3
1.2.1 Java平台与应用领域... 3
1.2.2 JDK、JRE和JVM.. 4
1.2.3 Java字节码与平台独立... 4
1.2.4 JDK的下载与安装... 5
1.2.5 Java API文档... 6
1.3 Java程序基本结构... 6
1.3.1 Java程序开发步骤... 6
1.3.2 第一个程序分析... 8
1.4 程序文档风格和注释... 9
1.4.1 一致的缩进和空白... 9
1.4.2 块的风格... 9
1.4.3 Java程序注释... 10
1.5 Eclipse集成开发环境... 10
1.6 小结... 12
编程练习... 12
第2章 Java语言基础... 13
2.1 简单程序的开发... 13
2.1.1 从键盘读取数据... 14
2.1.2 变量与赋值... 15
2.1.3 Java标识符... 15
2.1.4 Java关键字... 16
2.2 数据类型... 16
2.2.1 数据类型概述... 16
2.2.2 字面值和常量... 17
2.2.3 整数类型... 17
2.2.4 浮点类型... 19
2.2.5 字符类型... 20
2.2.6 布尔类型... 21
2.2.7 字符串类型... 22
2.3 运算符... 23
2.3.1 算术运算符... 23
2.3.2 关系运算符... 25
2.3.3 逻辑运算符... 25
2.3.4 赋值运算符... 26
2.3.5 位运算符... 28
2.3.6 运算符的优先级和结合性... 30
2.4 数据类型转换... 31
2.4.1 自动类型转换... 31
2.4.2 强制类型转换... 32
2.4.3 表达式中类型自动提升... 33
2.5 小结... 34
编程练习... 34
第3章 选择与循环... 36
3.1 选择... 36
3.1.1 单分支if语句... 36
3.1.2 双分支if-else语句... 37
3.1.3 嵌套的if语句和多分支的if-else语句... 39
3.1.4 条件运算符... 40
3.1.5 switch语句结构... 41
3.2 循环... 43
3.2.1 while循环... 43
3.2.2 do-while循环... 45
3.2.3 for循环... 45
3.2.4 循环的嵌套... 47
3.2.5 break语句和continue语句... 47
3.3 示例学习... 49
3.3.1 任意抽取一张牌... 49
3.3.2 求最大公约数... 50
3.3.3 打印输出若干素数... 51
3.4 小结... 52
编程练习... 53
第4章 类和对象... 55
4.1 面向对象概述... 55
4.1.1 OOP的产生... 55
4.1.2 面向对象的基本概念... 56
4.1.3 面向对象基本特征... 57
4.1.4 OOP的优势... 58
4.2 为对象定义类... 58
4.2.1 类的定义... 59
4.2.2 对象的使用... 62
4.2.3 理解栈与堆... 64
4.2.4 用UML图表示类... 64
4.3 方法设计... 65
4.3.1 如何设计方法... 65
4.3.2 方法的调用... 67
4.3.3 方法重载... 67
4.3.4 构造方法... 68
4.3.5 this关键字的使用... 70
4.3.6 方法参数的传递... 71
4.4 静态变量和静态方法... 72
4.4.1 静态变量... 72
4.4.2 静态方法... 74
4.4.3 单例模式... 75
4.4.4 递归... 76
4.5 对象初始化和清除... 77
4.5.1 实例变量的初始化... 77
4.5.2 静态变量的初始化... 79
4.5.3 垃圾回收器... 80
4.5.4 变量作用域和生存期... 81
4.6 包与类的导入... 82
4.6.1 包... 82
4.6.2 类的导入... 84
4.6.3 Java编译单元... 85
4.7 小结... 85
编程练习... 86
第5章 数组... 90
5.1 创建和使用数组... 90
5.1.1 数组定义... 90
5.1.2 增强的for循环... 93
5.1.3 数组元素的复制... 93
5.1.4 数组参数与返回值... 95
5.1.5 可变参数的方法... 96
5.1.6 实例:随机抽取4张牌... 97
5.1.7 实例:一个整数栈类... 98
5.2 Arrays类... 99
5.2.1 数组的排序... 100
5.2.2 元素的查找... 100
5.2.3 数组元素的复制... 101
5.2.4 填充数组元素... 101
5.2.5 数组的比较... 102
5.3 二维数组... 103
5.3.1 二维数组定义... 103
5.3.2 数组元素的使用... 104
5.3.3 数组初始化器... 105
5.3.4 实例:矩阵乘法... 105
5.3.5 不规则二维数组... 106
5.4 小结... 108
编程练习... 108
第6章 字符串... 111
6.1 String类... 111
6.1.1 创建String类对象... 111
6.1.2 字符串基本操作... 112
6.1.3 字符串查找... 114
6.1.4 字符串转换为数组... 114
6.1.5 字符串比较... 115
6.1.6 字符串的拆分与组合... 117
6.1.7 String对象的不变性... 118
6.1.8 命令行参数... 118
6.2 格式化输出... 119
6.3 StringBuilder类和StringBuffer类... 122
6.3.1 创建StringBuilder对象... 122
6.3.2 StringBuilder的访问和修改... 122
6.3.3 运算符“ ”的重载... 124
6.4 小结... 124
编程练习... 124
第7章 继承与多态... 126
7.1 类的继承... 126
7.1.1 类继承的实现... 126
7.1.2 方法覆盖... 129
7.1.3 super关键字... 130
7.1.4 调用父类的构造方法... 132
7.2 封装性与访问修饰符... 133
7.2.1 类的访问权限... 133
7.2.2 类成员的访问权限... 134
7.3 防止类扩展和方法覆盖... 135
7.3.1 final修饰类... 135
7.3.2 final修饰方法... 136
7.3.3 final修饰变量... 136
7.4 抽象类... 137
7.5 对象转换与多态... 138
7.5.1 对象转换... 139
7.5.2 instanceof运算符... 140
7.5.3 多态与动态绑定... 140
7.6 小结... 142
编程练习... 142
第8章 Java常用核心类... 144
8.1 Object:终极父类... 144
8.1.1 toString()方法... 145
8.1.2 equals()方法... 145
8.1.3 hashCode()方法... 146
8.1.4 clone()方法... 147
8.1.5 finalize()方法... 148
8.2 Math类... 149
8.3 基本类型包装类... 151
8.3.1 Character类... 151
8.3.2 Boolean类... 152
8.3.3 创建数值类对象... 153
8.3.4 数值类的常量... 154
8.3.5 自动装箱与自动拆箱... 155
8.3.6 字符串转换为基本类型... 156
8.3.7 BigInteger和BigDecimal类... 156
8.4 日期-时间API 158
8.4.1 本地日期类LocalDate. 158
8.4.2 本地时间类LocalTime. 160
8.4.3 本地日期时间类LocalDateTime. 161
8.4.4 Instant类、Duration类和Period类... 162
8.4.5 其他常用类... 164
8.4.6 日期时间解析和格式化... 164
8.5 小结... 166
编程练习... 166
第9章 内部类、枚举和注解... 168
9.1 内部类... 168
9.1.1 成员内部类... 169
9.1.2 局部内部类... 170
9.1.3 匿名内部类... 171
9.1.4 静态内部类... 173
9.2 枚举类型... 175
9.2.1 枚举类型的定义... 175
9.2.2 枚举类型的方法... 175
9.2.3 枚举在switch中的应用... 176
9.2.4 枚举类型的构造方法... 177
9.3 注解类型... 178
9.3.1 注解概述... 179
9.3.2 标准注解... 179
9.3.3 定义注解类型... 181
9.3.4 标准元注解... 183
9.4 小结... 184
编程练习... 185
第10章 接口与Lambda表达式... 188
10.1 接口... 188
10.1.1 接口定义... 188
10.1.2 接口的实现... 189
10.1.3 接口的继承... 190
10.1.4 接口类型的使用... 192
10.1.5 常量... 192
10.2 静态方法和默认方法... 192
10.2.1 静态方法... 193
10.2.2 默认方法... 193
10.2.3 解决默认方法冲突... 193
10.3 接口示例... 195
10.3.1 Comparable接口... 195
10.3.2 Comparator接口... 197
10.4 Lambda表达式... 198
10.4.1 Lambda表达式简介... 198
10.4.2 函数式接口... 199
10.4.3 Lambda表达式的语法... 199
10.4.4 预定义的函数式接口... 200
10.4.5 方法引用与构造方法引用... 204
10.5 小结... 206
编程练习... 206