Java经典入门指南
作者:[加] 布迪 克尼亚万(Budi Kurniawan) 著,沈泽刚 译
出版时间: 2020年版
内容简介
本书基于新版的Java 11编写,全面系统地介绍Java程序员必须掌握的核心基础知识,这些内容融合在三大主题中——Java语言基础、面向对象编程以及Java核心类。其中,Java语言基础包括数据类型和运算符、控制结构、数组、类和对象、异常处理、枚举和注解等;面向对象包括封装性、继承性、多态性、接口与抽象类、泛型与集合、多线程与并发编程等;Java核心类包括日期时间API、输入/输出、JavaFX图形界面、Lambda表达式和Stream的使用、数据库和网络编程。本书还介绍了安全性和Java Web编程基础的相关知识。本书是为专业级Java程序员打造的理想教程,也可作为高等院校计算机相关专业“面向对象编程”和“Java语言程序设计”等课程的教学用书。
目录
第 1章 新手起步\t1
1.1 下载和安装JDK 1
1.1.1 在Windows上安装 1
1.1.2 在Linux上安装 2
1.1.3 在macOS上安装 3
1.1.4 设置系统环境变量 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 执行Java程序 5
1.3 Java编码规范 5
1.4 集成开发环境 6
1.5 JShell 6
1.6 小结 7
习题 7
第 2章 语言基础 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 整数字面值 14
2.7.2 浮点字面值 15
2.7.3 布尔字面值 16
2.7.4 字符字面值 16
2.8 基本类型转换 17
2.8.1 加宽转换 17
2.8.2 缩窄转换 18
2.9 运算符 18
2.9.1 一元运算符 19
2.9.2 算术运算符 21
2.9.3 相等运算符 22
2.9.4 关系运算符 22
2.9.5 条件运算符 23
2.9.6 移位运算符 23
2.9.7 赋值运算符 24
2.9.8 整数按位运算符(& | ^) 24
2.9.9 逻辑运算符 25
2.9.10 运算符优先级 25
2.9.11 类型提升 26
2.10 注释 27
2.11 小结 27
习题 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 小结 40
习题 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 构造方法 44
4.2.5 可变参数方法 45
4.2.6 UML类图中的类成员 45
4.3 创建对象 46
4.4 null关键字 46
4.5 为对象分配内存 47
4.6 Java包 49
4.7 封装与访问控制 50
4.7.1 类访问控制修饰符 50
4.7.2 类成员访问控制修饰符 51
4.8 this关键字 54
4.9 使用其他类 54
4.10 final变量 56
4.11 静态成员 56
4.12 静态final变量 58
4.13 静态导入 59
4.14 变量作用域 60
4.15 方法重载 60
4.16 静态工厂方法 61
4.17 按值还是按引用传递 62
4.18 加载、链接和初始化 64
4.18.1 加载 64
4.18.2 链接 65
4.18.3 初始化 65
4.19 对象创建初始化 66
4.20 垃圾回收器 68
4.21 创建对象的其他方法 69
4.22 小结 69
习题 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 字符转义 74
5.2.4 switch中的String 74
5.2.5 String类的构造方法 75
5.2.6 String类的方法 75
5.3 java.lang.StringBuffer和java.lang.StringBuilder 78
5.3.1 StringBuilder类的构造方法 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 小结 87
习题 87
第6章 数组 88
6.1 概述 88
6.2 迭代数组 90
6.3 java.util.Arrays类 90
6.4 修改数组大小 91
6.5 查找数组 92
6.6 将String数组传递给main 93
6.7 多维数组 94
6.8 小结 94
习题 95
第7章 继承 96
7.1 概述 96
7.1.1 extends关键字 96
7.1.2 is-a关系 97
7.2 可访问性 98
7.3 方法覆盖 99
7.4 调用超类的构造方法 100
7.5 调用超类的隐藏成员 102
7.6 类型转换 102
7.7 final类 103
7.8 instanceof运算符 103
7.9 小结 104
习题 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 小结 113
习题 113
第9章 处理数字 114
9.1 装箱与拆箱 114
9.2 数字解析 114
9.3 数字格式化 115
9.4 用java.text.NumberFormat解析数字 116
9.5 java.lang.Math类 116
9.6 使用货币值 117
9.7 生成随机数 118
9.8 小结 119
习题 119
第 10章 接口和抽象类 120
10.1 接口的概念 120
10.2 从技术角度看接口 121
10.2.1 接口中的字段 122
10.2.2 抽象方法 122
10.2.3 扩展接口 123
10.3 接口中的实现 123
10.3.1 默认方法 123
10.3.2 静态方法 124
10.3.3 私有方法 124
10.4 基类 124
10.5 抽象类 125
10.6 抽象类说明 126
10.7 小结 127
习题 127
第 11章 多态 128
11.1 概述 128
11.2 多态实战 130
11.3 多态与反射 131
11.4 小结 133
习题 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 小结 138
习题 138
第 13章 处理日期和时间 139
13.1 概述 139
13.2 Instant类 140
13.3 LocalDate 140
13.4 Period 142
13.5 LocalDateTime 144
13.6 时区 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 小结 155
习题 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 集合转换 163
14.8 Map和HashMap 163
14.9 对象比较和排序 164
14.9.1 使用java.lang.Comparable 165
14.9.2 使用Comparator 167
14.10 小结 171
习题 171
第 15章 泛型 172
15.1 没有泛型的时代 172
15.2 泛型类型 173
15.3 使用没有类型参数的泛型类型 175
15.4 使用“?”通配符 176
15.5 在方法中使用有界通配符 177
15.6 泛型方法 178
15.7 编写泛型类型 179
15.8 小结 180
习题 180
第 16章 输入/输出 181
16.1 File类 181
16.1.1 File类的构造方法 182
16.1.2 File类的方法 183
16.2 文件系统和路径 184
16.3 文件和目录的处理及操作 185
16.3.1 创建和删除文件及目录 185
16.3.2 检索目录中的对象 186
16.3.3 复制和移动文件 186
16.3.4 读取和写入文件 187
16.4 输入流/输出流 189
16.5 读二进制数据 189
16.6 写入二进制数据 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 小结 209
习题 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 小结 218
习题 218
第 18章 嵌套类和内部类 219
18.1 嵌套类的概述 219
18.2 静态嵌套类 220
18.3 成员内部类 221
18.4 局部内部类 223
18.5 匿名内部类 224
18.6 嵌套类和内部类的幕后 225
18.7 小结 227
习题 227
第 19章 Lambda表达式 228
19.1 为何使用Lambda表达式 228
19.2 函数式接口 229
19.3 Lambda表达式语法 229
19.4 预定义函数式接口 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 引用静态方法 235
19.5.2 引用对象可用的实例方法 238
19.5.3 引用对象不可用的实例方法 238
19.5.4 引用构造方法 240
19.6 Optional与类似的类 241
19.7 小结 246
习题 246
第 20章 使用Stream 247
20.1 概述 247
20.2 创建和获得流 248
20.3 连接流 249
20.4 过滤 250
20.5 映射 251
20.6 归约 252
20.7 可变归约 256
20.8 并行流 260
20.9 小结 261
习题 261
第 21章 Java数据库连接 262
21.1 JDBC简介 262
21.2 数据访问的5个步骤 263
21.2.1 加载JDBC驱动程序 263
21.2.2 获得数据库连接 264
21.2.3 创建Statement对象 265
21.2.4 创建ResultSet对象 266
21.2.5 关闭JDBC对象 266
21.3 综合应用 267
21.4 使用DAO模式 269
21.5 读取元数据 275
21.6 小结 278
习题 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 区域 285
22.7 事件驱动编程 287
22.7.1 Java事件模型 288
22.7.2 JavaFX事件 288
22.8 使用CSS样式 290
22.9 小结 293
习题 293
第 23章 JavaFX与FXML 294
23.1 概述 294
23.2 一个基于FXML的简单应用 295
23.3 FXML的事件处理 298
23.4 小结 302
习题 302
第 24章 Java线程 303
24.1 Java线程简介 303
24.2 创建线程 303
24.2.1 扩展Thread类 304
24.2.2 实现Runnable接口 305
24.3 使用多线程 306
24.4 线程优先级 308
24.5 停止线程 309
24.6 同步 312
24.6.1 线程干扰 312
24.6.2 块同步 314
24.7 可见性 315
24.8 join方法 317
24.9 线程协调 317
24.10 使用Timer 321
24.11 小结 324
习题 324
第 25章 并发工具 325
25.1 原子变量 325
25.2 Executor和ExecutorService 326
25.3 命名线程 331
25.4 Callable和Future 333
25.5 JavaFX任务 336
25.6 锁 339
25.7 小结 340
习题 340
第 26章 Java网络 341
26.1 网络概述 341
26.2 超文本传输协议(HTTP) 341
26.2.1 HTTP请求 342
26.2.2 HTTP响应 343
26.3 HttpClient API 343
26.4 java.net.Socket 346
26.5 java.net.ServerSocket 348
26.6 创建一个Web服务器 349
26.6.1 HttpServer类 349
26.6.2 Request类 352
26.6.3 Response类 354
26.6.4 运行应用程序 356
26.7 小结 357
习题 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 权限 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 数据完整性 369
27.6.4 SSL的工作原理 369
27.7 创建证书 370
27.8 KeyTool程序 370
27.8.1 生成配对的密钥 371
27.8.2 进行认证 372
27.8.3 将证书导入密钥库 372
27.8.4 从密钥库导出证书 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 小结 374
习题 374
第 28章 Java Web应用程序 375
28.1 Servlet应用程序架构 375
28.2 Servlet API概述 376
28.3 Servlet 377
28.4 编写基本的Servlet应用程序 378
28.4.1 安装Tomcat 378
28.4.2 编写和编译Servlet类 378
28.4.3 应用程序目录结构 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 小结 395
习题 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 小结 404
习题 404
第30章 模块 405
30.1 概述 405
30.2 Java标准模块 406
30.3 创建模块应用程序 406
30.4 创建自包含的应用程序包 407
30.5 创建安装程序 409
30.6 小结 410
习题 410