书籍详情
Java官方编程手册(第12版·Java 17)
作者:[美] 赫伯特·希尔特(Herbert Schildt) 著,石磊 卫琳 译
出版社:清华大学出版社
出版时间:2023-06-01
ISBN:9787302630760
定价:¥328.00
购买这本书可以去
内容简介
《Java官方编程手册(第12版·Java 17)》针对Java SE 17全面更新内容,讲解了如何开发、编译、调试和运行Java程序。畅销书作者Herbert Schildt在本书中对整个Java语言进行了讲解,包括其语法、关键字和基础编程概念。书中还介绍了Java API库的关键部分,如I/O、集合框架、流库和并发实用工具,还讨论了Swing、Java Bean和servlet,并提供了大量示例来演示Java的实际应用。当然,本书也详细描述了Java语言的新增特性,如记录、密封类和switch表达式。Herbert Schildt采用他一贯的清晰、利落、务求准确的风格撰写本书,正是这种风格让他撰写的图书成为全世界数百万人的选择。本书内容数据类型、变量、数组和运算符控制语句类、对象和方法方法重载和重写继承接口和包异常处理多线程编程枚举、自动装箱和注解I/O类泛型lambda表达式模块记录密封类文本块switch表达式instanceof的模式匹配字符串处理集合框架网络事件处理AWTSwing并发API流API正则表达式Java Beanservlet其他内容
作者简介
Herbert Schildt 是一位畅销书作家,在三十多年的时间里,他撰写了大量关于编程的图书。Herbert 是 Java 语言领域的权威专家,被International Developer杂志称为“全世界著名的编程书籍创作者之一”。他撰写的编程书籍在世界范围内销售了数百万册,并且已经被翻译成几乎所有主要的非英语语言。
目录
第 I 部分 Java语言
第 1 章 Java的历史和演变 3
1.1 Java的家世 3
1.1.1 现代编程语言的诞生:
C语言 3
1.1.2 C :下一个阶段 5
1.1.3 Java出现的时机已经成熟 5
1.2 Java的诞生 6
1.3 Java改变Internet的方式 7
1.3.1 Java applet 7
1.3.2 安全性 8
1.3.3 可移植性 8
1.4 Java的魔力:字节码 8
1.5 超越applet 9
1.6 更快的发布周期 10
1.7 servlet:服务器端的Java 11
1.8 Java的关键特性 11
1.8.1 简单性 11
1.8.2 面向对象 12
1.8.3 健壮性 12
1.8.4 多线程 12
1.8.5 体系结构中立 12
1.8.6 解释执行和高性能 13
1.8.7 分布式 13
1.8.8 动态性 13
1.9 Java的演变历程 13
1.10 文化革新 17
第2 章 Java综述 18
2.1 面向对象编程 18
2.1.1 两种范式 18
2.1.2 抽象 19
2.1.3 OOP三原则 19
2.2 个简单程序 23
2.2.1 输入程序 23
2.2.2 编译程序 24
2.2.3 深入分析个示例程序 24
2.3 第二个简单程序 26
2.4 两种控制语句 28
2.4.1 if语句 28
2.4.2 for循环 29
2.5 使用代码块 30
2.6 词汇问题 32
2.6.1 空白符 32
2.6.2 标识符 32
2.6.3 字面值 32
2.6.4 注释 33
2.6.5 分隔符 33
2.6.6 Java关键字 33
2.7 Java类库 34
第3 章 数据类型、变量和数组 35
3.1 Java是强类型化的语言 35
3.2 基本类型 35
3.3 整型 36
3.3.1 byte 36
3.3.2 short 36
3.3.3 int 37
3.3.4 long 37
3.4 浮点型 38
3.4.1 float 38
3.4.2 double 38
3.5 字符型 39
3.6 布尔型 40
3.7 深入分析字面值 41
3.7.1 整型字面值 41
3.7.2 浮点型字面值 42
3.7.3 布尔型字面值 42
3.7.4 字符型字面值 43
3.7.5 字符串字面值 43
3.8 变量 44
3.8.1 变量的声明 44
3.8.2 动态初始化 44
3.8.3 变量的作用域和生存期 45
3.9 类型转换和强制类型转换 47
3.9.1 Java的自动类型转换 47
3.9.2 强制转换不兼容的类型 47
3.10 表达式中的自动类型提升 49
3.11 数组 50
3.11.1 一维数组 50
3.11.2 多维数组 52
3.11.3 另一种数组声明语法 56
3.12 局部变量的类型推断 57
3.13 关于字符串的一些说明 59
第4章 运算符 60
4.1 算术运算符 60
4.1.1 基本算术运算符 61
4.1.2 求模运算符 62
4.1.3 算术与赋值复合运算符 62
4.1.4 自增与自减运算符 63
4.2 位运算符 64
4.2.1 位逻辑运算符 66
4.2.2 左移 68
4.2.3 右移 69
4.2.4 无符号右移 70
4.2.5 位运算符与赋值的组合 71
4.3 关系运算符 72
4.4 布尔逻辑运算符 73
4.5 赋值运算符 75
4.6 “?”运算符 75
4.7 运算符的优先级 76
4.8 使用圆括号 77
第 5 章 控制语句 78
5.1 Java的选择语句 78
5.1.1 if语句 78
5.1.2 switch语句 81
5.2 迭代语句 86
5.2.1 while语句 86
5.2.2 do-while语句 87
5.2.3 for语句 90
5.2.4 for循环的for-each版本 93
5.2.5 for循环中的局部变量
类型推断 98
5.2.6 嵌套的循环 99
5.3 跳转语句 99
5.3.1 使用break语句 99
5.3.2 使用continue语句 103
5.3.3 使用return语句 104
第 6 章 类 106
6.1 类的基础知识 106
6.1.1 类的一般形式 106
6.1.2 一个简单的类 107
6.2 声明对象 109
6.3 为对象引用变量赋值 111
6.4 方法 112
6.4.1 为Box类添加方法 112
6.4.2 返回值 114
6.4.3 添加带参数的方法 115
6.5 构造函数 117
6.6 this关键字 120
6.7 垃圾回收 121
6.8 堆栈类 121
第 7 章 方法和类的深入分析 124
7.1 重载方法 124
7.2 将对象用作形参 129
7.3 实参传递的深入分析 131
7.4 返回对象 133
7.5 递归 134
7.6 访问控制 136
7.7 理解static 139
7.8 final介绍 141
7.9 重新审视数组 141
7.10 嵌套类和内部类 143
7.11 String类 145
7.12 使用命令行参数 148
7.13 varargs:可变长度实参 148
7.13.1 重载varargs方法 151
7.13.2 varargs方法与模糊性 152
第 8 章 继承 156
8.1 继承的基础知识 156
8.1.1 成员访问与继承 158
8.1.2 一个更实际的例子 159
8.1.3 超类变量可以引用子类
对象 161
8.2 使用super关键字 161
8.2.1 使用super调用超类的
构造函数 162
8.2.2 super的另一种用法 165
8.3 创建多级继承层次 166
8.4 构造函数的执行时机 169
8.5 方法重写 170
8.6 动态方法调度 172
8.6.1 重写方法的原因 174
8.6.2 应用方法重写 174
8.7 使用抽象类 176
8.8 在继承中使用final关键字 178
8.8.1 使用final关键字阻止
重写 178
8.8.2 使用final关键字阻止
继承 179
8.9 局部变量类型推断和继承 179
8.10 Object类 181
第9章 包和接口 182
9.1 包 182
9.1.1 定义包 182
9.1.2 包查找与CLASSPATH 183
9.1.3 一个简短的包示例 184
9.2 包和成员访问 185
9.3 导入包 188
9.4 接口 190
9.4.1 定义接口 191
9.4.2 实现接口 192
9.4.3 嵌套接口 194
9.4.4 应用接口 195
9.4.5 接口中的变量 198
9.4.6 接口可以扩展 200
9.5 默认接口方法 201
9.5.1 默认方法的基础知识 201
9.5.2 一个更实用的例子 203
9.5.3 多级继承的问题 203
9.6 在接口中使用静态方法 204
9.7 私有接口方法 205
9.8 关于包和接口的后说明 206
第 10 章 异常处理 207
10.1 异常处理的基础知识 207
10.2 异常类型 208
10.3 未捕获的异常 209
10.4 使用try和catch 210
10.5 多条catch子句 211
10.6 嵌套的try语句 213
10.7 throw 215
10.8 throws 216
10.9 finally 217
10.10 Java的内置异常 219
10.11 创建自己的异常子类 220
10.12 链式异常 222
10.13 其他三个异常特性 224
10.14 使用异常 225
第11章 多线程编程 226
11.1 Java线程模型 227
11.1.1 线程优先级 228
11.1.2 同步 228
11.1.3 消息传递 228
11.1.4 Thread类和Runnable
接口 229
11.2 主线程 229
11.3 创建线程 231
11.3.1 实现Runnable接口 231
11.3.2 扩展Thread类 233
11.3.3 选择一种创建方式 234
11.4 创建多个线程 234
11.5 使用isAlive()和join()方法 236
11.6 线程优先级 238
11.7 同步 239
11.7.1 使用同步方法 239
11.7.2 synchronized语句 241
11.8 线程间通信 243
11.9 挂起、恢复与停止线程 249
11.10 获取线程的状态 252
11.11 使用工厂方法创建和启动
线程 253
11.12 使用多线程 254
第 12 章 枚举、自动装箱与注解 255
12.1 枚举 255
12.1.1 枚举的基础知识 255
12.1.2 values()和valueOf()
方法 257
12.1.3 Java枚举是类类型 259
12.1.4 枚举继承自Enum类 260
12.1.5 另一个枚举示例 262
12.2 类型封装器 264
12.2.1 Character封装器 264
12.2.2 Boolean封装器 264
12.2.3 数值类型封装器 265
12.3 自动装箱 266
12.3.1 自动装箱与方法 267
12.3.2 表达式中发生的自动
装箱/拆箱 268
12.3.3 布尔型和字符型数值的
自动装箱/拆箱 269
12.3.4 自动装箱/拆箱有助于
防止错误 270
12.3.5 一些警告 271
12.4 注解 271
12.4.1 注解的基础知识 271
12.4.2 指定保留策略 272
12.4.3 在运行时使用反射获取
注解 273
12.4.4 AnnotatedElement接口 278
12.4.5 使用默认值 278
12.4.6 标记注解 279
12.4.7 单成员注解 280
12.4.8 内置注解 282
12.5 类型注解 284
12.6 重复注解 288
12.7 一些限制 289
第 13 章 I/O、带资源的try语句
以及其他主题 290
13.1 I/O的基础知识 290
13.1.1 流 290
13.1.2 字节流和字符流 291
13.1.3 预定义流 293
13.2 读取控制台输入 293
13.2.1 读取字符 294
13.2.2 读取字符串 295
13.3 向控制台写输出 297
13.4 PrintWriter类 297
13.5 读/写文件 298
13.6 自动关闭文件 304
13.7 transient和volatile修饰符 307
13.8 使用instanceof运算符 308
13.9 strictfp 310
13.10 本地方法 311
13.11 使用assert 311
13.12 静态导入 314
13.13 通过this()调用重载的构造
函数 316
13.14 基于值的类 318
第14章 泛型 319
14.1 什么是泛型 319
14.2 一个简单的泛型示例 320
14.2.1 泛型只使用引用类型 323
14.2.2 基于不同类型参数的
泛型类型是不同的 324
14.2.3 泛型提升类型安全性的
原理 324
14.3 带两个类型参数的泛型类 326
14.4 泛型类的一般形式 327
14.5 有界类型 328
14.6 使用通配符参数 330
14.7 创建泛型方法 337
14.8 泛型接口 340
14.9 原始类型与遗留代码 342
14.10 泛型类层次 344
14.10.1 使用泛型超类 345
14.10.2 泛型子类 346
14.10.3 泛型层次中的运行时
类型比较 348
14.10.4 强制转换 350
14.10.5 重写泛型类的方法 350
14.11 泛型的类型推断 351
14.12 局部变量类型推断和泛型 352
14.13 擦除 353
14.14 模糊性错误 355
14.15 使用泛型的一些限制 356
14.15.1 不能实例化类型参数 356
14.15.2 对静态成员的一些
限制 356
14.15.3 对泛型数组的一些
限制 357
14.15.4 对泛型异常的限制 358
第15 章 lambda表达式 359
15.1 lambda表达式简介 359
15.1.1 lambda表达式的基础
知识 360
15.1.2 函数式接口 360
15.1.3 几个lambda表达式
示例 361
15.2 块lambda表达式 365
15.3 泛型函数式接口 366
15.4 作为参数传递的lambda
表达式 368
15.5 lambda表达式与异常 370
15.6 lambda表达式和变量捕获 372
15.7 方法引用 373
15.7.1 静态方法的方法引用 373
15.7.2 实例方法的方法引用 374
15.7.3 泛型中的方法引用 378
15.8 构造函数引用 380
15.9 预定义的函数式接口 385
第 16 章 模块 387
16.1 模块基础知识 387
16.1.1 简单的模块示例 388
16.1.2 编译并运行个模块
示例 392
16.1.3 详述requires和exports 393
16.2 java.base和平台模块 393
16.3 旧代码和未命名的模块 394
16.4 导出到特定的模块 395
16.5 使用requires transitive 396
16.6 使用服务 400
16.6.1 服务和服务提供程序的
基础知识 400
16.6.2 基于服务的关键字 401
16.6.3 基于模块的服务示例 401
16.7 模块图 407
16.8 三个特殊的模块特性 408
16.8.1 开放模块 408
16.8.2 opens语句 408
16.8.3 requires static 408
16.9 jlink工具和模块JAR文件
介绍 409
16.9.1 链接exploded directory中
的文件 409
16.9.2 链接模块化的JAR
文件 409
16.9.3 JMOD文件 410
16.10 层与自动模块简述 410
16.11 小结 411
第 17 章 switch表达式、记录以及其他
新近添加的特性 412
17.1 switch的增强 412
17.1.1 使用case常量列表 414
17.1.2 switch表达式和yield
语句简介 415
17.1.3 case语句中的箭头 416
17.1.4 深入介绍箭头case 418
17.1.5 另外一个switch表达式
示例 420
17.2 文本块 421
17.2.1 文本块的基础知识 421
17.2.2 理解前导空格 422
17.2.3 在文本块中使用双引号 424
17.2.4 文本块中的转义序列 424
17.3 记录 425
17.3.1 记录的基础知识 425
17.3.2 创建记录构造函数 427
17.3.3 另外一个记录构造函数
示例 431
17.3.4 创建记录的getter方法 432
17.4 instanceof的模式匹配 434
17.4.1 逻辑AND表达式中的
模式变量 435
17.4.2 其他语句中的模式匹配 436
17.5 密封类和密封接口 437
17.5.1 密封类 437
17.5.2 密封接口 438
17.6 未来的方向 440
第 II 部分 Java库
第18章 字符串处理 443
18.1 String类的构造函数 443
18.2 字符串的长度 445
18.3 特殊的字符串操作 446
18.3.1 字符串字面值 446
18.3.2 字符串连接 446
18.3.3 字符串和其他数据类型的
连接 447
18.3.4 字符串转换和toString()
方法 447
18.4 提取字符 449
18.4.1 charAt() 449
18.4.2 getChars() 449
18.4.3 getBytes() 450
18.4.4 toCharArray() 450
18.5 比较字符串 450
18.5.1 equals()和
equalsIgnoreCase() 450
18.5.2 regionMatches() 451
18.5.3 startsWith()和
endsWith() 451
18.5.4 equals()与== 452
18.5.5 compareTo() 452
18.6 查找字符串 454
18.7 修改字符串 455
18.7.1 substring() 455
18.7.2 concat() 456
18.7.3 replace() 457
18.7.4 trim()和strip() 457
18.8 使用valueOf()转换数据 458
18.9 改变字符串中字符的大小写 459
18.10 连接字符串 459
18.11 其他String方法 460
18.12 StringBuffer类 461
18.12.1 StringBuffer类的构造
函数 462
18.12.2 length()与capacity() 462
18.12.3 ensureCapacity() 463
18.12.4 setLength() 463
18.12.5 charAt()与setCharAt() 463
18.12.6 append() 464
18.12.7 insert() 464
18.12.8 reverse() 465
18.12.9 delete()与
deleteCharAt() 465
18.12.10 replace() 466
18.12.11 substring() 466
18.12.12 其他StringBuffer
方法 467
18.13 StringBuilder类 468
第19章 探究java.lang 469
19.1 基本类型封装器 470
19.1.1 Number 470
19.1.2 Double与Float 470
19.1.3 理解isInfinite()与
isNaN() 474
19.1.4 Byte、Short、Integer和
Long 474
19.1.5 Character 483
19.1.6 对Unicode代码点的
附加支持 485
19.1.7 Boolean 487
19.2 Void类 488
19.3 Process类 488
19.4 Runtime类 489
19.5 Runtime.Version 491
19.6 ProcessBuilder类 492
19.7 System类 494
19.7.1 使用currentTimeMillis()
为程序的执行计时 496
19.7.2 使用arraycopy()方法 496
19.7.3 环境属性 497
19.8 System.Logger和
System.LoggerFinder 498
19.9 Object类 498
19.10 使用clone()方法和
Cloneable接口 498
19.11 Class类 500
19.12 ClassLoader类 504
19.13 Math类 504
19.13.1 三角函数 504
19.13.2 指数函数 505
19.13.3 舍入函数 505
19.13.4 其他数学方法 506
19.14 StrictMath类 508
19.15 Compiler类 508
19.16 Thread类、ThreadGroup类
和Runnable接口 508
19.16.1 Runnable接口 509
19.16.2 Thread类 509
19.16.3 ThreadGroup类 511
19.17 ThreadLocal和
InheritableThreadLocal类 515
19.18 Package类 515
19.19 Module类 516
19.20 ModuleLayer类 517
19.21 RuntimePermission类 517
19.22 Throwable类 517
19.23 SecurityManager类 518
19.24 StackTraceElement类 518
19.25 StackWalker类和
StackWalker.StackFrame
接口 518
19.26 Enum类 519
19.27 Record类 519
19.28 ClassValue类 519
19.29 CharSequence接口 520
19.30 Comparable接口 520
19.31 Appendable接口 520
19.32 Iterable接口 521
19.33 Readable接口 521
19.34 AutoCloseable接口 522
19.35 Thread.UncaughtException
Handler接口 522
19.36 java.lang子包 522
19.36.1 java.lang.annotation 522
19.36.2 java.lang.constant 523
19.36.3 java.lang.instrument 523
19.36.4 java.lang.invoke 523
19.36.5 java.lang.management 523
19.36.6 java.lang.module 523
19.36.7 java.lang.ref 523
19.36.8 java.lang.reflect 523
第20章 java.util部分:集合
框架 524
20.1 集合概述 525
20.2 集合接口 526
20.2.1 Collection接口 527
20.2.2 List接口 529
20.2.3 Set接口 531
20.2.4 SortedSet接口 532
20.2.5 NavigableSet接口 532
20.2.6 Queue接口 533
20.2.7 Deque接口 534
20.3 集合类 536
20.3.1 ArrayList类 536
20.3.2 LinkedList类 539
20.3.3 HashSet类 541
20.3.4 LinkedHashSet类 542
20.3.5 TreeSet类 543
20.3.6 PriorityQueue类 544
20.3.7 ArrayDeque类 545
20.3.8 EnumSet类 546
20.4 通过迭代器访问集合 547
20.4.1 使用迭代器 548
20.4.2 使用for-each循环替代
迭代器 549
20.5 Spliterator 550
20.6 在集合中存储用户定义的类 553
20.7 RandomAccess接口 554
20.8 使用映射 554
20.8.1 映射接口 555
20.8.2 映射类 560
20.9 比较器 565
20.10 集合算法 573
20.11 Arrays类 578
20.12 遗留的类和接口 583
20.12.1 Enumeration接口 584
20.12.2 Vector类 584
20.12.3 Stack类 588
20.12.4 Dictionary类 590
20.12.5 Hashtable类 591
20.12.6 Properties类 594
20.12.7 使用store()和load()
方法 597
20.13 集合小结 599
第21章 java.util第二部分:更多
实用工具类 600
21.1 StringTokenizer类 600
21.2 BitSet类 602
21.3 Optional、OptionalDouble、
OptionalInt和OptionalLong 604
21.4 Date类 607
21.5 Calendar类 608
21.6 GregorianCalendar类 611
21.7 TimeZone类 613
21.8 SimpleTimeZone类 614
21.9 Locale类 615
21.10 Random类 616
21.11 Timer和TimerTask类 618
21.12 Currency类 620
21.13 Formatter类 621
21.13.1 Formatter类的构造
函数 622
21.13.2 Formatter类的方法 622
21.13.3 格式化的基础知识 623
21.13.4 格式化字符串和字符 625
21.13.5 格式化数字 625
21.13.6 格式化时间和日期 626
21.13.7 %n和%%说明符 628
21.13.8 指定小字段宽度 628
21.13.9 指定精度 629
21.13.10 使用格式标志 630
21.13.11 对齐输出 631
21.13.12 空格、 、0和(标志 631
21.13.13 逗号标志 633
21.13.14 #标志 633
21.13.15 大写选项 633
21.13.16 使用参数索引 634
21.13.17 关闭Formatter对象 635
21.13.18 printf()方法 635
21.14 Scanner类 635
21.14.1 Scanner类的构造
函数 636
21.14.2 扫描的基础知识 637
21.14.3 一些Scanner示例 639
21.14.4 设置定界符 643
21.14.5 其他Scanner特性 644
21.15 ResourceBundle、
ListResourceBundle和
PropertyResourceBundle类 645
21.16 其他实用工具类和接口 649
21.17 java.util子包 650
21.17.1 java.util.concurrent、
java.util.concurrent.atomic
和java.util.concurrent.
locks 651
21.17.2 java.util.function 651
21.17.3 java.util.jar 653
21.17.4 java.util.logging 653
21.17.5 java.util.prefs 654
21.17.6 java.util.random 654
21.17.7 java.util.regex 654
21.17.8 java.util.spi 654
21.17.9 java.util.stream 654
21.17.10 java.util.zip 654
第22章 输入/输出:探究java.io 655
22.1 I/O类和接口 655
22.2 File类 656
22.2.1 目录 659
22.2.2 使用FilenameFilter
接口 660
22.2.3 listFiles()方法 661
22.2.4 创建目录 662
22.3 AutoCloseable、Closeable和
Flushable接口 662
22.4 I/O异常 662
22.5 关闭流的两种方式 663
22.6 流类 664
22.7 字节流 664
22.7.1 InputStream类 664
22.7.2 OutputStream类 665
22.7.3 FileInputStream类 666
22.7.4 FileOutputStream类 668
22.7.5 ByteArrayInputStream类 670
22.7.6 ByteArrayOutputStream
类 672
22.7.7 过滤的字节流 673
22.7.8 缓冲的字节流 673
22.7.9 SequenceInputStream类 677
22.7.10 PrintStream类 679
22.7.11 DataOutputStream类
和DataInputStream类 681
22.7.12 RandomAccessFile类 683
22.8 字符流 683
22.8.1 Reader类 684
22.8.2 Writer类 684
22.8.3 FileReader类 685
22.8.4 FileWriter类 686
22.8.5 CharArrayReader类 687
22.8.6 CharArrayWriter类 688
22.8.7 BufferedReader类 689
22.8.8 BufferedWriter类 691
22.8.9 PushbackReader类 691
22.8.10 PrintWriter类 692
22.9 Console类 693
22.10 串行化 695
22.10.1 Serializable接口 695
22.10.2 Externalizable接口 695
22.10.3 ObjectOutput接口 696
22.10.4 ObjectOutputStream类 696
22.10.5 ObjectInput接口 697
22.10.6 ObjectInputStream类 698
22.10.7 串行化示例 699
22.11 流的优点 702
第23章 探究NIO 703
23.1 NIO类 703
23.2 NIO的基础知识 704
23.2.1 缓冲区 704
23.2.2 通道 706
23.2.3 字符集和选择器 707
23.3 NIO.2对NIO的增强 708
23.3.1 Path接口 708
23.3.2 Files类 709
23.3.3 Paths类 712
23.3.4 文件属性接口 712
23.3.5 FileSystem、FileSystems和
FileStore类 714
23.4 使用NIO系统 714
23.4.1 为基于通道的I/O
使用NIO 715
23.4.2 为基于流的I/O
使用NIO 723
23.4.3 为路径和文件系统操作
使用NIO 725
第24章 联网 734
24.1 联网的基础知识 734
24.2 java.net联网类和接口 735
24.3 InetAddress类 736
24.3.1 工厂方法 736
24.3.2 实例方法 737
24.4 Inet4Address类和
Inet6Address类 738
24.5 TCP/IP客户端套接字 738
24.6 URL类 741
24.7 URLConnection类 742
24.8 HttpURLConnection类 745
24.9 URI类 746
24.10 cookie 746
24.11 TCP/IP服务器套接字 747
24.12 数据报 747
24.12.1 DatagramSocket类 748
24.12.2 DatagramPacket类 748
24.12.3 数据报示例 749
24.13 java.net.http包 751
24.13.1 三个关键元素 751
24.13.2 一个简单的HTTP Client
示例 754
24.13.3 有关java.net.http的
进一步探讨 755
第25章 事件处理 756
25.1 两种事件处理机制 756
25.2 委托事件模型 757
25.2.1 事件 757
25.2.2 事件源 757
25.2.3 事件监听器 758
25.3 事件类 758
25.3.1 ActionEvent类 759
25.3.2 AdjustmentEvent类 760
25.3.3 ComponentEvent类 761
25.3.4 ContainerEvent类 761
25.3.5 FocusEvent类 762
25.3.6 InputEvent类 763
25.3.7 ItemEvent类 764
25.4 KeyEvent类 764
25.4.1 MouseEvent类 765
25.4.2 MouseWheelEvent类 766
25.4.3 TextEvent类 767
25.4.4 WindowEvent类 767
25.5 事件源 768
25.6 事件监听器接口 769
25.6.1 ActionListener接口 770
25.6.2 AdjustmentListener
接口 770
25.6.3 ComponentListener
接口 770
25.6.4 ContainerListener接口 770
25.6.5 FocusListener接口 770
25.6.6 ItemListener接口 770
25.6.7 KeyListener接口 771
25.6.8 MouseListener接口 771
25.6.9 MouseMotionListener
接口 771
25.6.10 MouseWheelListener
接口 771
25.6.11 TextListener接口 771
25.6.12 WindowFocusListener
接口 772
25.6.13 WindowListener接口 772
25.7 使用委托事件模型 772
25.7.1 一些重要的AWT GUI
概念 772
25.7.2 处理鼠标事件 773
25.7.3 处理键盘事件 776
25.8 适配器类 780
25.9 内部类 782
第26章 AWT介绍:使用窗口、
图形和文本 786
26.1 AWT类 787
26.2 窗口基本元素 788
26.2.1 Component类 789
26.2.2 Container类 789
26.2.3 Panel类 789
26.2.4 Window类 789
26.2.5 Frame类 789
26.2.6 Canvas类 790
26.3 使用框架窗口 790
26.3.1 设置窗口的尺寸 790
26.3.2 隐藏和显示窗口 790
26.3.3 设置窗口的标题 791
26.3.4 关闭框架窗口 791
26.3.5 paint()方法 791
26.3.6 显示字符串 791
26.3.7 设置前景色和背景色 792
26.3.8 请求重画 792
26.3.9 创建基于框架的应用
程序 793
26.4 使用图形 794
26.4.1 绘制直线 794
26.4.2 绘制矩形 794
26.4.3 绘制椭圆和圆 795
26.4.4 绘制弧形 795
26.4.5 绘制多边形 795
26.4.6 演示绘制方法 795
26.4.7 改变图形的大小 797
26.5 使用颜色 798
26.5.1 Color类的方法 799
26.5.2 设置当前图形的颜色 800
26.5.3 一个演示颜色的程序 800
26.6 设置绘图模式 801
26.7 使用字体 803
26.7.1 确定可用字体 804
26.7.2 创建和选择字体 805
26.7.3 获取字体信息 807
26.8 使用FontMetrics管理文本
输出 808
第27章 使用AWT控件、布局
管理器和菜单 812
27.1 AWT控件的基础知识 812
27.1.1 添加和移除控件 813
27.1.2 响应控件 813
27.1.3 HeadlessException异常 813
27.2 使用标签 813
27.3 使用命令按钮 815
27.4 使用复选框 819
27.5 使用复选框组 822
27.6 使用下拉列表 823
27.7 使用列表框 826
27.8 管理滚动条 829
27.9 使用TextField 832
27.10 使用TextArea 834
27.11 理解布局管理器 836
27.11.1 FlowLayout布局
管理器 837
27.11.2 BorderLayout布局
管理器 838
27.11.3 使用Insets 839
27.11.4 GridLayout布局
管理器 841
27.11.5 CardLayout布局
管理器 842
27.11.6 GridBagLayout布局
管理器 845
27.12 菜单栏和菜单 850
27.13 对话框 854
27.14 关于重写paint()方法 859
第28章 图像 860
28.1 文件格式 860
28.2 图像基础知识:创建、
加载与显示 861
28.2.1 创建Image对象 861
28.2.2 加载图像 861
28.2.3 显示图像 862
28.3 双缓冲 863
28.4 ImageProducer接口 866
28.5 ImageConsumer接口 867
28.6 ImageFilter类 870
28.6.1 CropImageFilter类 870
28.6.2 RGBImageFilter类 872
28.7 其他图像类 883
第29章 并发实用工具 884
29.1 并发API包 885
29.1.1 java.util.concurrent包 885
29.1.2 java.util.concurrent.
atomic包 886
29.1.3 java.util.concurrent.
locks包 886
29.2 使用同步对象 886
29.2.1 Semaphore类 886
29.2.2 CountDownLatch类 892
29.2.3 CyclicBarrier类 893
29.2.4 Exchanger类 896
29.2.5 Phaser类 898
29.3 使用执行器 905
29.3.1 一个简单的执行器示例 906
29.3.2 使用Callable和Future
接口 908
29.4 TimeUnit枚举 910
29.5 并发集合 911
29.6 锁 912
29.7 原子操作 915
29.8 通过Fork/Join框架进行
并行编程 916
29.8.1 主要的Fork/Join类 916
29.8.2 分而治之的策略 919
29.8.3 一个简单的Fork/Join
示例 920
29.8.4 理解并行级别带来的
影响 922
29.8.5 一个使用
RecursiveTask的
例子 925
29.8.6 异步执行任务 928
29.8.7 取消任务 928
29.8.8 确定任务的完成状态 928
29.8.9 重新启动任务 929
29.8.10 深入研究 929
29.8.11 关于Fork/Join框架的
一些提示 930
29.9 并发实用工具与Java传统
方式的比较 931
第30章 流API 932
30.1 流的基础知识 932
30.1.1 流接口 933
30.1.2 如何获得流 935
30.1.3 一个简单的流示例 935
30.2 缩减操作 938
30.3 使用并行流 941
30.4 映射 943
30.5 收集 947
30.6 迭代器和流 950
30.6.1 对流使用迭代器 950
30.6.2 使用Spliterator 951
30.7 流API中更多值得探究的
地方 954
第31章 正则表达式和其他包 955
31.1 正则表达式处理 955
31.1.1 Pattern类 955
31.1.2 Matcher类 956
31.1.3 正则表达式的语法 957
31.1.4 演示模式匹配 957
31.1.5 模式匹配的两个选项 962
31.1.6 探究正则表达式 963
31.2 反射 963
31.3 远程方法调用 967
31.4 使用java.text格式化日期和
时间 970
31.4.1 DateFormat类 970
31.4.2 SimpleDateFormat类 972
31.5 java.time的时间和日期API 974
31.5.1 时间和日期的基础知识 974
31.5.2 格式化日期和时间 975
31.5.3 解析日期和时间字符串 978
31.5.4 探究java.time包的其他
方面 979 第 III 部分 使用Swing进行GUI编程
第 32 章 Swing简介 983
32.1 Swing的起源 983
32.2 Swing的构建以AWT为
基础 984
32.3 两个关键的Swing特性 984
32.3.1 Swing组件是轻量级的 984
32.3.2 Swing支持可插入外观 984
32.4 MVC连接 985
32.5 组件与容器 985
32.5.1 组件 986
32.5.2 容器 986
32.5.3 容器窗格 987
32.6 Swing包 987
32.7 一个简单的Swing应用程序 987
32.8 事件处理 991
32.9 在Swing中绘图 994
32.9.1 绘图的基础知识 994
32.9.2 计算可绘制区域 995
32.9.3 一个绘图示例 996
第33章 探索Swing 999
33.1 JLabel与ImageIcon 999
33.2 JTextField 1001
33.3 Swing按钮 1003
33.3.1 JButton 1003
33.3.2 JToggleButton 1005
33.3.3 复选框 1007
33.3.4 单选按钮 1009
33.4 JTabbedPane 1011
33.5 JScrollPane 1014
33.6 JList 1015
33.7 JComboBox 1018
33.8 树 1020
33.9 JTable 1024
第34章 Swing菜单简介 1027
34.1 菜单的基础知识 1027
34.2 JMenuBar、JMenu和
JMenuItem概述 1028
34.2.1 JMenuBar 1029
34.2.2 JMenu 1029
34.2.3 JMenuItem 1030
34.3 创建主菜单 1031
34.4 向菜单项添加助记符和
加速键 1035
34.5 向菜单项添加图片和
工具提示 1037
34.6 使用JRadioButtonMenuItem和
JCheckBoxMenuItem 1038
34.7 创建弹出菜单 1040
34.8 创建工具栏 1043
34.9 使用动作 1045
34.10 完整演示MenuDemo
程序 1050
34.11 继续探究Swing 1057
第 IV 部分 应用Java
第35章 Java Bean 1061
35.1 Java Bean是什么 1061
35.2 Java Bean的优势 1062
35.3 内省 1062
35.3.1 属性的设计模式 1062
35.3.2 事件的设计模式 1063
35.3.3 方法与设计模式 1064
35.3.4 使用BeanInfo接口 1064
35.4 绑定属性与约束属性 1065
35.5 持久性 1065
35.6 定制器 1065
35.7 Java Bean API 1065
35.7.1 Introspector类 1067
35.7.2 PropertyDescriptor类 1067
35.7.3 EventSetDescriptor类 1067
35.7.4 MethodDescriptor类 1067
35.8 一个Bean示例 1068
第36章 servlet 1071
36.1 背景 1071
36.2 servlet的生命周期 1072
36.3 servlet开发选项 1072
36.4 使用Tomcat 1073
36.5 一个简单的servlet 1074
36.5.1 创建和编译servlet
源代码 1074
36.5.2 启动Tomcat 1075
36.5.3 启动Web浏览器并
请求servlet 1075
36.6 Servlet API 1075
36.7 jakarta.servlet包 1076
36.7.1 Servlet接口 1076
36.7.2 ServletConfig接口 1077
36.7.3 ServletContext接口 1077
36.7.4 ServletRequest接口 1078
36.7.5 ServletResponse接口 1078
36.7.6 GenericServlet类 1079
36.7.7 ServletInputStream类 1079
36.7.8 ServletOutputStream类 1079
36.7.9 servlet异常类 1079
36.8 读取servlet参数 1079
36.9 jakarta.servlet.http包 1081
36.9.1 HttpServletRequest
接口 1081
36.9.2 HttpServletResponse
接口 1082
36.9.3 HttpSession接口 1083
36.9.4 Cookie类 1084
36.9.5 HttpServlet类 1085
36.10 处理HTTP请求和响应 1086
36.10.1 处理HTTP GET
请求 1086
36.10.2 处理HTTP POST
请求 1087
36.11 使用cookie 1088
36.12 会话跟踪 1091
第 V 部分 附录
附录A 使用Java的文档注释 1095
附录B JShell简介 1103
附录C 在一个步骤中编译和运行
简单的单文件程序 1112
第 1 章 Java的历史和演变 3
1.1 Java的家世 3
1.1.1 现代编程语言的诞生:
C语言 3
1.1.2 C :下一个阶段 5
1.1.3 Java出现的时机已经成熟 5
1.2 Java的诞生 6
1.3 Java改变Internet的方式 7
1.3.1 Java applet 7
1.3.2 安全性 8
1.3.3 可移植性 8
1.4 Java的魔力:字节码 8
1.5 超越applet 9
1.6 更快的发布周期 10
1.7 servlet:服务器端的Java 11
1.8 Java的关键特性 11
1.8.1 简单性 11
1.8.2 面向对象 12
1.8.3 健壮性 12
1.8.4 多线程 12
1.8.5 体系结构中立 12
1.8.6 解释执行和高性能 13
1.8.7 分布式 13
1.8.8 动态性 13
1.9 Java的演变历程 13
1.10 文化革新 17
第2 章 Java综述 18
2.1 面向对象编程 18
2.1.1 两种范式 18
2.1.2 抽象 19
2.1.3 OOP三原则 19
2.2 个简单程序 23
2.2.1 输入程序 23
2.2.2 编译程序 24
2.2.3 深入分析个示例程序 24
2.3 第二个简单程序 26
2.4 两种控制语句 28
2.4.1 if语句 28
2.4.2 for循环 29
2.5 使用代码块 30
2.6 词汇问题 32
2.6.1 空白符 32
2.6.2 标识符 32
2.6.3 字面值 32
2.6.4 注释 33
2.6.5 分隔符 33
2.6.6 Java关键字 33
2.7 Java类库 34
第3 章 数据类型、变量和数组 35
3.1 Java是强类型化的语言 35
3.2 基本类型 35
3.3 整型 36
3.3.1 byte 36
3.3.2 short 36
3.3.3 int 37
3.3.4 long 37
3.4 浮点型 38
3.4.1 float 38
3.4.2 double 38
3.5 字符型 39
3.6 布尔型 40
3.7 深入分析字面值 41
3.7.1 整型字面值 41
3.7.2 浮点型字面值 42
3.7.3 布尔型字面值 42
3.7.4 字符型字面值 43
3.7.5 字符串字面值 43
3.8 变量 44
3.8.1 变量的声明 44
3.8.2 动态初始化 44
3.8.3 变量的作用域和生存期 45
3.9 类型转换和强制类型转换 47
3.9.1 Java的自动类型转换 47
3.9.2 强制转换不兼容的类型 47
3.10 表达式中的自动类型提升 49
3.11 数组 50
3.11.1 一维数组 50
3.11.2 多维数组 52
3.11.3 另一种数组声明语法 56
3.12 局部变量的类型推断 57
3.13 关于字符串的一些说明 59
第4章 运算符 60
4.1 算术运算符 60
4.1.1 基本算术运算符 61
4.1.2 求模运算符 62
4.1.3 算术与赋值复合运算符 62
4.1.4 自增与自减运算符 63
4.2 位运算符 64
4.2.1 位逻辑运算符 66
4.2.2 左移 68
4.2.3 右移 69
4.2.4 无符号右移 70
4.2.5 位运算符与赋值的组合 71
4.3 关系运算符 72
4.4 布尔逻辑运算符 73
4.5 赋值运算符 75
4.6 “?”运算符 75
4.7 运算符的优先级 76
4.8 使用圆括号 77
第 5 章 控制语句 78
5.1 Java的选择语句 78
5.1.1 if语句 78
5.1.2 switch语句 81
5.2 迭代语句 86
5.2.1 while语句 86
5.2.2 do-while语句 87
5.2.3 for语句 90
5.2.4 for循环的for-each版本 93
5.2.5 for循环中的局部变量
类型推断 98
5.2.6 嵌套的循环 99
5.3 跳转语句 99
5.3.1 使用break语句 99
5.3.2 使用continue语句 103
5.3.3 使用return语句 104
第 6 章 类 106
6.1 类的基础知识 106
6.1.1 类的一般形式 106
6.1.2 一个简单的类 107
6.2 声明对象 109
6.3 为对象引用变量赋值 111
6.4 方法 112
6.4.1 为Box类添加方法 112
6.4.2 返回值 114
6.4.3 添加带参数的方法 115
6.5 构造函数 117
6.6 this关键字 120
6.7 垃圾回收 121
6.8 堆栈类 121
第 7 章 方法和类的深入分析 124
7.1 重载方法 124
7.2 将对象用作形参 129
7.3 实参传递的深入分析 131
7.4 返回对象 133
7.5 递归 134
7.6 访问控制 136
7.7 理解static 139
7.8 final介绍 141
7.9 重新审视数组 141
7.10 嵌套类和内部类 143
7.11 String类 145
7.12 使用命令行参数 148
7.13 varargs:可变长度实参 148
7.13.1 重载varargs方法 151
7.13.2 varargs方法与模糊性 152
第 8 章 继承 156
8.1 继承的基础知识 156
8.1.1 成员访问与继承 158
8.1.2 一个更实际的例子 159
8.1.3 超类变量可以引用子类
对象 161
8.2 使用super关键字 161
8.2.1 使用super调用超类的
构造函数 162
8.2.2 super的另一种用法 165
8.3 创建多级继承层次 166
8.4 构造函数的执行时机 169
8.5 方法重写 170
8.6 动态方法调度 172
8.6.1 重写方法的原因 174
8.6.2 应用方法重写 174
8.7 使用抽象类 176
8.8 在继承中使用final关键字 178
8.8.1 使用final关键字阻止
重写 178
8.8.2 使用final关键字阻止
继承 179
8.9 局部变量类型推断和继承 179
8.10 Object类 181
第9章 包和接口 182
9.1 包 182
9.1.1 定义包 182
9.1.2 包查找与CLASSPATH 183
9.1.3 一个简短的包示例 184
9.2 包和成员访问 185
9.3 导入包 188
9.4 接口 190
9.4.1 定义接口 191
9.4.2 实现接口 192
9.4.3 嵌套接口 194
9.4.4 应用接口 195
9.4.5 接口中的变量 198
9.4.6 接口可以扩展 200
9.5 默认接口方法 201
9.5.1 默认方法的基础知识 201
9.5.2 一个更实用的例子 203
9.5.3 多级继承的问题 203
9.6 在接口中使用静态方法 204
9.7 私有接口方法 205
9.8 关于包和接口的后说明 206
第 10 章 异常处理 207
10.1 异常处理的基础知识 207
10.2 异常类型 208
10.3 未捕获的异常 209
10.4 使用try和catch 210
10.5 多条catch子句 211
10.6 嵌套的try语句 213
10.7 throw 215
10.8 throws 216
10.9 finally 217
10.10 Java的内置异常 219
10.11 创建自己的异常子类 220
10.12 链式异常 222
10.13 其他三个异常特性 224
10.14 使用异常 225
第11章 多线程编程 226
11.1 Java线程模型 227
11.1.1 线程优先级 228
11.1.2 同步 228
11.1.3 消息传递 228
11.1.4 Thread类和Runnable
接口 229
11.2 主线程 229
11.3 创建线程 231
11.3.1 实现Runnable接口 231
11.3.2 扩展Thread类 233
11.3.3 选择一种创建方式 234
11.4 创建多个线程 234
11.5 使用isAlive()和join()方法 236
11.6 线程优先级 238
11.7 同步 239
11.7.1 使用同步方法 239
11.7.2 synchronized语句 241
11.8 线程间通信 243
11.9 挂起、恢复与停止线程 249
11.10 获取线程的状态 252
11.11 使用工厂方法创建和启动
线程 253
11.12 使用多线程 254
第 12 章 枚举、自动装箱与注解 255
12.1 枚举 255
12.1.1 枚举的基础知识 255
12.1.2 values()和valueOf()
方法 257
12.1.3 Java枚举是类类型 259
12.1.4 枚举继承自Enum类 260
12.1.5 另一个枚举示例 262
12.2 类型封装器 264
12.2.1 Character封装器 264
12.2.2 Boolean封装器 264
12.2.3 数值类型封装器 265
12.3 自动装箱 266
12.3.1 自动装箱与方法 267
12.3.2 表达式中发生的自动
装箱/拆箱 268
12.3.3 布尔型和字符型数值的
自动装箱/拆箱 269
12.3.4 自动装箱/拆箱有助于
防止错误 270
12.3.5 一些警告 271
12.4 注解 271
12.4.1 注解的基础知识 271
12.4.2 指定保留策略 272
12.4.3 在运行时使用反射获取
注解 273
12.4.4 AnnotatedElement接口 278
12.4.5 使用默认值 278
12.4.6 标记注解 279
12.4.7 单成员注解 280
12.4.8 内置注解 282
12.5 类型注解 284
12.6 重复注解 288
12.7 一些限制 289
第 13 章 I/O、带资源的try语句
以及其他主题 290
13.1 I/O的基础知识 290
13.1.1 流 290
13.1.2 字节流和字符流 291
13.1.3 预定义流 293
13.2 读取控制台输入 293
13.2.1 读取字符 294
13.2.2 读取字符串 295
13.3 向控制台写输出 297
13.4 PrintWriter类 297
13.5 读/写文件 298
13.6 自动关闭文件 304
13.7 transient和volatile修饰符 307
13.8 使用instanceof运算符 308
13.9 strictfp 310
13.10 本地方法 311
13.11 使用assert 311
13.12 静态导入 314
13.13 通过this()调用重载的构造
函数 316
13.14 基于值的类 318
第14章 泛型 319
14.1 什么是泛型 319
14.2 一个简单的泛型示例 320
14.2.1 泛型只使用引用类型 323
14.2.2 基于不同类型参数的
泛型类型是不同的 324
14.2.3 泛型提升类型安全性的
原理 324
14.3 带两个类型参数的泛型类 326
14.4 泛型类的一般形式 327
14.5 有界类型 328
14.6 使用通配符参数 330
14.7 创建泛型方法 337
14.8 泛型接口 340
14.9 原始类型与遗留代码 342
14.10 泛型类层次 344
14.10.1 使用泛型超类 345
14.10.2 泛型子类 346
14.10.3 泛型层次中的运行时
类型比较 348
14.10.4 强制转换 350
14.10.5 重写泛型类的方法 350
14.11 泛型的类型推断 351
14.12 局部变量类型推断和泛型 352
14.13 擦除 353
14.14 模糊性错误 355
14.15 使用泛型的一些限制 356
14.15.1 不能实例化类型参数 356
14.15.2 对静态成员的一些
限制 356
14.15.3 对泛型数组的一些
限制 357
14.15.4 对泛型异常的限制 358
第15 章 lambda表达式 359
15.1 lambda表达式简介 359
15.1.1 lambda表达式的基础
知识 360
15.1.2 函数式接口 360
15.1.3 几个lambda表达式
示例 361
15.2 块lambda表达式 365
15.3 泛型函数式接口 366
15.4 作为参数传递的lambda
表达式 368
15.5 lambda表达式与异常 370
15.6 lambda表达式和变量捕获 372
15.7 方法引用 373
15.7.1 静态方法的方法引用 373
15.7.2 实例方法的方法引用 374
15.7.3 泛型中的方法引用 378
15.8 构造函数引用 380
15.9 预定义的函数式接口 385
第 16 章 模块 387
16.1 模块基础知识 387
16.1.1 简单的模块示例 388
16.1.2 编译并运行个模块
示例 392
16.1.3 详述requires和exports 393
16.2 java.base和平台模块 393
16.3 旧代码和未命名的模块 394
16.4 导出到特定的模块 395
16.5 使用requires transitive 396
16.6 使用服务 400
16.6.1 服务和服务提供程序的
基础知识 400
16.6.2 基于服务的关键字 401
16.6.3 基于模块的服务示例 401
16.7 模块图 407
16.8 三个特殊的模块特性 408
16.8.1 开放模块 408
16.8.2 opens语句 408
16.8.3 requires static 408
16.9 jlink工具和模块JAR文件
介绍 409
16.9.1 链接exploded directory中
的文件 409
16.9.2 链接模块化的JAR
文件 409
16.9.3 JMOD文件 410
16.10 层与自动模块简述 410
16.11 小结 411
第 17 章 switch表达式、记录以及其他
新近添加的特性 412
17.1 switch的增强 412
17.1.1 使用case常量列表 414
17.1.2 switch表达式和yield
语句简介 415
17.1.3 case语句中的箭头 416
17.1.4 深入介绍箭头case 418
17.1.5 另外一个switch表达式
示例 420
17.2 文本块 421
17.2.1 文本块的基础知识 421
17.2.2 理解前导空格 422
17.2.3 在文本块中使用双引号 424
17.2.4 文本块中的转义序列 424
17.3 记录 425
17.3.1 记录的基础知识 425
17.3.2 创建记录构造函数 427
17.3.3 另外一个记录构造函数
示例 431
17.3.4 创建记录的getter方法 432
17.4 instanceof的模式匹配 434
17.4.1 逻辑AND表达式中的
模式变量 435
17.4.2 其他语句中的模式匹配 436
17.5 密封类和密封接口 437
17.5.1 密封类 437
17.5.2 密封接口 438
17.6 未来的方向 440
第 II 部分 Java库
第18章 字符串处理 443
18.1 String类的构造函数 443
18.2 字符串的长度 445
18.3 特殊的字符串操作 446
18.3.1 字符串字面值 446
18.3.2 字符串连接 446
18.3.3 字符串和其他数据类型的
连接 447
18.3.4 字符串转换和toString()
方法 447
18.4 提取字符 449
18.4.1 charAt() 449
18.4.2 getChars() 449
18.4.3 getBytes() 450
18.4.4 toCharArray() 450
18.5 比较字符串 450
18.5.1 equals()和
equalsIgnoreCase() 450
18.5.2 regionMatches() 451
18.5.3 startsWith()和
endsWith() 451
18.5.4 equals()与== 452
18.5.5 compareTo() 452
18.6 查找字符串 454
18.7 修改字符串 455
18.7.1 substring() 455
18.7.2 concat() 456
18.7.3 replace() 457
18.7.4 trim()和strip() 457
18.8 使用valueOf()转换数据 458
18.9 改变字符串中字符的大小写 459
18.10 连接字符串 459
18.11 其他String方法 460
18.12 StringBuffer类 461
18.12.1 StringBuffer类的构造
函数 462
18.12.2 length()与capacity() 462
18.12.3 ensureCapacity() 463
18.12.4 setLength() 463
18.12.5 charAt()与setCharAt() 463
18.12.6 append() 464
18.12.7 insert() 464
18.12.8 reverse() 465
18.12.9 delete()与
deleteCharAt() 465
18.12.10 replace() 466
18.12.11 substring() 466
18.12.12 其他StringBuffer
方法 467
18.13 StringBuilder类 468
第19章 探究java.lang 469
19.1 基本类型封装器 470
19.1.1 Number 470
19.1.2 Double与Float 470
19.1.3 理解isInfinite()与
isNaN() 474
19.1.4 Byte、Short、Integer和
Long 474
19.1.5 Character 483
19.1.6 对Unicode代码点的
附加支持 485
19.1.7 Boolean 487
19.2 Void类 488
19.3 Process类 488
19.4 Runtime类 489
19.5 Runtime.Version 491
19.6 ProcessBuilder类 492
19.7 System类 494
19.7.1 使用currentTimeMillis()
为程序的执行计时 496
19.7.2 使用arraycopy()方法 496
19.7.3 环境属性 497
19.8 System.Logger和
System.LoggerFinder 498
19.9 Object类 498
19.10 使用clone()方法和
Cloneable接口 498
19.11 Class类 500
19.12 ClassLoader类 504
19.13 Math类 504
19.13.1 三角函数 504
19.13.2 指数函数 505
19.13.3 舍入函数 505
19.13.4 其他数学方法 506
19.14 StrictMath类 508
19.15 Compiler类 508
19.16 Thread类、ThreadGroup类
和Runnable接口 508
19.16.1 Runnable接口 509
19.16.2 Thread类 509
19.16.3 ThreadGroup类 511
19.17 ThreadLocal和
InheritableThreadLocal类 515
19.18 Package类 515
19.19 Module类 516
19.20 ModuleLayer类 517
19.21 RuntimePermission类 517
19.22 Throwable类 517
19.23 SecurityManager类 518
19.24 StackTraceElement类 518
19.25 StackWalker类和
StackWalker.StackFrame
接口 518
19.26 Enum类 519
19.27 Record类 519
19.28 ClassValue类 519
19.29 CharSequence接口 520
19.30 Comparable接口 520
19.31 Appendable接口 520
19.32 Iterable接口 521
19.33 Readable接口 521
19.34 AutoCloseable接口 522
19.35 Thread.UncaughtException
Handler接口 522
19.36 java.lang子包 522
19.36.1 java.lang.annotation 522
19.36.2 java.lang.constant 523
19.36.3 java.lang.instrument 523
19.36.4 java.lang.invoke 523
19.36.5 java.lang.management 523
19.36.6 java.lang.module 523
19.36.7 java.lang.ref 523
19.36.8 java.lang.reflect 523
第20章 java.util部分:集合
框架 524
20.1 集合概述 525
20.2 集合接口 526
20.2.1 Collection接口 527
20.2.2 List接口 529
20.2.3 Set接口 531
20.2.4 SortedSet接口 532
20.2.5 NavigableSet接口 532
20.2.6 Queue接口 533
20.2.7 Deque接口 534
20.3 集合类 536
20.3.1 ArrayList类 536
20.3.2 LinkedList类 539
20.3.3 HashSet类 541
20.3.4 LinkedHashSet类 542
20.3.5 TreeSet类 543
20.3.6 PriorityQueue类 544
20.3.7 ArrayDeque类 545
20.3.8 EnumSet类 546
20.4 通过迭代器访问集合 547
20.4.1 使用迭代器 548
20.4.2 使用for-each循环替代
迭代器 549
20.5 Spliterator 550
20.6 在集合中存储用户定义的类 553
20.7 RandomAccess接口 554
20.8 使用映射 554
20.8.1 映射接口 555
20.8.2 映射类 560
20.9 比较器 565
20.10 集合算法 573
20.11 Arrays类 578
20.12 遗留的类和接口 583
20.12.1 Enumeration接口 584
20.12.2 Vector类 584
20.12.3 Stack类 588
20.12.4 Dictionary类 590
20.12.5 Hashtable类 591
20.12.6 Properties类 594
20.12.7 使用store()和load()
方法 597
20.13 集合小结 599
第21章 java.util第二部分:更多
实用工具类 600
21.1 StringTokenizer类 600
21.2 BitSet类 602
21.3 Optional、OptionalDouble、
OptionalInt和OptionalLong 604
21.4 Date类 607
21.5 Calendar类 608
21.6 GregorianCalendar类 611
21.7 TimeZone类 613
21.8 SimpleTimeZone类 614
21.9 Locale类 615
21.10 Random类 616
21.11 Timer和TimerTask类 618
21.12 Currency类 620
21.13 Formatter类 621
21.13.1 Formatter类的构造
函数 622
21.13.2 Formatter类的方法 622
21.13.3 格式化的基础知识 623
21.13.4 格式化字符串和字符 625
21.13.5 格式化数字 625
21.13.6 格式化时间和日期 626
21.13.7 %n和%%说明符 628
21.13.8 指定小字段宽度 628
21.13.9 指定精度 629
21.13.10 使用格式标志 630
21.13.11 对齐输出 631
21.13.12 空格、 、0和(标志 631
21.13.13 逗号标志 633
21.13.14 #标志 633
21.13.15 大写选项 633
21.13.16 使用参数索引 634
21.13.17 关闭Formatter对象 635
21.13.18 printf()方法 635
21.14 Scanner类 635
21.14.1 Scanner类的构造
函数 636
21.14.2 扫描的基础知识 637
21.14.3 一些Scanner示例 639
21.14.4 设置定界符 643
21.14.5 其他Scanner特性 644
21.15 ResourceBundle、
ListResourceBundle和
PropertyResourceBundle类 645
21.16 其他实用工具类和接口 649
21.17 java.util子包 650
21.17.1 java.util.concurrent、
java.util.concurrent.atomic
和java.util.concurrent.
locks 651
21.17.2 java.util.function 651
21.17.3 java.util.jar 653
21.17.4 java.util.logging 653
21.17.5 java.util.prefs 654
21.17.6 java.util.random 654
21.17.7 java.util.regex 654
21.17.8 java.util.spi 654
21.17.9 java.util.stream 654
21.17.10 java.util.zip 654
第22章 输入/输出:探究java.io 655
22.1 I/O类和接口 655
22.2 File类 656
22.2.1 目录 659
22.2.2 使用FilenameFilter
接口 660
22.2.3 listFiles()方法 661
22.2.4 创建目录 662
22.3 AutoCloseable、Closeable和
Flushable接口 662
22.4 I/O异常 662
22.5 关闭流的两种方式 663
22.6 流类 664
22.7 字节流 664
22.7.1 InputStream类 664
22.7.2 OutputStream类 665
22.7.3 FileInputStream类 666
22.7.4 FileOutputStream类 668
22.7.5 ByteArrayInputStream类 670
22.7.6 ByteArrayOutputStream
类 672
22.7.7 过滤的字节流 673
22.7.8 缓冲的字节流 673
22.7.9 SequenceInputStream类 677
22.7.10 PrintStream类 679
22.7.11 DataOutputStream类
和DataInputStream类 681
22.7.12 RandomAccessFile类 683
22.8 字符流 683
22.8.1 Reader类 684
22.8.2 Writer类 684
22.8.3 FileReader类 685
22.8.4 FileWriter类 686
22.8.5 CharArrayReader类 687
22.8.6 CharArrayWriter类 688
22.8.7 BufferedReader类 689
22.8.8 BufferedWriter类 691
22.8.9 PushbackReader类 691
22.8.10 PrintWriter类 692
22.9 Console类 693
22.10 串行化 695
22.10.1 Serializable接口 695
22.10.2 Externalizable接口 695
22.10.3 ObjectOutput接口 696
22.10.4 ObjectOutputStream类 696
22.10.5 ObjectInput接口 697
22.10.6 ObjectInputStream类 698
22.10.7 串行化示例 699
22.11 流的优点 702
第23章 探究NIO 703
23.1 NIO类 703
23.2 NIO的基础知识 704
23.2.1 缓冲区 704
23.2.2 通道 706
23.2.3 字符集和选择器 707
23.3 NIO.2对NIO的增强 708
23.3.1 Path接口 708
23.3.2 Files类 709
23.3.3 Paths类 712
23.3.4 文件属性接口 712
23.3.5 FileSystem、FileSystems和
FileStore类 714
23.4 使用NIO系统 714
23.4.1 为基于通道的I/O
使用NIO 715
23.4.2 为基于流的I/O
使用NIO 723
23.4.3 为路径和文件系统操作
使用NIO 725
第24章 联网 734
24.1 联网的基础知识 734
24.2 java.net联网类和接口 735
24.3 InetAddress类 736
24.3.1 工厂方法 736
24.3.2 实例方法 737
24.4 Inet4Address类和
Inet6Address类 738
24.5 TCP/IP客户端套接字 738
24.6 URL类 741
24.7 URLConnection类 742
24.8 HttpURLConnection类 745
24.9 URI类 746
24.10 cookie 746
24.11 TCP/IP服务器套接字 747
24.12 数据报 747
24.12.1 DatagramSocket类 748
24.12.2 DatagramPacket类 748
24.12.3 数据报示例 749
24.13 java.net.http包 751
24.13.1 三个关键元素 751
24.13.2 一个简单的HTTP Client
示例 754
24.13.3 有关java.net.http的
进一步探讨 755
第25章 事件处理 756
25.1 两种事件处理机制 756
25.2 委托事件模型 757
25.2.1 事件 757
25.2.2 事件源 757
25.2.3 事件监听器 758
25.3 事件类 758
25.3.1 ActionEvent类 759
25.3.2 AdjustmentEvent类 760
25.3.3 ComponentEvent类 761
25.3.4 ContainerEvent类 761
25.3.5 FocusEvent类 762
25.3.6 InputEvent类 763
25.3.7 ItemEvent类 764
25.4 KeyEvent类 764
25.4.1 MouseEvent类 765
25.4.2 MouseWheelEvent类 766
25.4.3 TextEvent类 767
25.4.4 WindowEvent类 767
25.5 事件源 768
25.6 事件监听器接口 769
25.6.1 ActionListener接口 770
25.6.2 AdjustmentListener
接口 770
25.6.3 ComponentListener
接口 770
25.6.4 ContainerListener接口 770
25.6.5 FocusListener接口 770
25.6.6 ItemListener接口 770
25.6.7 KeyListener接口 771
25.6.8 MouseListener接口 771
25.6.9 MouseMotionListener
接口 771
25.6.10 MouseWheelListener
接口 771
25.6.11 TextListener接口 771
25.6.12 WindowFocusListener
接口 772
25.6.13 WindowListener接口 772
25.7 使用委托事件模型 772
25.7.1 一些重要的AWT GUI
概念 772
25.7.2 处理鼠标事件 773
25.7.3 处理键盘事件 776
25.8 适配器类 780
25.9 内部类 782
第26章 AWT介绍:使用窗口、
图形和文本 786
26.1 AWT类 787
26.2 窗口基本元素 788
26.2.1 Component类 789
26.2.2 Container类 789
26.2.3 Panel类 789
26.2.4 Window类 789
26.2.5 Frame类 789
26.2.6 Canvas类 790
26.3 使用框架窗口 790
26.3.1 设置窗口的尺寸 790
26.3.2 隐藏和显示窗口 790
26.3.3 设置窗口的标题 791
26.3.4 关闭框架窗口 791
26.3.5 paint()方法 791
26.3.6 显示字符串 791
26.3.7 设置前景色和背景色 792
26.3.8 请求重画 792
26.3.9 创建基于框架的应用
程序 793
26.4 使用图形 794
26.4.1 绘制直线 794
26.4.2 绘制矩形 794
26.4.3 绘制椭圆和圆 795
26.4.4 绘制弧形 795
26.4.5 绘制多边形 795
26.4.6 演示绘制方法 795
26.4.7 改变图形的大小 797
26.5 使用颜色 798
26.5.1 Color类的方法 799
26.5.2 设置当前图形的颜色 800
26.5.3 一个演示颜色的程序 800
26.6 设置绘图模式 801
26.7 使用字体 803
26.7.1 确定可用字体 804
26.7.2 创建和选择字体 805
26.7.3 获取字体信息 807
26.8 使用FontMetrics管理文本
输出 808
第27章 使用AWT控件、布局
管理器和菜单 812
27.1 AWT控件的基础知识 812
27.1.1 添加和移除控件 813
27.1.2 响应控件 813
27.1.3 HeadlessException异常 813
27.2 使用标签 813
27.3 使用命令按钮 815
27.4 使用复选框 819
27.5 使用复选框组 822
27.6 使用下拉列表 823
27.7 使用列表框 826
27.8 管理滚动条 829
27.9 使用TextField 832
27.10 使用TextArea 834
27.11 理解布局管理器 836
27.11.1 FlowLayout布局
管理器 837
27.11.2 BorderLayout布局
管理器 838
27.11.3 使用Insets 839
27.11.4 GridLayout布局
管理器 841
27.11.5 CardLayout布局
管理器 842
27.11.6 GridBagLayout布局
管理器 845
27.12 菜单栏和菜单 850
27.13 对话框 854
27.14 关于重写paint()方法 859
第28章 图像 860
28.1 文件格式 860
28.2 图像基础知识:创建、
加载与显示 861
28.2.1 创建Image对象 861
28.2.2 加载图像 861
28.2.3 显示图像 862
28.3 双缓冲 863
28.4 ImageProducer接口 866
28.5 ImageConsumer接口 867
28.6 ImageFilter类 870
28.6.1 CropImageFilter类 870
28.6.2 RGBImageFilter类 872
28.7 其他图像类 883
第29章 并发实用工具 884
29.1 并发API包 885
29.1.1 java.util.concurrent包 885
29.1.2 java.util.concurrent.
atomic包 886
29.1.3 java.util.concurrent.
locks包 886
29.2 使用同步对象 886
29.2.1 Semaphore类 886
29.2.2 CountDownLatch类 892
29.2.3 CyclicBarrier类 893
29.2.4 Exchanger类 896
29.2.5 Phaser类 898
29.3 使用执行器 905
29.3.1 一个简单的执行器示例 906
29.3.2 使用Callable和Future
接口 908
29.4 TimeUnit枚举 910
29.5 并发集合 911
29.6 锁 912
29.7 原子操作 915
29.8 通过Fork/Join框架进行
并行编程 916
29.8.1 主要的Fork/Join类 916
29.8.2 分而治之的策略 919
29.8.3 一个简单的Fork/Join
示例 920
29.8.4 理解并行级别带来的
影响 922
29.8.5 一个使用
RecursiveTask的
例子 925
29.8.6 异步执行任务 928
29.8.7 取消任务 928
29.8.8 确定任务的完成状态 928
29.8.9 重新启动任务 929
29.8.10 深入研究 929
29.8.11 关于Fork/Join框架的
一些提示 930
29.9 并发实用工具与Java传统
方式的比较 931
第30章 流API 932
30.1 流的基础知识 932
30.1.1 流接口 933
30.1.2 如何获得流 935
30.1.3 一个简单的流示例 935
30.2 缩减操作 938
30.3 使用并行流 941
30.4 映射 943
30.5 收集 947
30.6 迭代器和流 950
30.6.1 对流使用迭代器 950
30.6.2 使用Spliterator 951
30.7 流API中更多值得探究的
地方 954
第31章 正则表达式和其他包 955
31.1 正则表达式处理 955
31.1.1 Pattern类 955
31.1.2 Matcher类 956
31.1.3 正则表达式的语法 957
31.1.4 演示模式匹配 957
31.1.5 模式匹配的两个选项 962
31.1.6 探究正则表达式 963
31.2 反射 963
31.3 远程方法调用 967
31.4 使用java.text格式化日期和
时间 970
31.4.1 DateFormat类 970
31.4.2 SimpleDateFormat类 972
31.5 java.time的时间和日期API 974
31.5.1 时间和日期的基础知识 974
31.5.2 格式化日期和时间 975
31.5.3 解析日期和时间字符串 978
31.5.4 探究java.time包的其他
方面 979 第 III 部分 使用Swing进行GUI编程
第 32 章 Swing简介 983
32.1 Swing的起源 983
32.2 Swing的构建以AWT为
基础 984
32.3 两个关键的Swing特性 984
32.3.1 Swing组件是轻量级的 984
32.3.2 Swing支持可插入外观 984
32.4 MVC连接 985
32.5 组件与容器 985
32.5.1 组件 986
32.5.2 容器 986
32.5.3 容器窗格 987
32.6 Swing包 987
32.7 一个简单的Swing应用程序 987
32.8 事件处理 991
32.9 在Swing中绘图 994
32.9.1 绘图的基础知识 994
32.9.2 计算可绘制区域 995
32.9.3 一个绘图示例 996
第33章 探索Swing 999
33.1 JLabel与ImageIcon 999
33.2 JTextField 1001
33.3 Swing按钮 1003
33.3.1 JButton 1003
33.3.2 JToggleButton 1005
33.3.3 复选框 1007
33.3.4 单选按钮 1009
33.4 JTabbedPane 1011
33.5 JScrollPane 1014
33.6 JList 1015
33.7 JComboBox 1018
33.8 树 1020
33.9 JTable 1024
第34章 Swing菜单简介 1027
34.1 菜单的基础知识 1027
34.2 JMenuBar、JMenu和
JMenuItem概述 1028
34.2.1 JMenuBar 1029
34.2.2 JMenu 1029
34.2.3 JMenuItem 1030
34.3 创建主菜单 1031
34.4 向菜单项添加助记符和
加速键 1035
34.5 向菜单项添加图片和
工具提示 1037
34.6 使用JRadioButtonMenuItem和
JCheckBoxMenuItem 1038
34.7 创建弹出菜单 1040
34.8 创建工具栏 1043
34.9 使用动作 1045
34.10 完整演示MenuDemo
程序 1050
34.11 继续探究Swing 1057
第 IV 部分 应用Java
第35章 Java Bean 1061
35.1 Java Bean是什么 1061
35.2 Java Bean的优势 1062
35.3 内省 1062
35.3.1 属性的设计模式 1062
35.3.2 事件的设计模式 1063
35.3.3 方法与设计模式 1064
35.3.4 使用BeanInfo接口 1064
35.4 绑定属性与约束属性 1065
35.5 持久性 1065
35.6 定制器 1065
35.7 Java Bean API 1065
35.7.1 Introspector类 1067
35.7.2 PropertyDescriptor类 1067
35.7.3 EventSetDescriptor类 1067
35.7.4 MethodDescriptor类 1067
35.8 一个Bean示例 1068
第36章 servlet 1071
36.1 背景 1071
36.2 servlet的生命周期 1072
36.3 servlet开发选项 1072
36.4 使用Tomcat 1073
36.5 一个简单的servlet 1074
36.5.1 创建和编译servlet
源代码 1074
36.5.2 启动Tomcat 1075
36.5.3 启动Web浏览器并
请求servlet 1075
36.6 Servlet API 1075
36.7 jakarta.servlet包 1076
36.7.1 Servlet接口 1076
36.7.2 ServletConfig接口 1077
36.7.3 ServletContext接口 1077
36.7.4 ServletRequest接口 1078
36.7.5 ServletResponse接口 1078
36.7.6 GenericServlet类 1079
36.7.7 ServletInputStream类 1079
36.7.8 ServletOutputStream类 1079
36.7.9 servlet异常类 1079
36.8 读取servlet参数 1079
36.9 jakarta.servlet.http包 1081
36.9.1 HttpServletRequest
接口 1081
36.9.2 HttpServletResponse
接口 1082
36.9.3 HttpSession接口 1083
36.9.4 Cookie类 1084
36.9.5 HttpServlet类 1085
36.10 处理HTTP请求和响应 1086
36.10.1 处理HTTP GET
请求 1086
36.10.2 处理HTTP POST
请求 1087
36.11 使用cookie 1088
36.12 会话跟踪 1091
第 V 部分 附录
附录A 使用Java的文档注释 1095
附录B JShell简介 1103
附录C 在一个步骤中编译和运行
简单的单文件程序 1112
猜您喜欢