目 录
第1章 Java简介 / 1
1.1 Java概览 / 1
1.2 Java语言的特性 / 2
1.3 学习Java / 2
1.3.1 Java程序 / 3
1.3.2 Java学习路线图 / 3
1.4 Java环境 / 4
1.5 Java中的面向对象编程 / 11
1.5.1 什么是对象 / 12
1.5.2 如何定义对象类 / 13
1.5.3 对象操作 / 15
1.5.4 Java程序语句 / 17
1.5.5 封装 / 17
1.5.6 类与数据类型 / 18
1.5.7 类与子类 / 18
1.5.8 使用对象的优势 / 18
1.5.9 标记 / 18
1.5.10 泛型类 / 19
1.6 Java程序结构 / 19
1.6.1 Java的类库 / 19
1.6.2 Java应用程序 / 21
1.7 Java和Unicode / 23
1.8 小结 / 24
1.9 资源 / 25
第2章 程序、数据、变量和计算 / 27
2.1 数据和变量 / 27
2.1.1 变量的命名 / 28
2.1.2 变量名与Unicode / 28
2.1.3 变量与类型 / 29
2.2 整数数据类型 / 29
2.3 浮点数数据类型 / 33
2.3.1 浮点数字面量 / 33
2.3.2 声明浮点型变量 / 34
2.4 固定变量的值 / 34
2.5 算术运算 / 35
2.5.1 整数计算 / 35
2.5.2 整数除法和余数 / 40
2.5.3 增量与减量运算符 / 40
2.5.4 短整数类型的计算 / 42
2.5.5 整数算术中的错误 / 43
2.5.6 浮点计算 / 43
2.5.7 其他浮点算术运算符 / 44
2.5.8 浮点算术中的错误情况 / 44
2.5.9 混合算术表达式 / 45
2.5.10 显式转换 / 45
2.5.11 赋值中的自动类型转换 / 46
2.6 op=运算符 / 46
2.7 数学函数和常量 / 47
2.8 存储字符 / 51
2.8.1 字符转义序列 / 51
2.8.2 字符算术 / 52
2.9 位运算 / 54
2.9.1 使用AND和OR运算符 / 55
2.9.2 使用异或运算符 / 58
2.9.3 位移操作 / 59
2.9.4 位操作方法 / 62
2.10 取值范围为固定整数值集合的变量 / 64
2.11 布尔变量 / 66
2.12 运算符的优先级 / 67
2.13 程序注释 / 68
2.14 小结 / 70
第3章 循环与逻辑 / 73
3.1 决策 / 73
3.1.1 比较 / 74
3.1.2 if语句 / 74
3.1.3 嵌套的if语句 / 78
3.1.4 比较枚举值 / 81
3.2 逻辑运算符 / 81
3.2.1 逻辑与操作 / 82
3.2.2 逻辑或操作 / 84
3.2.3 异或操作 / 84
3.2.4 布尔非操作 / 84
3.2.5 使用标准库方法测试字符 / 85
3.3 条件运算符 / 86
3.4 switch语句 / 88
3.5 变量的作用域 / 94
3.6 循环 / 96
3.6.1 循环的种类 / 97
3.6.2 使用浮点值计数 / 103
3.6.3 嵌套循环 / 103
3.6.4 continue语句 / 105
3.6.5 带标签的continue语句 / 105
3.6.6 在循环中使用break语句 / 107
3.7 断言 / 112
3.8 小结 / 114
第4章 数组与字符串 / 117
4.1 数组 / 117
4.1.1 数组变量 / 118
4.1.2 定义数组 / 118
4.1.3 数组长度 / 119
4.1.4 访问数组元素 / 119
4.1.5 重用数组变量 / 119
4.1.6 初始化数组 / 120
4.1.7 使用数组 / 123
4.1.8 二维数组 / 126
4.1.9 字符数组 / 130
4.2 字符串 / 131
4.2.1 字符串字面量 / 131
4.2.2 创建String对象 / 132
4.2.3 字符串数组 / 134
4.3 字符串操作 / 135
4.3.1 连接字符串 / 135
4.3.2 比较字符串 / 139
4.3.3 字符串排序 / 144
4.3.4 访问字符串中的字符 / 146
4.3.5 在字符串中查找字符 / 148
4.3.6 查找子字符串 / 149
4.3.7 提取子字符串 / 152
4.3.8 String对象的修改版本 / 156
4.3.9 从String对象创建字符数组 / 157
4.3.10 使用字符串执行基于集合的for循环 / 157
4.3.11 在字符串中获取字节数组形式的字符 / 158
4.3.12 从字符数组中创建String对象 / 158
4.4 可变字符串 / 159
4.4.1 创建StringBuffer对象 / 160
4.4.2 StringBuffer对象的容量 / 160
4.4.3 为StringBuffer对象修改字符串的长度 / 162
4.4.4 增长StringBuffer对象 / 162
4.4.5 寻找子字符串的位置 / 164
4.4.6 替换缓冲区中的子字符串 / 165
4.4.7 插入字符串 / 165
4.4.8 从可变字符串中提取字符 / 166
4.4.9 可变字符串的其他操作 / 167
4.4.10 从StringBuffer对象创建String对象 / 167
4.5 小结 / 169
第5章 定义类 / 173
5.1 类的定义 / 173
5.1.1 类定义中的域 / 174
5.1.2 类定义中的方法 / 175
5.1.3 访问变量和方法 / 176
5.1.4 Final域 / 177
5.2 定义类 / 177
5.3 定义方法 / 178
5.3.1 方法的返回值 / 179
5.3.2 参数列表 / 179
5.3.3 定义类方法 / 181
5.3.4 访问方法中的类数据成员 / 182
5.3.5 变量this / 182
5.3.6 初始化数据成员 / 183
5.4 构造函数 / 186
5.4.1 默认构造函数 / 187
5.4.2 创建类的对象 / 188
5.5 定义和使用类 / 190
5.6 方法重载 / 192
5.6.1 多个构造函数 / 193
5.6.2 使用构造函数复制对象 / 196
5.7 使用对象 / 196
5.8 递归 / 202
5.9 理解包 / 204
5.9.1 对类打包 / 204
5.9.2 将类从包添加到程序中 / 207
5.9.3 程序中的包和名称 / 208
5.9.4 导入静态类成员 / 208
5.9.5 标准包 / 209
5.10 类成员的访问控制 / 212
5.10.1 使用访问属性 / 212
5.10.2 设定访问属性 / 214
5.10.3 选择访问属性 / 215
5.11 嵌套类 / 220
5.11.1 静态嵌套类 / 221
5.11.2 使用非静态嵌套类 / 225
5.11.3 使用非顶级类的嵌套类 / 227
5.11.4 本地嵌套类 / 228
5.12 小结 / 228
第6章 扩展类与继承 / 231
6.1 使用已有的类 / 231
6.2 类继承 / 233
6.2.1 继承数据成员 / 233
6.2.2 继承方法 / 234
6.2.3 覆盖基类方法 / 237
6.3 @Override标记 / 239
6.4 选择基类访问属性 / 239
6.5 多态 / 240
6.6 多级继承 / 246
6.7 抽象类 / 246
6.8 通用超类 / 247
6.8.1 toString()方法 / 249
6.8.2 判定对象的类型 / 249
6.8.3 复制对象 / 250
6.9 接收可变数目参数的方法 / 255
6.10 转换对象 / 256
6.10.1 转换对象的时机 / 258
6.10.2 识别对象 / 259
6.11 枚举进阶 / 260
6.12 设计类 / 264
6.13 使用final修饰符 / 274
6.14 接口 / 275
6.14.1 在程序中封装常量 / 275
6.14.2 用接口声明方法 / 278
6.14.3 扩展接口 / 281
6.14.4 使用接口 / 282
6.14.5 将接口类型作为方法的参数使用 / 288
6.14.6 在接口定义中嵌套类 / 289
6.14.7 接口与真实环境 / 289
6.15 匿名类 / 289
6.16 小结 / 290
第7章 异常 / 293
7.1 异常的基本思想 / 293
7.2 异常类型 / 294
7.2.1 Error类型的异常 / 295
7.2.2 RuntimeException类型的异常 / 295
7.2.3 Exception类的其他子类 / 295
7.3 处理异常 / 295
7.3.1 设定方法能够抛出的异常 / 296
7.3.2 处理异常 / 296
7.3.3 try代码块 / 296
7.3.4 catch代码块 / 297
7.3.5 在一个代码块中捕获多种异常类型 / 301
7.3.6 finally代码块 / 301
7.3.7 构造方法 / 302
7.3.8 执行顺序 / 303
7.3.9 嵌套的try代码块 / 309
7.3.10 重新抛出异常 / 309
7.4 异常对象 / 310
7.4.1 Throwable类 / 310
7.4.2 标准异常 / 313
7.5 定义自己的异常 / 313
7.5.1 定义异常类 / 313
7.5.2 抛出自己的异常 / 315
7.5.3 异常的抛出策略 / 315
7.6 小结 / 320
第8章 理解流 / 323
8.1 流与输入输出操作 / 323
8.2 流的概念 / 324
8.2.1 输入流与输出流 / 324
8.2.2 二进制流与字符流 / 325
8.3 输入输出类 / 326
8.3.1 基本的输入流操作 / 327
8.3.2 缓冲输入流 / 327
8.3.3 基本的输出流操作 / 328
8.3.4 Reader和Writer / 329
8.4 标准流 / 332
8.4.1 从键盘读入数据 / 333
8.4.2 写到命令行中 / 340
8.4.3 printf()方法 / 340
8.4.4 将数据格式化为字符串 / 345
8.5 小结 / 346
第9章 访问文件与目录 / 349
9.1 访问文件系统 / 349
9.2 使用Path对象 / 351
9.2.1 访问系统属性 / 353
9.2.2 设置系统属性 / 355
9.2.3 测试和检查Path对象 / 355
9.2.4 查询文件和目录 / 356
9.2.5 获取文件属性 / 357
9.2.6 其他的路径操作 / 360
9.3 创建与删除目录和文件 / 361
9.3.1 创建目录 / 361
9.3.2 创建文件 / 363
9.3.3 删除文件和目录 / 364
9.4 获取目录内容 / 365
9.5 关闭流 / 366
9.6 移动与复制文件和目录 / 368
9.6.1 对文件或目录重命名 / 369
9.6.2 复制文件和目录 / 370
9.6.3 遍历文件树 / 375
9.7 小结 / 378
第10章 写文件 / 381
10.1 文件I/O基础 / 381
10.2 文件输出 / 382
10.3 通过输出流写文件 / 383
10.4 使用Writer写文件 / 386
10.5 缓冲区 / 389
10.5.1 缓冲区的容量 / 389
10.5.2 缓冲区的位置和限制 / 390
10.5.3 设置位置和限制 / 391
10.5.4 创建缓冲区 / 392
10.5.5 标记缓冲区 / 396
10.5.6 缓冲区数据传输 / 397
10.5.7 使用视图缓冲区 / 399
10.5.8 准备缓冲区以输出到文件中 / 400
10.6 使用通道写文件 / 401
10.6.1 通道接口 / 402
10.6.2 通道操作 / 403
10.6.3 为文件获取通道 / 404
10.6.4 通道写操作 / 404
10.7 文件写操作 / 406
10.7.1 将缓冲区的一部分写入到文件中 / 406
10.7.2 文件的位置 / 409
10.7.3 使用视图缓冲区加载字节缓冲区 / 410
10.7.4 将变长字符串写入到文件中 / 410
10.7.5 直接和间接缓冲区 / 416
10.7.6 使用通道写入数值数据 / 417
10.7.7 将混合数据写入到文件中 / 421
10.7.8 从多个缓冲区写入 / 427
10.8 强制将数据写入到设备中 / 430
10.9 小结 / 431
第11章 读文件 / 433
11.1 文件读取操作 / 433
11.1.1 使用输入流读取文件 / 434
11.1.2 使用缓冲读取器读取文件 / 437
11.2 使用通道读取文件 / 439
11.2.1 读取文本文件 / 441
11.2.2 从缓冲区获取数据 / 442
11.2.3 读取二进制数据 / 444
11.2.4 读取混合数据 / 446
11.2.5 压缩缓冲区 / 449
11.3 复制文件 / 452
11.4 随机访问文件 / 455
11.5 内存映射文件 / 460
11.5.1 锁住文件 / 463
11.5.2 锁住文件的特定部分 / 465
11.5.3 实用的文件加锁考量 / 465
11.6 小结 / 468
第12章 序列化对象 / 471
12.1 在文件中存储对象 / 471
12.2 将对象写入到文件中 / 472
12.2.1 将基本类型数据写入到对象流中 / 474
12.2.2 实现Serializable接口 / 475
12.3 从文件读取对象 / 478
12.3.1 判定反序列化对象所属的类 / 481
12.3.2 使用对象序列化 / 482
12.3.3 手动序列化类 / 485
12.3.4 序列化问题和困难 / 486
12.4 小结 / 488
第13章 泛型 / 491
13.1 什么是泛型 / 491
13.2 定义泛型类 / 492
13.2.1 实现泛型类 / 493
13.2.2 实例化泛型类 / 495
13.2.3 泛型类实例在运行时的类型 / 500
13.2.4 泛型类实例之间的关系 / 502
13.2.5 多个类型参数 / 502
13.2.6 类型参数的作用域 / 503
13.2.7 泛型类的静态域 / 504
13.2.8 类型参数的边界 / 504
13.3 泛型类和泛型接口 / 508
13.3.1 实现针对容器类的基于集合的循环 / 508
13.3.2 实现迭代器的功能 / 510
13.3.3 二叉树的参数化类型 / 512
13.4 原生类型的变量 / 523
13.5 使用通配符类型参数 / 524
13.5.1 针对通配符的约束 / 526
13.5.2 深入Class类 / 529
13.6 数组与参数化类型 / 530
13.7 参数化方法 / 533
13.8 参数化类型及继承 / 539
13.9 小结 / 540
第14章 集合框架 / 543
14.1 理解集合框架 / 543
14.2 对象集合 / 544
14.2.1 集 / 544
14.2.2 序列 / 545
14.2.3 地图 / 546
14.3 迭代器 / 547
14.4 集合类 / 549
14.5 使用EnumSet / 552
14.6 数组集合类 / 554
14.6.1 创建矢量 / 554
14.6.2 存储对象 / 557
14.6.3 检索对象 / 558
14.6.4 移除对象 / 560
14.6.5 搜索对象 / 561
14.6.6 应用矢量 / 562
14.6.7 对集合中的元素进行排序 / 566
14.6.8 堆栈存储器 / 567
14.7 链表 / 573
14.8 使用地图 / 575
14.8.1 散列过程 / 575
14.8.2 把自己的类用作键 / 576
14.8.3 创建HashMap容器 / 577
14.8.4 存储、检索和移除对象 / 578
14.8.5 处理地图中的所有元素 / 579
14.9 小结 / 589
14.10 练习 / 589
第15章 一组有用的类 / 591
15.1 数组的实用方法 / 591
15.1.1 填充数组 / 591
15.1.2 复制数组 / 593
15.1.3 比较数组 / 593
15.1.4 数组的排序 / 594
15.1.5 搜索数组 / 598
15.1.6 将数组的内容用作字符串 / 600
15.2 Observable和Observer对象 / 601
15.2.1 定义Observable对象的类 / 602
15.2.2 Observable类的方法 / 602
15.3 生成随机数 / 605
15.4 日期和时间 / 608
15.4.1 Date类 / 608
15.4.2 解释Date对象 / 609
15.4.3 公历 / 612
15.5 正则表达式 / 618
15.6 使用Scanner对象 / 637
15.6.1 创建Scanner对象 / 637
15.6.2 从Scanner对象获取输入 / 637
15.6.3 测试标记 / 640
15.6.4 为标记定义自己的模式 / 641
15.7 小结 / 642
15.8 练习 / 642
第16章 线程 / 645
16.1 理解线程 / 645
16.1.1 创建线程 / 647
16.1.2 停止线程 / 652
16.1.3 连接线程 / 653
16.1.4 线程的调度 / 654
16.1.5 实现Runnable接口 / 654
16.2 管理线程 / 656
16.2.1 同步 / 657
16.2.2 死锁 / 672
16.3 使用执行器 / 674
16.3.1 使用执行器 / 674
16.3.2 执行Callable<V>任务 / 675
16.3.3 Future<V>对象方法 / 675
16.3.4 关闭线程池 / 676
16.4 线程优先级 / 685
16.5 小结 / 687
16.6 练习 / 687
第17章 创建窗口 / 689
17.1 Java中的图形用户界面 / 689
17.2 创建窗口 / 691
17.2.1 设计窗口 / 692
17.2.2 在GUI代码中禁止死锁 / 692
17.3 组件和容器 / 696
17.3.1 Window和Frame组件 / 697
17.3.2 Window面板 / 698
17.4 组件的基础知识 / 699
17.4.1 组件的属性 / 699
17.4.2 组件的大小和位置 / 700
17.4.3 点和矩形 / 703
17.4.4 组件的可视化特性 / 706
17.4.5 Swing组件 / 714
17.5 使用Swing容器 / 716
17.6 容器的布局管理器 / 718
17.6.1 流布局管理器 / 719
17.6.2 使用边界布局管理器 / 724
17.6.3 使用卡片布局管理器 / 726
17.6.4 使用网格布局管理器 / 728
17.6.5 使用BoxLayout管理器 / 730
17.6.6 使用GridBagLayout管理器 / 736
17.6.7 使用SpringLayout管理器 / 743
17.7 向窗口中添加菜单 / 750
17.7.1 创建JMenu和JmenuItem对象 / 750
17.7.2 创建菜单 / 751
17.7.3 为菜单添加菜单项 / 753
17.7.4 添加菜单快捷键和加速器 / 757
17.8 小结 / 759
17.9 练习 / 759
第18章 处理事件 / 761
18.1 交互式Java程序 / 761
18.2 事件处理过程 / 763
18.3 事件类 / 764
18.3.1 低级事件类 / 764
18.3.2 使窗口处理自己的事件 / 766
18.3.3 允许其他低级事件 / 768
18.3.4 低级事件监听器 / 769
18.3.5 使用适配器类 / 774
18.3.6 语义事件 / 776
18.3.7 语义事件监听器 / 776
18.4 applet中语义事件的处理 / 777
18.4.1 其他事件处理方式 / 785
18.4.2 处理低级事件和语义事件 / 787
18.5 应用程序中的语义事件监听器 / 788
18.6 使用动作 / 794
18.6.1 Action接口 / 794
18.6.2 Action方法 / 795
18.6.3 把动作用作菜单项 / 796
18.6.4 定义Action类 / 797
18.7 添加工具栏 / 803
18.8 添加菜单图标 / 812
18.9 添加工具提示 / 813
18.10 禁用动作 / 815
18.11 小结 / 815
18.12 练习 / 815
第19章 在窗口中绘图 / 817
19.1 使用模型/视图体系结构 / 817
19.2 组件坐标系统 / 821
19.3 在组件上绘图 / 822
19.3.1 图形环境 / 822
19.3.2 绘图过程 / 825
19.3.3 渲染操作 / 826
19.4 形状 / 826
19.4.1 定义点的类 / 826
19.4.2 直线和矩形 / 827
19.4.3 圆弧和椭圆 / 832
19.4.4 曲线 / 835
19.4.5 复杂路径 / 843
19.5 填充图形 / 847
19.6 管理图形 / 852
19.6.1 存储模型中的图形 / 854
19.6.2 绘制图形 / 855
19.7 用鼠标绘图 / 856
19.8 定义自己的图形类 / 864
19.8.1 定义直线 / 864
19.8.2 定义矩形 / 866
19.8.3 定义圆 / 868
19.8.4 绘制曲线 / 870
19.9 修改光标 / 872
19.10 小结 / 873
19.11 练习 / 873
第20章 扩展GUI / 875
20.1 创建状态栏 / 875
20.1.1 用于Sketcher的
StatusBar类 / 876
20.1.2 更新面板 / 878
20.2 使用对话框 / 880
20.2.1 模态对话框和非模态对话框 / 881
20.2.2 一个简单的模态对话框 / 882
20.2.3 即时消息对话框 / 885
20.2.4 即时输入对话框 / 887
20.3 使用对话框创建文本元素 / 889
20.3.1 为文本定义菜单项和工具栏按钮 / 889
20.3.2 定义文本类 / 891
20.3.3 创建文本元素 / 892
20.4 字体选择对话框 / 895
20.4.1 FontDialog类 / 896
20.4.2 创建字体对话框按钮 / 896
20.4.3 添加数据面板 / 898
20.4.4 实现字体列表 / 899
20.4.5 显示所选的字体 / 901
20.4.6 使用分隔面板 / 902
20.4.7 使用微调按钮 / 903
20.4.8 使用单选按钮来选择字体样式 / 905
20.4.9 监听单选按钮 / 906
20.5 弹出式菜单 / 908
20.5.1 显示弹出式菜单 / 910
20.5.2 实现上下文菜单 / 913
20.7 变换用户坐标系统 / 921
20.8 选择自定义颜色 / 937
20.8.1 使用缓存的图像 / 938
20.8.2 使用JColorChooser对话框 / 938
20.8.3 添加自定义颜色GUI / 939
20.8.4 显示颜色选择对话框 / 941
20.9 小结 / 942
20.10 练习 / 943
第21章 填充和打印文档 / 945
21.1 串行化草图 / 945
21.1.1 实现串行化 / 946
21.1.2 串行化元素列表 / 946
21.2 用来保存草图的基本架构 / 946
21.2.1 指定文件名 / 946
21.2.2 验证草图的目录 / 947
21.2.3 记录草图是否修改 / 948
21.2.4 处理File菜单事件 / 949
21.3 使用文件选择器 / 950
21.3.1 显示文件保存对话框 / 950
21.3.2 显示文件打开对话框 / 951
21.3.3 定制文件选择对话框 / 951
21.4 实现文件操作 / 953
21.4.1 创建定制的文件对话框 / 954
21.4.2 实现保存操作 / 955
21.4.3 实现Save As操作 / 959
21.4.4 实现文件打开操作 / 961
21.4.5 启动新草图 / 963
21.4.6 禁止在关闭时丢失数据 / 964
21.5 在Java中打印 / 966
21.5.1 创建和使用PrinterJob对象 / 967
21.5.2 打印页面 / 970
21.5.3 打印整个草图 / 974
21.5.4 横向打印 / 978
21.5.5 提高打印性能 / 980
21.2.6 实现页面设置 / 981
21.5.7 使用Java打印对话框 / 984
21.5.8 多页面文档的打印 / 987
21.5.9 使用Book对象进行打印 / 995
21.5.10 打印Swing组件 / 997
21.6 小结 / 999
21.7 练习 / 1000
第22章 Java和XML / 1001
22.1 XML / 1001
22.1.1 XML的作用 / 1002
22.1.2 在Java中处理XML / 1002
22.2 XML文档结构 / 1002
22.2.1 结构良好的XML文档 / 1003
22.2.2 有效的XML文档 / 1004
22.2.3 XML文档中的元素 / 1004
22.2.4 元素的属性 / 1008
22.3 XML中的数据结构 / 1011
22.4 文档类型定义 / 1011
22.4.1 声明DTD / 1012
22.4.2 定义DTD / 1013
22.4.3 Sketcher的DTD / 1019
22.5 结构良好的文档的规则 / 1023
22.6 XML名称空间 / 1024
22.6.1 名称空间声明 / 1024
22.6.2 XML名称空间和DTD / 1026
22.7 XML 模式 / 1026
22.7.1 定义模式 / 1027
22.7.2 定义模式元素 / 1028
22.7.3 指定数据类型 / 1029
22.7.4 定义复杂元素的属性 / 1029
22.7.5 值的限制 / 1030
22.7.6 定义属性组 / 1031
22.7.7 指定一组元素选项 / 1031
22.8 Sketcher模式 / 1032
22.8.1 定义直线元素 / 1033
22.8.2 定义矩形元素类型 / 1035
22.8.3 定义圆元素类型 / 1035
22.8.4 定义曲线元素类型 / 1036
22.8.5 定义文本元素类型 / 1037
22.8.6 完整的Sketcher模式 / 1037
22.8.7 使用模式的文档 / 1041
22.9 用XML文档编程 / 1041
22.9.1 SAX 处理 / 1042
22.9.2 DOM 处理 / 1043
22.10 访问解析器 / 1043
22.11 使用SAX / 1044
22.11.1 解析器的属性和特征 / 1046
22.11.2 用SAX解析文档 / 1048
22.11.3 实现SAX处理程序 / 1049
22.11.4 处理其他解析事件 / 1058
22.11.5 解析模式实例文档 / 1059
22.12 小结 / 1064
22.13 练习 / 1064
第23章 创建和修改XML文档 / 1067
23.1 文档对象模型 / 1067
23.2 设置DOM解析器的特征 / 1069
23.3 解析文档 / 1070
23.4 导航Document对象树 / 1071
23.4.1 节点类型 / 1072
23.4.2 可忽略的空白和元素内容 / 1077
23.4.3 访问属性 / 1078
23.5 转换XML / 1081
23.6 创建Document对象 / 1085
23.7 把草图存储为XML文档 / 1089
23.7.1 添加元素节点 / 1090
23.7.2 为完成的草图创建Document对象 / 1097
23.7.3 把草图保存为XML文件 / 1099
23.8 读取草图的XML表示 / 1103
23.8.1 从XML中创建基类对象 / 1103
23.8.2 从XML节点中创建元素 / 1105
23.8.3 处理Import XML事件 / 1109
23.8.4 读取XML文件 / 1110
23.8.5 创建模型 / 1111
23.9 小结 / 1114
23.10 练习 / 1114
附录A 关键字 / 1117
附录B 计算机算术 / 1119