《Java9编程参考官方大全 第10版》PDF下载

  • 购买积分:24 如何计算积分?
  • 作  者:美郝伯特希尔德特HerbertSchildt
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2018
  • ISBN:9787302506065
  • 页数:920 页
图书介绍:本书针对Java SE 9做了全面更新,讲述如何开发、编译、调试和运行Java程序。这本精品书籍由编程畅销书作家Herb Schildt撰写,全面系统地讲解Java语言,包括其语法、关键字和基本编程原理;还包括有关Java API库的关键信息,如I/O、集合框架、流库和并发工具。本书详细分析Java SE 9新引入的“模块”系统,通过Swing、JavaFX、JavaBeans和Servlet示例演示Java操作,还介绍了Java新的交互编程工具JShell。

第Ⅰ部分 Java语言 3

第1章 Java的历史和演变 3

1.1 Java的家世 3

1.1.1 现代编程语言的诞生:C语言 3

1.1.2 C++:下一个阶段 4

1.1.3 Java出现的时机已经成熟 4

1.2 Java的诞生 5

1.3 Java改变Internet的方式 6

1.3.1 Java applet 6

1.3.2 安全性 6

1.3.3 可移植性 6

1.4 Java的魔力:字节码 7

1.5 不再推荐使用applet 7

1.6 servlet:服务器端的Java 8

1.7 Java的关键特性 8

1.7.1 简单性 8

1.7.2 面向对象 8

1.7.3 健壮性 8

1.7.4 多线程 9

1.7.5 体系结构中立 9

1.7.6 解释执行和高性能 9

1.7.7 分布式 9

1.7.8 动态性 9

1.8 Java的演变历程 9

1.9 Java SE 9 11

1.10 文化革新 12

第2章 Java综述 13

2.1 面向对象编程 13

2.1.1 两种范式 13

2.1.2 抽象 13

2.1.3 OOP三原则 14

2.2 第一个简单程序 16

2.2.1 输入程序 17

2.2.2 编译程序 17

2.2.3 深入分析第一个示例程序 17

2.3 第二个简短程序 19

2.4 两种控制语句 20

2.4.1 if语句 20

2.4.2 for循环 21

2.5 使用代码块 22

2.6 词汇问题 23

2.6.1 空白符 23

2.6.2 标识符 23

2.6.3 字面值 23

2.6.4 注释 23

2.6.5 分隔符 23

2.6.6 Java关键字 24

2.7 Java类库 24

第3章 数据类型、变量和数组 25

3.1 Java是强类型化的语言 25

3.2 基本类型 25

3.3 整型 25

3.3.1 byte 26

3.3.2 short 26

3.3.3 int 26

3.3.4 long 26

3.4 浮点型 27

3.4.1 float 27

3.4.2 double 27

3.5 字符型 27

3.6 布尔型 29

3.7 深入分析字面值 29

3.7.1 整型字面值 29

3.7.2 浮点型字面值 30

3.7.3 布尔型字面值 30

3.7.4 字符型字面值 31

3.7.5 字符串字面值 31

3.8 变量 31

3.8.1 变量的声明 31

3.8.2 动态初始化 32

3.8.3 变量的作用域和生存期 32

3.9 类型转换和强制类型转换 34

3.9.1 Java的自动类型转换 34

3.9.2 强制转换不兼容的类型 34

3.10 表达式中的自动类型提升 35

3.11 数组 36

3.11.1 一维数组 36

3.11.2 多维数组 38

3.11.3 另一种数组声明语法 41

3.12 关于字符串的一些说明 41

第4章 运算符 43

4.1 算术运算符 43

4.1.1 基本算术运算符 43

4.1.2 求模运算符 44

4.1.3 算术与赋值复合运算符 44

4.1.4 自增与自减运算符 45

4.2 位运算符 46

4.2.1 位逻辑运算符 47

4.2.2 左移 49

4.2.3 右移 50

4.2.4 无符号右移 51

4.2.5 位运算符与赋值的组合 52

4.3 关系运算符 52

4.4 布尔逻辑运算符 53

4.5 赋值运算符 54

4.6 “?”运算符 55

4.7 运算符的优先级 55

4.8 使用圆括号 56

第5章 控制语句 57

5.1 Java的选择语句 57

5.1.1 if语句 57

5.1.2 switch语句 59

5.2 迭代语句 62

5.2.1 while语句 63

5.2.2 do-while语句 64

5.2.3 for语句 66

5.2.4 for循环的for-each版本 68

5.2.5 嵌套的循环 72

5.3 跳转语句 72

5.3.1 使用break语句 72

5.3.2 使用continue语句 75

5.3.3 return语句 76

第6章 类 77

6.1 类的基础知识 77

6.1.1 类的一般形式 77

6.1.2 一个简单的类 78

6.2 声明对象 79

6.3 为对象引用变量赋值 80

6.4 方法 81

6.4.1 为Box类添加方法 81

6.4.2 返回值 83

6.4.3 添加带参数的方法 84

6.5 构造函数 85

6.6 this关键字 87

6.7 垃圾回收 88

6.8 堆栈类 88

第7章 方法和类的深入分析 91

7.1 重载方法 91

7.2 将对象用作参数 94

7.3 实参传递的深入分析 96

7.4 返回对象 97

7.5 递归 98

7.6 访问控制 100

7.7 理解static 102

7.8 final介绍 104

7.9 重新审视数组 104

7.10 嵌套类和内部类 105

7.11 String类介绍 107

7.12 使用命令行参数 109

7.13 varargs:可变长度实参 110

7.13.1 重载varargs方法 112

7.13.2 varargs方法与模糊性 113

第8章 继承 115

8.1 继承的基础知识 115

8.1.1 成员访问与继承 116

8.1.2 一个更实际的例子 117

8.1.3 超类变量可以引用子类对象 118

8.2 使用super关键字 119

8.2.1 使用super调用超类的构造函数 119

8.2.2 super的另一种用法 122

8.3 创建多级继承层次 123

8.4 构造函数的执行时机 125

8.5 方法重写 126

8.6 动态方法调度 128

8.6.1 重写方法的目的 129

8.6.2 应用方法重写 129

8.7 使用抽象类 130

8.8 在继承中使用final关键字 132

8.8.1 使用final关键字阻止重写 132

8.8.2 使用final关键字阻止继承 133

8.9 Object类 133

第9章 包和接口 135

9.1 包 135

9.1.1 定义包 135

9.1.2 包查找与CLASSPATH 136

9.1.3 一个简短的包示例 136

9.2 包和成员访问 137

9.3 导入包 140

9.4 接口 141

9.4.1 定义接口 141

9.4.2 实现接口 142

9.4.3 嵌套接口 144

9.4.4 应用接口 144

9.4.5 接口中的变量 147

9.4.6 接口可以扩展 148

9.5 默认接口方法 149

9.5.1 默认方法的基础知识 149

9.5.2 一个更加实用的例子 151

9.5.3 多级继承的问题 151

9.6 在接口中使用静态方法 152

9.7 私有接口方法 152

9.8 关于包和接口的最后说明 153

第10章 异常处理 155

10.1 异常处理的基础知识 155

10.2 异常类型 155

10.3 未捕获的异常 156

10.4 使用try和catch 157

10.5 多条catch子句 158

10.6 嵌套的try语句 159

10.7 throw 161

10.8 throws 162

10.9 finally 162

10.10 Java的内置异常 164

10.11 创建自己的异常子类 165

10.12 链式异常 166

10.13 其他三个异常特性 167

10.14 使用异常 168

第11章 多线程编程 169

11.1 Java线程模型 169

11.1.1 线程优先级 170

11.1.2 同步 170

11.1.3 消息传递 171

11.1.4 Thread类和Runnable接口 171

11.2 主线程 171

11.3 创建线程 172

11.3.1 实现Runnable接口 172

11.3.2 扩展Thread类 174

11.3.3 选择一种创建方式 175

11.4 创建多个线程 175

11.5 使用isAlive()和join()方法 176

11.6 线程优先级 178

11.7 同步 179

11.7.1 使用同步方法 179

11.7.2 synchronized语句 180

11.8 线程间通信 182

11.9 挂起、恢复与停止线程 187

11.10 获取线程的状态 189

11.11 使用工厂方法创建和启动线程 189

11.12 使用多线程 190

第12章 枚举、自动装箱与注解 191

12.1 枚举 191

12.1.1 枚举的基础知识 191

12.1.2 values()和valueOf()方法 193

12.1.3 Java枚举是类类型 194

12.1.4 枚举继承自Enum类 195

12.1.5 另一个枚举示例 196

12.2 类型封装器 198

12.2.1 Character封装器 198

12.2.2 Boolean封装器 198

12.2.3 数值类型封装器 198

12.3 自动装箱 199

12.3.1 自动装箱与方法 200

12.3.2 表达式中发生的自动装箱/拆箱 201

12.3.3 布尔型和字符型数值的自动装箱/拆箱 202

12.3.4 自动装箱/拆箱有助于防止错误 202

12.3.5 一些警告 203

12.4 注解 203

12.4.1 注解的基础知识 203

12.4.2 指定保留策略 204

12.4.3 在运行时使用反射获取注解 204

12.4.4 AnnotatedElement接口 208

12.4.5 使用默认值 208

12.4.6 标记注解 209

12.4.7 单成员注解 210

12.4.8 内置注解 211

12.5 类型注解 213

12.6 重复注解 216

第13章 I/O、带资源的try语句以及其他主题 219

13.1 I/O的基础知识 219

13.1.1 流 219

13.1.2 字节流和字符流 219

13.1.3 预定义流 221

13.2 读取控制台输入 221

13.2.1 读取字符 222

13.2.2 读取字符串 222

13.3 向控制台写输出 223

13.4 PrintWriter类 224

13.5 读/写文件 225

13.6 自动关闭文件 229

13.7 transient和volatile修饰符 231

13.8 使用instanceof运算符 232

13.9 strictfp 233

13.10 本地方法 234

13.11 使用assert 234

13.12 静态导入 236

13.13 通过this()调用重载的构造函数 238

13.14 紧凑API配置文件 239

第14章 泛型 241

14.1 什么是泛型 241

14.2 一个简单的泛型示例 241

14.2.1 泛型只使用引用类型 244

14.2.2 基于不同类型参数的泛型类型是不同的 244

14.2.3 泛型提升类型安全性的原理 244

14.3 带两个类型参数的泛型类 246

14.4 泛型类的一般形式 247

14.5 有界类型 247

14.6 使用通配符参数 249

14.7 创建泛型方法 255

14.8 泛型接口 257

14.9 原始类型与遗留代码 259

14.10 泛型类层次 260

14.10.1 使用泛型超类 260

14.10.2 泛型子类 262

14.10.3 泛型层次中的运行时类型比较 263

14.10.4 强制转换 265

14.10.5 重写泛型类的方法 265

14.11 泛型的类型推断 266

14.12 擦除 267

14.13 模糊性错误 268

14.14 使用泛型的一些限制 269

14.14.1 不能实例化类型参数 269

14.14.2 对静态成员的一些限制 269

14.14.3 对泛型数组的一些限制 270

14.14.4 对泛型异常的限制 271

第15章 lambda表达式 273

15.1 lambda表达式简介 273

15.1.1 lambda表达式的基础知识 273

15.1.2 函数式接口 274

15.1.3 几个lambda表达式示例 275

15.2 块lambda表达式 277

15.3 泛型函数式接口 278

15.4 作为参数传递lambda表达式 280

15.5 lambda表达式与异常 282

15.6 lambda表达式和变量捕获 282

15.7 方法引用 283

15.7.1 静态方法的方法引用 283

15.7.2 实例方法的方法引用 284

15.7.3 泛型中的方法引用 287

15.8 构造函数引用 289

15.9 预定义的函数式接口 293

第16章 模块 295

16.1 模块基础知识 295

16.1.1 简单的模块示例 295

16.1.2 编译、运行第一个模块示例 298

16.1.3 requires和exports 299

16.2 java.base和平台模块 299

16.3 旧代码和未命名的模块 300

16.4 导出到特定的模块 300

16.5 使用requires transitive 301

16.6 使用服务 304

16.6.1 服务和服务提供程序的基础知识 304

16.6.2 基于服务的关键字 305

16.6.3 基于模块的服务示例 305

16.7 模块图 310

16.8 三个特殊的模块特性 310

16.8.1 open模块 310

16.8.2 opens语句 310

16.8.3 requires static 311

16.9 jlink工具和模块JAR文件介绍 311

16.9.1 链接exploded directory中的文件 311

16.9.2 链接模块化的JAR文件 311

16.9.3 JMOD文件 312

16.10 层与自动模块简述 312

16.11 小结 312

第Ⅱ部分 Java库 315

第17章 字符串处理 315

17.1 String类的构造函数 315

17.2 字符串的长度 317

17.3 特殊的字符串操作 317

17.3.1 字符串字面值 317

17.3.2 字符串连接 317

17.3.3 字符串和其他数据类型的连接 318

17.3.4 字符串转换和toString()方法 318

17.4 提取字符 319

17.4.1 charAt() 319

17.4.2 getChars() 319

17.4.3 getBytes() 320

17.4.4 toCharArray() 320

17.5 比较字符串 320

17.5.1 equals()和equalsIgnoreCase() 320

17.5.2 regionMatches() 321

17.5.3 startsWith()和endsWith() 321

17.5.4 equals()与= 321

17.5.5 compareTo() 322

17.6 查找字符串 323

17.7 修改字符串 324

17.7.1 substring() 324

17.7.2 concat() 325

17.7.3 replace() 325

17.7.4 trim() 325

17.8 使用valueOf()转换数据 326

17.9 改变字符串中字符的大小写 326

17.10 连接字符串 327

17.11 其他String方法 327

17.12 StringBuffer类 328

17.12.1 SuingBuffer类的构造函数 328

17.12.2 length()与capacity() 329

17.12.3 ensureCapacity() 329

17.12.4 setLength() 329

17.12.5 charAt()与setCharAt() 329

17.12.6 getChars() 330

17.12.7 append() 330

17.12.8 insert() 330

17.12.9 reverse() 331

17.12.10 delete()与deleteCharAt() 331

17.12.11 replace() 332

17.12.12 substring() 332

17.12.13 其他StringBuffer方法 332

17.13 StringBuilder类 333

第18章 探究java.lang 335

18.1 基本类型封装器 335

18.1.1 Number 336

18.1.2 Double与Float 336

18.1.3 理解isInfinite()与isNaN() 338

18.1.4 Byte、Short、Integer和Long 339

18.1.5 Character 346

18.1.6 对Unicode代码点的附加支持 348

18.1.7 Boolean 349

18.2 Void类 349

18.3 Process类 349

18.4 Runtime类 350

18.4.1 内存管理 351

18.4.2 执行其他程序 352

18.5 Runtime.Version 353

18.6 ProcessBuilder类 353

18.7 System类 355

18.7.1 使用currentTimeMillis()计时程序的执行 356

18.7.2 使用arraycopy()方法 357

18.7.3 环境属性 357

18.8 System.Logger和System.LoggerFinder 358

18.9 Object类 358

18.10 使用clone()方法和Cloneable接口 358

18.11 Class类 360

18.12 ClassLoader类 362

18.13 Math类 362

18.13.1 三角函数 362

18.13.2 指数函数 363

18.13.3 舍入函数 363

18.13.4 其他数学方法 364

18.14 StrictMath类 365

18.15 Compiler类 365

18.16 Thread类、ThreadGroup类和Runnable接口 366

18.16.1 Runnable接口 366

18.16.2 Thread类 366

18.16.3 ThreadGroup类 368

18.17 ThreadLocal和InheritableThreadLocal类 371

18.18 Package类 371

18.19 Module类 372

18.20 ModuleLayer类 372

18.21 RuntimePermission类 372

18.22 Throwable类 373

18.23 SecurityManager类 373

18.24 StackTraceElement类 373

18.25 StackWalker类和StackWalker.StackFrame接口 373

18.26 Enum类 373

18.27 ClassValue类 374

18.28 CharSequence接口 374

18.29 Comparable接口 374

18.30 Appendable接口 375

18.31 Iterable接口 375

18.32 Readable接口 375

18.33 AutoCloseable接口 375

18.34 Thread.UncaughtExceptionHandler接口 376

18.35 java.lang子包 376

18.35.1 java.lang.annotation 376

18.35.2 java.lang.instrument 376

18.35.3 java.lang.invoke 376

18.35.4 java.lang.module 376

18.35.5 java.lang.management 376

18.35.6 java.lang.ref 376

18.35.7 java.lang.reflect 377

第19章 java.util第1部分:集合框架 379

19.1 集合概述 380

19.2 集合接口 380

19.2.1 Collection接口 381

19.2.2 List接口 382

19.2.3 Set接口 384

19.2.4 SortedSet接口 384

19.2.5 NavigableSet接口 385

19.2.6 Queue接口 385

19.2.7 Deque接口 386

19.3 集合类 387

19.3.1 ArrayList类 388

19.3.2 LinkedList类 390

19.3.3 HashSet类 391

19.3.4 LinkedHashSet类 392

19.3.5 TreeSet类 392

19.3.6 PriorityQueue类 393

19.3.7 ArrayDeque类 394

19.3.8 Enumset类 395

19.4 通过迭代器访问集合 395

19.4.1 使用迭代器 396

19.4.2 使用for-each循环替代迭代器 398

19.5 Spliterator 398

19.6 在集合中存储用户定义的类 400

19.7 RandomAccess接口 401

19.8 使用映射 401

19.8.1 映射接口 402

19.8.2 映射类 406

19.9 比较器 409

19.10 集合算法 415

19.11 Arrays类 420

19.12 遗留的类和接口 423

19.12.1 Enumeration接口 424

19.12.2 Vector类 424

19.12.3 Stack类 427

19.12.4 Dictionary类 428

19.12.5 Hashtable类 429

19.12.6 Properties类 431

19.12.7 使用store()和load()方法 434

19.13 集合小结 435

第20章 java.util第2部分:更多实用工具类 437

20.1 StringTokenizer类 437

20.2 BitSet类 438

20.3 Optional、OptionalDouble、OptionalInt和OptionalLong 440

20.4 Date类 442

20.5 Calendar类 443

20.6 GregorianCalendar类 445

20.7 TimeZone类 446

20.8 SimpleTimeZone类 447

20.9 Locale类 448

20.10 Random类 449

20.11 Timer和TimerTask类 450

20.12 Currency类 452

20.13 Formatter类 453

20.13.1 Formatter类的构造函数 453

20.13.2 Formatter类的方法 453

20.13.3 格式化的基础知识 454

20.13.4 格式化字符串和字符 455

20.13.5 格式化数字 455

20.13.6 格式化时间和日期 456

20.13.7 %n和%%说明符 458

20.13.8 指定最小字段宽度 458

20.13.9 指定精度 459

20.13.10 使用格式标志 460

20.13.11 对齐输出 460

20.13.12 空格、“+”、“0”以及“(”标志 461

20.13.13 逗号标志 462

20.13.14 “#”标志 462

20.13.15 大写选项 462

20.13.16 使用参数索引 462

20.13.17 关闭Formatter对象 463

20.13.18 printf()方法 464

20.14 Scanner类 464

20.14.1 Scanner类的构造函数 464

20.14.2 扫描的基础知识 465

20.14.3 一些Scanner示例 467

20.14.4 设置定界符 470

20.14.5 其他Scanner特性 471

20.15 ResourceBundle、ListResourceBundle和PropertyResourceBundle类 472

20.16 其他实用工具类和接口 475

20.17 java.util子包 475

20.17.1 java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks 476

20.17.2 java.util.function 476

20.17.3 java.util.jar 478

20.17.4 java.util.logging 478

20.17.5 java.util.prefs 478

20.17.6 java.util.regex 478

20.17.7 java.util.spi 478

20.17.8 java.util.stream 478

20.17.9 java.util.zip 478

第21章 输入/输出:探究java.io 479

21.1 I/O类和接口 479

21.2 File类 480

21.2.1 目录 482

21.2.2 使用FilenameFilter接口 483

21.2.3 listFiles()方法 483

21.2.4 创建目录 484

21.3 AutoCloseable、Closeable和Flushable接口 484

21.4 I/O异常 484

21.5 关闭流的两种方式 484

21.6 流类 485

21.7 字节流 486

21.7.1 InputStream类 486

21.7.2 OutputStream类 486

21.7.3 FileInputStream类 487

21.7.4 FileOutputStream类 488

21.7.5 ByteArrayInputStream类 490

21.7.6 ByteArrayOutputStream类 491

21.7.7 过滤的字节流 492

21.7.8 缓冲的字节流 492

21.7.9 SequenceInputStream类 495

21.7.10 PrintStream类 496

21.7.11 DataOutputStream和DataInputStream类 498

21.7.12 RandomAccessFile类 499

21.8 字符流 500

21.8.1 Reader类 500

21.8.2 Writer类 501

21.8.3 FileReader类 501

21.8.4 FileWriter类 502

21.8.5 CharArrayReader类 503

21.8.6 CharArrayWriter类 504

21.8.7 BufferedReader类 505

21.8.8 BufferedWriter类 506

21.8.9 PushbackReader类 506

21.8.10 PrintWriter类 507

21.9 Console类 508

21.10 串行化 509

21.10.1 Serializable接口 509

21.10.2 Externalizable接口 509

21.10.3 ObjectOutput接口 509

21.10.4 ObjectOutputStream类 510

21.10.5 ObjectInput接口 510

21.10.6 ObjectInputStream类 511

21.10.7 串行化示例 512

21.11 流的优点 513

第22章 探究NIO 515

22.1 NIO类 515

22.2 NIO的基础知识 515

22.2.1 缓冲区 515

22.2.2 通道 517

22.2.3 字符集和选择器 518

22.3 NIO.2对NIO的增强 518

22.3.1 Path接口 518

22.3.2 Files类 519

22.3.3 Path接口 521

22.3.4 文件属性接口 521

22.3.5 FileSystem、FileSystems和FileStore类 522

22.4 使用NIO系统 522

22.4.1 为基于通道的I/O使用NIO 523

22.4.2 为基于流的I/O使用NIO 529

22.4.3 为路径和文件系统操作使用NIO 531

第23章 联网 539

23.1 联网的基础知识 539

23.2 联网类和接口 540

23.3 InetAddress类 540

23.3.1 工厂方法 540

23.3.2 实例方法 541

23.4 Inet4Address类和Inet6Address类 541

23.5 TCP/IP客户端套接字 542

23.6 URL类 544

23.7 URLConnection类 545

23.8 HttpURLConnection类 547

23.9 URI类 549

23.10 cookie 549

23.11 TCP/IP服务器套接字 549

23.12 数据报 549

23.12.1 DatagramSocket类 550

23.12.2 DatagramPacket类 550

23.12.3 数据报示例 551

第24章 事件处理 553

24.1 两种事件处理机制 553

24.2 委托事件模型 553

24.2.1 事件 554

24.2.2 事件源 554

24.2.3 事件监听器 554

24.3 事件类 554

24.3.1 ActionEvent类 555

24.3.2 AdjustmentEvent类 556

24.3.3 ComponentEvent类 556

24.3.4 ContainerEvent类 557

24.3.5 FocusEvent类 557

24.3.6 InputEvent类 558

24.3.7 ItemEvent类 558

24.4 KeyEvent类 559

24.4.1 MouseEvent类 559

24.4.2 MouseWheelEvent类 560

24.4.3 TextEvent类 561

24.4.4 WindowEvent类 561

24.5 事件源 562

24.6 事件监听器接口 562

24.6.1 ActionListener接口 563

24.6.2 AdjustmentListener接口 563

24.6.3 ComponentListener接口 563

24.6.4 ContainerListener接口 563

24.6.5 FocusListener接口 563

24.6.6 ItemListener接口 563

24.6.7 KeyListener接口 564

24.6.8 MouseListener接口 564

24.6.9 MouseMotionListener接口 564

24.6.10 MouseWheelListener接口 564

24.6.11 TextListener接口 564

24.6.12 WindowFocusListener接口 564

24.6.13 WindowListener接口 564

24.7 使用委托事件模型 565

24.7.1 一些重要的GUI概念 565

24.7.2 处理鼠标事件 565

24.7.3 处理键盘事件 568

24.8 适配器类 571

24.9 内部类 572

第25章 AWT介绍:使用窗口、图形和文本 577

25.1 AWT类 577

25.2 窗口基本元素 579

25.2.1 Component类 579

25.2.2 Container类 579

25.2.3 Panel类 580

25.2.4 Window类 580

25.2.5 Frame类 580

25.2.6 Canvas类 580

25.3 使用框架窗口 580

25.3.1 设置窗口的尺寸 580

25.3.2 隐藏和显示窗口 580

25.3.3 设置窗口的标题 581

25.3.4 关闭框架窗口 581

25.3.5 paint()方法 581

25.3.6 显示字符串 581

25.3.7 设置前景色和背景色 581

25.3.8 请求重画 582

25.3.9 创建基于框架的应用程序 583

25.4 使用图形 583

25.4.1 绘制直线 583

25.4.2 绘制矩形 583

25.4.3 绘制椭圆和圆 584

25.4.4 绘制弧形 584

25.4.5 绘制多边形 584

25.4.6 演示绘制方法 584

25.4.7 改变图形的大小 586

25.5 使用颜色 587

25.5.1 Color类的方法 587

25.5.2 设置当前图形的颜色 588

25.5.3 一个演示颜色的applet 588

25.6 设置绘图模式 589

25.7 使用字体 590

25.7.1 确定可用字体 591

25.7.2 创建和选择字体 592

25.7.3 获取字体信息 594

25.8 使用FontMetrics管理文本输出 595

第26章 使用AWT控件、布局管理器和菜单 599

26.1 AWT控件的基础知识 599

26.1.1 添加和移除控件 599

26.1.2 响应控件 600

26.1.3 HeadlessException异常 600

26.2 使用标签 600

26.3 使用命令按钮 601

26.4 使用复选框 604

26.5 使用复选框组 606

26.6 使用下拉列表 607

26.7 使用列表框 609

26.8 管理滚动条 611

26.9 使用TextField 613

26.10 使用TextArea 615

26.11 理解布局管理器 617

26.11.1 FlowLayout布局管理器 617

26.11.2 BorderLayout布局管理器 618

26.11.3 使用Insets 619

26.11.4 GridLayout布局管理器 620

26.11.5 CardLayout布局管理器 621

26.11.6 GridBagLayout布局管理器 623

26.12 菜单栏和菜单 627

26.13 对话框 630

26.14 关于重写paint()方法 634

第27章 图像 635

27.1 文件格式 635

27.2 图像基础:创建、加载与显示 635

27.2.1 创建Image对象 635

27.2.2 加载图像 636

27.2.3 显示图像 636

27.3 双缓冲 637

27.4 ImageProducer接口 639

27.5 ImageConsumer接口 641

27.6 ImageFilter类 643

27.6.1 CropImageFilter类 643

27.6.2 RGBImageFilter类 645

27.7 其他图像类 653

第28章 并发实用工具 655

28.1 并发API包 655

28.1.1 java.util.concurrent包 655

28.1.2 java.util.concurrent.atomic包 656

28.1.3 java.util.concurrent.locks包 656

28.2 使用同步对象 657

28.2.1 Semaphore类 657

28.2.2 CountDownLatch类 661

28.2.3 CyclicBarrier类 662

28.2.4 Exchanger类 664

28.2.5 Phaser类 666

28.3 使用执行器 671

28.3.1 一个简单的执行器示例 672

28.3.2 使用Callable和Future接口 673

28.4 TimeUnit枚举 675

28.5 并发集合 676

28.6 锁 676

28.7 原子操作 678

28.8 通过Fork/Join框架进行并行编程 679

28.8.1 主要的Fork/Join类 680

28.8.2 分而治之的策略 682

28.8.3 一个简单的Fork/Join示例 682

28.8.4 理解并行级别带来的影响 684

28.8.5 一个使用RecursiveTask<V>的例子 686

28.8.6 异步执行任务 688

28.8.7 取消任务 688

28.8.8 确定任务的完成状态 689

28.8.9 重新启动任务 689

28.8.10 深入研究 689

28.8.11 关于Fork/Join框架的一些提示 690

28.9 并发实用工具与Java传统方式的比较 690

第29章 流API 691

29.1 流的基础知识 691

29.1.1 流接口 691

29.1.2 如何获得流 693

29.1.3 一个简单的流示例 693

29.2 缩减操作 696

29.3 使用并行流 697

29.4 映射 699

29.5 收集 702

29.6 迭代器和流 705

29.6.1 对流使用迭代器 705

29.6.2 使用Spliterator 706

29.7 流API中更多值得探究的地方 708

第30章 正则表达式和其他包 709

30.1 正则表达式处理 709

30.1.1 Pattern类 709

30.1.2 Matcher类 709

30.1.3 正则表达式的语法 710

30.1.4 演示模式匹配 710

30.1.5 模式匹配的两个选项 714

30.1.6 探究正则表达式 715

30.2 反射 715

30.3 远程方法调用 718

30.4 使用java.text格式化日期和时间 720

30.4.1 DateFormat类 720

30.4.2 SimpleDateFormat类 722

30.5 java.time的时间和日期API 723

30.5.1 时间和日期的基础知识 723

30.5.2 格式化日期和时间 724

30.5.3 解析日期和时间字符串 726

30.6 探究java.time包的其他方面 727

第Ⅲ部分 使用Swing进行GUI编程 731

第31章 Swing简介 731

31.1 Swing的起源 731

31.2 Swing以AWT为基础 731

31.3 两个关键的Swing特性 731

31.3.1 Swing组件是轻量级的 732

31.3.2 Swing支持可插入外观 732

31.4 MVC连接 732

31.5 组件与容器 733

31.5.1 组件 733

31.5.2 容器 733

31.5.3 顶级容器窗格 733

31.6 Swing包 734

31.7 一个简单的Swing应用程序 734

31.8 事件处理 737

31.9 在Swing中绘图 739

31.9.1 绘图的基础知识 739

31.9.2 计算可绘制区域 740

31.9.3 一个绘图示例 740

第32章 探索Swing 743

32.1 JLabel与ImageIcon 743

32.2 JTextField 744

32.3 Swing按钮 745

32.3.1 JButton 746

32.3.2 JToggleButton 748

32.3.3 复选框 749

32.3.4 单选按钮 750

32.4 JTabbedPane 752

32.5 JScrollPane 754

32.6 JList 756

32.7 JComboBox 758

32.8 树 760

32.9 JTable 762

第33章 Swing菜单简介 765

33.1 菜单的基础知识 765

33.2 JMenuBar、JMenu和JMenuItem概述 766

33.2.1 JMenuBar 766

33.2.2 JMenu 767

33.2.3 JMenuItem 767

33.3 创建主菜单 768

33.4 向菜单项添加助记符和加速键 771

33.5 向菜单项添加图片和工具提示 773

33.6 使用JRadioButtonMenuItem和JCheckBoxMenuItem 773

33.7 创建弹出菜单 775

33.8 创建工具栏 777

33.9 使用动作 778

33.10 完整演示MenuDemo程序 782

33.11 继续探究Swing 787

第Ⅳ部分 使用JavaFX进行GUI编程 791

第34章 JavaFXGUI编程简介 791

34.1 JavaFX的基础概念 791

34.1.1 JavaFX包 791

34.1.2 Stage和Scene类 792

34.1.3 节点和场景图 792

34.1.4 布局 792

34.1.5 Application类和生命周期方法 792

34.1.6 启动JavaFX应用程序 792

34.2 JavaFX应用程序的骨架 793

34.3 编译和运行JavaFX程序 795

34.4 应用程序线程 795

34.5 一个简单的JavaFX控件:Label 796

34.6 使用按钮和事件 797

34.6.1 事件的基础知识 797

34.6.2 按钮控件简介 798

34.6.3 演示事件处理和按钮 798

34.7 直接在画布上绘制 800

第35章 探究JavaFX控件 805

35.1 使用Image和ImageView 805

35.1.1 向标签添加图片 807

35.1.2 在按钮中使用图片 808

35.2 ToggleButton 810

35.3 RadioButton 812

35.3.1 处理开关组中的变化事件 814

35.3.2 处理单选按钮的另一种方式 815

35.4 CheckBox 817

35.5 ListView 820

35.5.1 ListView的滚动条 822

35.5.2 启用多项选择 823

35.6 ComboBox 823

35.7 TextField 826

35.8 ScrollPane 828

35.9 TreeView 830

35.10 效果和变换简介 833

35.10.1 效果 834

35.10.2 变换 834

35.10.3 演示效果和变换 835

35.11 添加工具提示 837

35.12 禁用控件 838

第36章 JavaFX菜单简介 839

36.1 菜单的基础知识 839

36.2 MenuBar、Menu和MenuItem概述 840

36.2.1 MenuBar 840

36.2.2 Menu 841

36.2.3 MenuItem 841

36.3 创建主菜单 841

36.4 向菜单项添加助记符和加速键 845

36.5 向菜单项添加图片 846

36.6 使用RadioMenuItem和CheckMenuItem 847

36.7 创建上下文菜单 848

36.8 创建工具栏 850

36.9 完整的MenuDemo程序 852

36.10 继续探究JavaFX 857

第Ⅴ部分 应用Java 861

第37章 Java Bean 861

37.1 Java Bean是什么 861

37.2 Java Bean的优势 861

37.3 内省 861

37.3.1 属性的设计模式 862

37.3.2 事件的设计模式 863

37.3.3 方法与设计模式 863

37.3.4 使用BeanInfo接口 863

37.4 绑定属性与约束属性 863

37.5 持久性 864

37.6 定制器 864

37.7 Java Bean API 864

37.7.1 Introspector类 865

37.7.2 PropertyDescriptor类 865

37.7.3 EventSetDescriptor类 865

37.7.4 MethodDescriptor类 866

37.8 一个Bean示例 866

第38章 servlet 869

38.1 背景 869

38.2 servlet的生命周期 869

38.3 servlet开发选项 870

38.4 使用Tomcat 870

38.5 一个简单的servlet 871

38.5.1 创建和编译servlet源代码 871

38.5.2 启动Tomcat 872

38.5.3 启动Web浏览器并请求servlet 872

38.6 Servlet API 872

38.7 javax.servlet包 872

38.7.1 Servlet接口 873

38.7.2 ServletConfig接口 873

38.7.3 ServletContext接口 873

38.7.4 ServletRequest接口 874

38.7.5 ServletResponse接口 874

38.7.6 GenericServlet类 875

38.7.7 ServletInputStream类 875

38.7.8 ServletOutputStream类 875

38.7.9 servlet异常类 875

38.8 读取servlet参数 875

38.9 javax.servlet.http包 876

38.9.1 HttpServletRequest接口 877

38.9.2 HttpServletResponse接口 878

38.9.3 HttpSession接口 878

38.9.4 Cookie类 879

38.9.5 HttpServlet类 879

38.10 处理HTTP请求和响应 880

38.10.1 处理HTTP GET请求 880

38.10.2 处理HTTP POST请求 881

38.11 使用cookie 882

38.12 会话跟踪 884

第Ⅵ部分 附录 889

附录A 使用Java的文档注释 889

附录B Java Web Start概述 895

附录C JShell简介 901

附录D applet基础 909

附录E JDK 10的两个重要特性 915