第1章 快速入门 1
1.1关于Java技术 1
1.1.1 Java程序语言 1
1.1.2 Java平台 2
1.1.3 Java技术的功能 3
1.1.4 Java技术的优势 3
1.2 “Hello World!”实例程序 4
1.2.1用NetBeans IDE开发“Hello World!” 4
1.2.2在Microsoft Windows中开发“Hello World!” 10
1.2.3在Solaris和Linux中开发“Hello World!” 13
1.3“Hello World!”实例程序剖析 15
1.3.1源码注释 15
1.3.2 Hel l oWorl dApp类定义 15
1.3.3 mai n方法 16
1.4常见问题(及其解决方案) 16
1.4.1编译器问题 16
1.4.2运行时问题 18
1.5问题和练习:快速入门 19
第2章 面向对象的编程概念 21
2.1对象 21
2.2类 22
2.3继承 23
2.4接口 24
2.5包 25
2.6问题和练习:面向对象的编程概念 25
第3章 语言基础 27
3.1变量 27
3.1.1命名 28
3.1.2基本数据类型 28
3.1.3数组 32
3.1.4小结 35
3.1.5问题和练习:变量 36
3.2运算符 36
3.2.1赋值运算符、算术运算符和一元运算符 37
3.2.2等式运算符、关系运算符和条件运算符 40
3.2.3位运算符和移位运算符 42
3.2.4小结 42
3.2.5问题和练习:运算符 43
3.3表达式、语句和块 44
3.3.1表达式 44
3.3.2语句 45
3.3.3块 45
3.3.4问题和练习:表达式、语句和块 46
3.4控制流语句 46
3.4.1 i f -then语句和if-then-else语句 46
3.4.2 switch语句 47
3.4.3 while语句和do-while语句 51
3.4.4 fo r语句 52
3.4.5分支语句 53
3.4.6小结 56
3.4.7问题和练习:控制流语句 56
第4章 类和对象 58
4.1类 58
4.1.1声明类 59
4.1.2声明成员变量 60
4.1.3定义方法 61
4.1.4构建构造器 62
4.1.5将消息传给方法或构造器 63
4.2对象 66
4.2.1创建对象 67
4.2.2使用对象 69
4.3类的更多细节 71
4.3.1从方法返回值 71
4.3.2使用this关键字 73
4.3.3控制对类成员的访问 74
4.3.4类成员 75
4.3.5初始化字段 78
4.3.6小结 79
4.3.7问题和练习:类 79
4.3.8问题和练习:对象 80
4.4嵌套类 81
4.4.1为什么使用嵌套类 81
4.4.2静态嵌套类 82
4.4.3内部类 82
4.4.4覆盖 82
4.4.5序列化 83
4.4.6内部类实例 83
4.4.7局部类和匿名类 85
4.4.8 Lambda表达式 92
4.4.9何时使用嵌套类、局部类、匿名类和Lambda表达式 105
4.4.10问题和练习:嵌套类 105
4.5枚举类型 106
4.5.1问题和练习:枚举类型 108
第5章 注解 109
5.1注解基础知识 109
5.1.1注解的格式 109
5.1.2注解的使用场景 110
5.2声明注解类型 110
5.3预定义注解类型 111
5.3.1 Java语言使用的注解类型 111
5.3.2应用于其他注解的注解 112
5.4类型注解和可插拔类型系统 113
5.5重复注解 114
5.5.1声明重复注解类型 114
5.5.2声明容器注解类型 115
5.5.3检索注解 115
5.5.4设计时的注意事项 115
5.6问题和练习:注解 115
第6章 接口与继承 117
6.1接口 117
6.1.1 Java语言的接口 117
6.1.2将接口用作API 118
6.1.3定义接口 118
6.1.4实现接口 119
6.1.5将接口用作类型 120
6.1.6进化接口 121
6.1.7默认方法 122
6.1.8小结 129
6.1.9问题和练习:接口 129
6.2继承 130
6.2.1 Java平台中类的层次结构 130
6.2.2继承实例 131
6.2.3子类能做什么 132
6.2.4超类的私有成员 132
6.2.5转换对象 132
6.2.6状态、实现和类型的多重继承 133
6.2.7覆盖和屏蔽方法 133
6.2.8多态性 136
6.2.9屏蔽字段 138
6.2.10使用super关键字 138
6.2.11将对象用作超类 140
6.2.12编写final类和方法 142
6.2.13抽象方法和类 143
6.2.14小结 145
6.2.15 问题和练习:继承 145
第7章 泛型 147
7.1为什么用泛型 147
7.2泛型类型 147
7.2.1一个简单的Box类 148
7.2.2 Box类的泛型版本 148
7.2.3类型参数命名约定 148
7.2.4泛型类型的调用和实例化 149
7.2.5钻石运算符 149
7.2.6多个类型参数 149
7.2.7参数化类型 150
7.2.8原生类型 150
7.3泛型方法 151
7.4受限类型形式参数 152
7.4.1多重限制 153
7.4.2泛型方法和受限类型形式参数 154
7.5泛型、继承和子类型 154
7.5.1泛型类和子类型 155
7.6类型推导 156
7.6.1类型推导和泛型方法 156
7.6.2类型推导和泛型类的实例化 157
7.6.3类型推导与泛型类和非泛型类的泛型构造函数 157
7.6.4目标类型 158
7.7通配符 159
7.7.1上界通配符 159
7.7.2无界通配符 160
7.7.3下界通配符 160
7.7.4通配符和子类型 161
7.7.5通配符匹配和辅助方法 162
7.7.6通配符使用指南 164
7.8类型擦除 165
7.8.1泛型类型的擦除 165
7.8.2泛型方法的擦除 166
7.8.3类型擦除效果和桥方法 167
7.8.4不可具体化类型和可变参数方法 168
7.9泛型的局限性 170
7.9.1不能用基本数据类型实例化泛型类型 170
7.9.2不能创建类型参数实例 171
7.9.3不能声明类型为“类型参数”的静态字段 171
7.9.4对参数化类型不能用类型转换或instanceof运算符 172
7.9.5不能创建参数化类型数组 172
7.9.6不能创建、捕获或抛出参数化类型的对象 172
7.9.7每次重载时其形式参数类型都被擦除为相同的原生类型的方法不能重载 173
7.10问题和练习:泛型 173
第8章 程序包 175
8.1程序包的创建和使用 175
8.1.1程序包的创建 176
8.1.2程序包的命名 177
8.1.3程序包成员的使用 177
8.1.4源文件和类文件的管理 180
8.1.5小结 182
8.2问题和练习:创建和使用包 182
第9章 数字和字符串 183
9.1数字 183
9.1.1 Number类 183
9.1.2格式化数字打印输出 184
9.1.3其他数学运算方法 188
9.1.4自动装箱和拆箱 191
9.1.5小结 193
9.1.6问题和练习:数字 193
9.2字符 194
9.2.1转义字符 194
9.3字符串 195
9.3.1创建字符串 195
9.3.2字符串长度 196
9.3.3字符串连接 196
9.3.4创建格式字符串 197
9.3.5数字和字符串之间的转换 197
9.3.6操作字符串中的字符 199
9.3.7比较字符串和字符串的子串 202
9.3.8 String Builder类 203
9.3.9小结 207
9.3.10问题和练习:字符和字符串 207
第10章 异常 209
10.1什么是异常 209
10.2捕获或指明规定 210
10.2.1三类异常 210
10.2.2绕过捕获或指明 210
10.3捕获和处理异常 211
10.3.1 try块 211
10.3.2 catch块 212
10.3.3 finally块 213
10.3.4 try-with-resources语句 214
10.3.5 汇总 216
10.4指明一个方法抛出的异常 218
10.5如何抛出异常 219
10.5.1 throw语句 219
10.5.2 Throwable类及其子类 220
10.5.3 Error类 220
10.5.4 Exception类 220
10.5.5链式异常 220
10.5.6创建异常类 221
10.6未检查异常:争议 222
10.7异常的优点 223
10.7.1优点1:把错误处理代码和“正规”代码分离开 223
10.7.2优点2:根据调用栈上传错误 224
10.7.3优点3:对错误类型进行分组并加以区分 226
10.8小结 226
10.9问题和练习:异常 227
第11章 基本I/O和NIO.2 229
11.1 I/O流 229
11.1.1字节流 230
11.1.2字符流 231
11.1.3缓冲流 233
11.1.4扫描和格式化 234
11.1.5命令行I/O 238
11.1.6数据流 240
11.1.7对象流 241
11.2文件I/O(以NIO.2为特征) 243
11.2.1什么是路径(以及其他文件系统情况) 243
11.2.2 Path类 245
11.2.3文件操作 250
11.2.4检查文件或目录 253
11.2.5删除文件或目录 254
11.2.6复制文件或目录 254
11.2.7移动文件或目录 255
11.2.8管理元数据(文件和文件存储属性) 255
11.2.9读取、写入和创建文件 261
11.2.10随机访问文件 266
11.2.11创建和读取目录 267
11.2.12符号链接或其他方式的链接 270
11.2.13遍历文件树 272
11.2.14查找文件 275
11.2.15 监视目录的变化 278
11.2.16其他有用的方法 283
11.2.17遗留文件的I/O代码 284
11.3小结 286
11.4问题和练习:基本I/O 286
第12章 集合 287
12.1集合简介 287
12.1.1集合框架是什么 287
12.1.2 Java集合框架的好处 288
12.2接口 288
12.2.1 Collection接口 290
12.2.2遍历集合 291
12.2.3 Collection接口的批量操作 292
12.2.4 Collection接口的数组操作 293
12.2.5 Set接口 293
12.2.6 Li st接口 296
12.2.7 Queue接口 302
12.2.8 Deque接口 303
12.2.9 Map接口 304
12.2.10对象排序 310
12.2.11 SortedSet接口 315
12.2.12 SortedMap接口 317
12.2.13小结 318
12.2.14问题和练习:接口 318
12.3聚合操作 319
12.3.1管道和流 320
12.3.2聚合操作和迭代器之间的差异 321
12.3.3归约 321
12.3.4并行 325
12.3.5副作用 328
12.3.6问题和练习:聚合操作 330
12.4实现 331
12.4.1 Set实现 333
12.4.2 Li st实现 334
12.4.3 Map实现 335
12.4.4 Queue实现 336
12.4.5 Deque实现 337
12.4.6封装实现 338
12.4.7简单实现 340
12.4.8小结 341
12.4.9问题和练习:实现 341
12.5算法 342
12.5.1排序 342
12.5.2混排 344
12.5.3常规数据操作 344
12.5.4查询 344
12.5.5组合 345
12.5.6查找极值 345
12.6自定义集合实现 345
12.6.1编写实现的原因 345
12.6.2如何编写自定义实现 346
12.7互操作性 347
12.7.1兼容性 347
12.7.2 API设计 349
第13章 并发 351
13.1进程和线程 351
13.1.1进程 351
13.1.2线程 351
13.2线程对象 352
13.2.1定义和启动一个线程 352
13.2.2使用sleep方法暂停执行 353
13.2.3中断 353
13.2.4联合 354
13.2.5 Si mpl eTh reads实例 355
13.3同步 356
13.3.1线程冲突 356
13.3.2内存一致性错误 357
13.3.3同步方法 358
13.3.4内部锁和同步 359
13.3.5原子访问 360
13.4活性 361
13.4.1死锁 361
13.4.2饥饿和活锁 362
13.5保护块 362
13.6不可变对象 365
13.6.1同步类实例 365
13.6.2定义不可变对象的策略 367
13.7高级并发对象 368
13.7.1锁对象 368
13.7.2执行器 370
13.7.3并发集合 374
13.7.4原子变量 375
13.7.5并发随机数 376
13.8问题和练习:并发 376
第14章 正则表达式 378
14.1简介 378
14.1.1正则表达式 378
14.1.2正则表达式的表示方法 378
14.2测试工具 379
14.3字符串文字 380
14.3.1元字符 380
14.4字符类 381
14.4.1简单类 381
14.5预定义字符类 384
14.6量词 386
14.6.1零长度匹配 387
14.6.2捕捉组和带量词的字符类 389
14.6.3贪婪型、勉强型和占有型量词之间的区别 390
14.7捕捉组 390
14.7.1编号 390
14.7.2反向引用 391
14.8边界匹配器 391
14.9 Pattern类方法 393
14.9.1使用标记创建模式 393
14.9.2嵌套标记表达式 394
14.9.3使用matches(String,CharSequence)方法 395
14.9.4使用split(String)方法 395
14.9.5其他实用方法 396
14.9.6 java.lang.String中Pattern方法的等价方法 396
14.10 Matcher类方法 397
14.10.1索引方法 397
14.10.2学习方法 397
14.10.3替换方法 397
14.10.4使用start方法和end方法 398
14.10.5使用matches方法和lookingAt方法 399
14.10.6使用replaceFirst(St-ring)方法和replace-All(String)方法 399
14.10.7使用appendReplacement(StringBuffer,String)方法和appendTail(Str-ingBuffer)方法 400
14.10.8 j ava.l ang.String中Matcher方法的等价方法 401
14.11 PatternSyntaxExcep-ti on类方法 401
14.12 Unicode支持 403
14.12.1匹配特定代码点 403
14.12.2 Unicode字符属性 403
14.13问题和练习:正则表达式 404
第15章 平台环境 405
15.1配置工具 405
15.1.1属性 405
15.1.2命令行参数 408
15.1.3环境变量 409
15.1.4其他配置工具 410
15.2系统工具 410
15.2.1命令行I/O对象 410
15.2.2系统属性 410
15.2.3安全管理器 413
15.2.4系统的其他方法 414
15.3 PATH和CLASSPATH环境变量 414
15.3.1更新PATH环境变量 (Microsoft Windows) 414
15.3.2更新PATH环境变量(Solaris、Linux和OS X) 416
15.3.3检查CLASSPATH环境变量(所有平台) 416
15.4问题和练习:平台环境 417
第16章JAR文件 418
16.1 JAR文件使用入门 418
16.1.1创建JAR文件 419
16.1.2查看JAR文件内容 421
16.1.3抽取JAR文件内容 422
16.1.4更新JAR文件 423
16.1.5运行打包为JAR的软件 424
16.2清单文件使用入门 426
16.2.1理解默认的清单文件 426
16.2.2修改清单文件 426
16.2.3设置应用程序的入口点 427
16.2.4将类文件加入JAR文件的类路径 428
16.2.5设置包版本信息 429
16.2.6用JAR文件封装包 430
16.2.7使用清单属性增强安全性 430
16.3 JAR文件的签名和验证 431
16.3.1理解签名和验证 431
16.3.2对JAR文件签名 433
16.3.3验证签名的JAR文件 435
16.4使用JAR相关API 435
16.4.1实例:JarRunner应用 436
16.4.2 JarClassLoader类 436
16.4.3 JarRunner类 438
16.5问题和练习:JAR文件 439
第17章Java Web Start 440
17.1开发Java Web Start应用 440
17.1.1创建顶层JPanel类 441
17.1.2创建应用 441
17.1.3从最后部署机制中分离出核心方法的好处 442
17.1.4获取资源 442
17.2部署Java Web Start应用 442
17.2.1设置Web服务器 445
17.3显示自定义的加载进度指示器 445
17.3.1开发自定义的加载进度指示器 445
17.3.2为Java Web Start应用指定自定义的加载进度指示器 447
17.4运行Java Web Start应用 447
17.4.1通过浏览器运行Java Web Start应用 448
17.4.2通过Java Cache Viewer运行Java Web Start应用 448
17.4.3从桌面运行Java Web Start应用 448
17.5 Java Web Start与安全 448
17.5.1动态下载HTTPS认证 449
17.6 Java Web Start常见问题 449
17.7问题和练习:Java Web Start 450
第18章applet 451
18.1开始使用applet 451
18.1.1定义Applet类的子类 452
18.1.2里程碑方法 452
18.1.3 applet的生命周期 452
18.1.4 applet的执行环境 454
18.1.5开发applet 454
18.1.6部署applet 457
18.2 applet的更多功能 459
18.2.1查找和加载数据文件 459
18.2.2定义和使用applet参数 460
18.2.3显示简短的状态字符串 462
18.2.4在浏览器中显示文档 462
18.2.5从applet调用JavaScript代码 464
18.2.6从JavaScript代码中调用applet方法 465
18.2.7通过事件句柄处理初始化状态 468
18.2.8操纵applet网页的DOM 469
18.2.9显示自定义的加载进度指示器 471
18.2.10将诊断写入标准输出和错误流 474
18.2.11开发可拖动的applet 475
18.2.12和其他applet交互 477
18.2.13与服务器端应用交互 478
18.2.14 applet能做什么和不能做什么 480
18.3 applet常见问题及解决方案 481
18.4问题和练习:applet 482
第19章Java富互联网应用系统 483
19.1设置可信参数和安全属性 483
19.1.1系统属性 484
19.2 JNLP API 485
19.2.1通过JNLP API访问客户端 486
19.3 cookie 489
19.3.1 cookie的类型 489
19.3.2 RIA中的cookie支持 489
19.3.3获取cooki e 489
19.4自定义加载体验 491
19.5 RIA的安全 491
19.6 安全RIA手册 492
19.6.1遵循安全编程指导 492
19.6.2使用最新版JRE测试 492
19.6.3加入清单属性 492
19.6.4使用已签署的JNLP文件 492
19.6.5签署JAR文件并加盖时间戳 493
19.6.6使用HTTPS协议 493
19.6.7避免本地RIA 493
19.7问题和练习:Java富互联网应用系统 493
第20章 深入理解部署 495
20.1 RIA的用户接纳 495
20.2部署工具 496
20.2.1部署工具脚本所在位置 496
20.2.2部署applet 496
20.2.3部署Java Web Start应用 499
20.2.4检查客户端的JRE软件版本 501
20.3 Java网络加载协议 501
20.3.1 JNLP文件结构 501
20.4部署的最佳实践 505
20.4.1减少下载时间 505
20.4.2避免不必要的更新检查 506
20.4.3确保JRE软件存在 508
20.5问题和练习:深入理解部署 509
第21章 日期/时间API 510
21.1日期/时间API概述 510
21.2日期/时间API设计原则 510
21.2.1明确性 510
21.2.2流式 510
21.2.3不可变性 511
21.2.4可扩展性 511
21.3日期/时间程序包 511
21.4方法命名约定 511
21.5标准日历 512
21.6日期/时间类概述 512
21.7 DayOfWeek和Month枚举器 513
21.7.1 DayOfWeek枚举器 513
21.7.2 Month枚举器 513
21.8日期类 515
21.8.1 Local Date 515
21.8.2YearMonth 515
21.8.3 MonthDay 516
21.8.4Year 516
21.9日期和时间类 516
21.9.1 LocalTime 516
21.9.2 Local DateTime 517
21.10时区和时区偏移类 517
21.10.1 Zonel d和ZoneOff-set 517
21.10.2日期/时间类 518
21.11 Instant类 520
21.12解析和格式化 521
21.12.1解析 522
21.12.2格式化 522
21.13时间程序包 523
21.13.1 Temporal和Temporal-Accessor 523
21.13.2 Ch ronoFi el d和IsoFields 524
21.13.3 ChronoUnit 524
21.13.4时间调节器 524
21.13.5时间查询 526
21.14周期和持续时间 527
21.14.1 Duration 528
21.14.2 ChronoUnit 528
21.14.3 Period 528
21.15 时钟 529
21.16非ISO日期的转换 530
21.16.1转换成非ISO日期 530
21.16.2转换成ISO日期 531
21.17遗留的日期/时间代码 532
21.17.1与遗留代码的互操作 532
21.17.2将java.util日期和时间功能映射给j ava .time 533
21.17.3日期和时间的格式化 534
21.18小结 534
21.19问题和练习:日期/时间API 535
第22章JavaFX简介 536
附录Java程序语言认证考试复习大纲 537