第1章 Java概述 1
1.1 什么是Java 1
目录 1
译者序 1
序 1
前言 1
1.3.1 Java程序 2
1.3 学习Java 2
1.2 Java语言的特性 2
1.4 Java环境 3
1.3.2 学习Java要走的路 3
1.5 基于Java语言的面向对象程序设计 9
1.5.1 对象是什么 10
1.5.2 如何定义对象的类 11
1.5.3 对象的操作 13
1.5.5 封装 15
1.5.4 Java程序语句 15
1.6 Java程序结构 16
1.5.8 使用对象的优点 16
1.5.6 类和数据类型 16
1.5.7 类和子类 16
1.6.1 Java的类库 17
1.6.2 Java应用程序 18
1.8 本章小结 20
1.7 Java和Unicode码 20
1.9 参考资源 21
2.1.1 变量的命名 22
2.1 数据和变量 22
第2章 程序、数据、变量和计算 22
2.1.3 变量和类型 23
2.1.2 变量名和Unicode码 23
2.2 整型数据类型 24
2.2.1 整型字面值 25
2.2.2 整型变量的声明 26
2.3 浮点数据类型 27
2.4 固定变量的值 28
2.3.2 浮点型变量的声明 28
2.3.1 浮点字面值 28
2.5.1 整数运算 29
2.5 算术运算 29
2.5.2 整数除法和余数 34
2.5.3 自增和自减运算符 35
2.5.4 短整型数计算 36
2.5.6 浮点运算 37
2.5.5 整数算术运算中的错误 37
2.6.2 赋值语句中的自动类型转换 39
2.6.1 显式类型强制转换 39
2.6 混合数据类型的算术运算表达式 39
2.8 数学函数和常量 40
2.7 op=运算符 40
2.9.1 字符转义序列 44
2.9 字符的存储 44
2.9.2 字符的算术运算 45
2.10 按位运算 47
2.10.1 使用AND和OR运算符 48
2.10.2 使用异或运算符 51
2.10.3 移位运算 52
2.10.4 按位运算的方法 56
2.11 有固定序列整型值的变量(枚举) 58
2.12 布尔型变量 59
2.13 运算符的优先级 60
2.14 程序注释 61
2.15 本章小结 62
2.16 练习题 63
3.1.1 比较 64
3.1 决策 64
第3章 循环与逻辑 64
3.1.2 if语句 65
3.1.3 嵌套的if语句 68
3.1.4 比较枚举值 71
3.2 逻辑运算符 72
3.3 条件运算符 76
3.4 switch语句 77
3.5 变量作用域 83
3.6 循环 85
3.6.1 循环的种类 86
3.6.2 嵌套循环 93
3.6.3 continue语句 94
3.6.4 在循环中使用break语句 96
3.7 断言 101
3.9 练习题 103
3.8 本章小结 103
4.1.1 数组变量 104
4.1 数组 104
第4章 数组和字符串 104
4.1.2 数组定义 105
4.1.5 数组变量的重用 106
4.1.4 访问数组元素 106
4.1.3 数组的长度 106
4.1.6 数组初始化 107
4.1.7 使用数组 109
4.1.8 嵌套数组 112
4.2.1 字符串常量 117
4.2 字符串 117
4.1.9 字符数组 117
4.2.2 创建String对象 118
4.2.3 字符串数组 120
4.3.1 字符串的连接 121
4.3 字符串的运算 121
4.3.2 字符串的比较 124
4.3.3 字符串的排序 129
4.3.4 访问字符串中的字符 131
4.3.5 搜索字符串中的字符 133
4.3.6 子串搜索 134
4.3.7 提取子串 137
4.3.9 由String对象创建字符数组 141
4.3.8 String对象的修改版本 141
4.3.11 以字节数组的形式获取字符串中的字符 142
4.3.10 对字符串使用collection-based for循环 142
4.4 可变字符串 143
4.3.12 由字符数组创建String对象 143
4.4.2 StringBuffer对象的容量 144
4.4.1 创建StringBuffer对象 144
4.4.4 向StringBuffer对象增加其他内容 146
4.4.3 为StringBuffer对象改变字符串的长度 146
4.4.7 插入子串 149
4.4.6 替换缓冲区中的子串 149
4.4.5 查找子串的位置 149
4.4.9 对可变字符串的其他操作 150
4.4.8 从可变字符串中提取字符 150
4.4.10 由StringBuffer对象创建String对象 151
4.6 练习题 153
4.5 本章小结 153
5.1 什么是类 155
第5章 类的定义 155
5.1.1 类定义中的变量 156
5.1.2 类定义中的方法 157
5.2 定义类 158
5.1.3 变量和方法的访问 158
5.3 方法的定义 159
5.3.2 形式参数表 160
5.3.1 由方法返回 160
5.3.3 类方法的定义 162
5.3.5 this变量 163
5.3.4 在方法中访问类的数据成员 163
5.3.6 初始化数据成员 164
5.4 构造函数 167
5.4.1 默认构造函数 168
5.4.2 生成类的对象 169
5.5 类的定义和使用 171
5.6.1 多个构造函数 173
5.6 方法重载 173
5.6.2 使用构造函数复制对象 176
5.7 对象的使用 177
5.8 递归 182
5.9.1 类的打包 184
5.9 理解包 184
5.9.2 将包中的类添加到程序中 187
5.9.4 导入静态类成员 188
5.9.3 程序中的包和名称 188
5.9.5 标准包 189
5.10 控制对类成员的访问 191
5.10.1 使用访问属性 192
5.10.2 指定访问属性 193
5.10.3 选择访问属性 194
5.11 嵌套类 199
5.11.1 静态嵌套类 200
5.11.2 使用非静态嵌套类 204
5.11.3 在顶层类之外使用嵌套类 205
5.12 finalize()方法 206
5.11.4 局部嵌套类 206
5.13 本地方法 207
5.15 练习题 208
5.14 本章小结 208
6.1 使用现有的类 209
第6章 类的扩展与继承 209
6.2 类的继承 210
6.2.1 继承数据成员 211
6.2.2 继承方法 212
6.2.3 覆盖基类的方法 215
6.4 多态 216
6.3 选择基类的访问属性 216
6.5 多级继承 221
6.6 抽象类 222
6.7 通用超类 223
6.7.2 确定对象的类型 224
6.7.1 toString()方法 224
6.7.3 对象的复制 225
6.8 接收可变实参的方法 229
6.9 对象的类型强制转换 231
6.9.1 何时强制转换对象的类型 233
6.9.2 对象的识别 234
6.10 关于枚举 235
6.11 类的设计 238
6.12 使用final修饰符 247
6.13 接口 248
6.13.1 封装程序中的常量 249
6.13.2 声明方法的接口 252
6.13.4 接口的应用 254
6.13.3 接口的扩展 254
6.13.5 接口类型的方法形参 261
6.13.6 接口定义中的嵌套类 261
6.15 本章小结 262
6.14 匿名类 262
6.13.7 接口与现实世界 262
6.16 练习题 263
7.1 异常的概念 264
第7章 异常 264
7.2.1 Error异常 265
7.2 异常的类型 265
7.2.2 RuntimeException异常 266
7.3.1 指定方法可以抛出的异常 267
7.3 异常的处理 267
7.2.3 Exception类的其他子类 267
7.3.4 catch代码块 268
7.3.3 try代码块 268
7.3.2 异常的处理 268
7.3.6 方法的组织 273
7.3.5 finally代码块 273
7.3.7 执行的顺序 274
7.3.9 再次抛出异常 279
7.3.8 嵌套的try代码块 279
7.4.1 Throwable类 280
7.4 异常对象 280
7.5.1 定义异常类 282
7.5 定义自己的异常 282
7.4.2 标准异常 282
7.5.3 异常处理策略 283
7.5.2 抛出自己的异常 283
7.7 练习题 287
7.6 本章小结 287
8.1 流和新的I/O功能 288
第8章 理解流 288
8.2.1 输入流和输出流 289
8.2 流的定义 289
8.2.2 二进制流和字符流 290
8.3.1 基本的输入流操作 291
8.3 输入/输出类 291
8.3.3 Readers流和Writers流 294
8.3.2 基本的输出流操作 294
8.4 标准流 297
8.4.1 从键盘获取数据 298
8.4.3 printf()方法 304
8.4.2 向命令行写 304
8.4.4 将数据格式化输入到字符串 308
8.6 练习题 309
8.5 本章小结 309
9.1.1 创建File对象 310
9.1 运用File对象 310
第9章 访问文件和目录 310
9.1.2 访问系统属性 313
9.1.3 测试和检查File对象 315
9.1.4 文件列表的过滤 320
9.1.5 创建、修改文件和目录 322
9.2 创建文件输出流 324
9.2.1 确保文件存在 325
9.2.2 避免覆盖文件 326
9.3 本章小结 328
9.2.3 FileDescriptor对象 328
9.4 练习题 329
10.1 文件输入/输出基础 330
第10章 写文件 330
10.2 文件输入/输出 331
10.3.1 通道操作 332
10.3 通道 332
10.4 缓冲区 334
10.3.2 文件通道 334
10.4.1 缓冲区容量 335
10.4.2 缓冲区位置和边界 336
10.4.3 设置位置和边界 337
10.4.4 创建缓冲区 338
10.4.6 缓冲区数据传送 343
10.4.5 标记缓冲区 343
10.4.7 将数据传送到缓冲区 344
10.4.9 准备好向文件输出的缓冲区 345
10.4.8 使用视图缓冲区 345
10.5 写入文件 347
10.5.1 文件位置 348
10.5.2 将变长字符串写入文件 354
10.5.4 将数值数据写入文件 359
10.5.3 直接缓冲区和间接缓冲区 359
10.5.5 将混合数据写入文件 363
10.5.6 集中写操作 368
10.6 本章小结 371
10.7 练习题 372
11.1 文件读操作 373
第11章 读文件 373
11.2 文件通道读操作 375
11.3 读取文本文件 376
11.4 读取二进制数据 379
11.5 读取混合型数据 383
11.6 文件的复制 388
11.7 随机存取文件 392
11.8 使用一个文件通道进行读写 396
11.9 内存映像文件 398
11.9.1 锁定文件 401
11.9.3 实际文件锁定的注意事项 402
11.9.2 文件的部分锁定 402
11.10 本章小结 405
11.11 练习题 406
12.1 在文件中存储对象 407
第12章 对象的序列化 407
12.1.1 将对象写入文件 408
12.1.2 将基本数据类型写入对象流 409
12.1.3 实现Serializable接口 410
12.1.4 从文件读取对象 413
12.1.5 使用对象序列化 417
12.1.7 序列化的问题和复杂情况 420
12.1.6 自己实现类的序列化 420
12.2 本章小结 423
12.3 练习题 424
13.1 什么是泛型 425
第13章 泛型类 425
13.2 泛型类的定义 426
13.2.1 泛型的实现 427
13.2.2 泛型的实例化 428
13.2.3 泛型实例的运行时类型 433
13.2.5 多重类型参数 434
13.2.4 泛型实例之间的关系 434
13.2.7 泛型中的静态成员域 435
13.2.6 类型参数的作用域 435
13.2.8 类型参数限制 436
13.3.1 利用collection-based for循环 439
13.3 泛型和泛型接口 439
13.3.2 实现一个迭代器 441
13.3.3 参数化的二叉树 443
13.4 原生类型变量 451
13.5 用通配符作为类型实参 452
13.5.1 对通配符的约束 454
13.5.2 进一步研究Class类 457
13.6 数组和参数化类型 458
13.7 参数化方法 460
13.8 参数化类型和继承 466
13.10 练习题 467
13.9 本章小结 467
14.1 理解集合框架 468
第14章 集合框架 468
14.2.2 序列 469
14.2.1 集 469
14.2 对象的集合 469
14.2.3 映射 470
14.3 迭代器 471
14.4 集合类 474
14.5.1 创建向量 477
14.5 使用向量 477
14.5.2 把对象存入向量中 480
14.5.3 从向量中获取对象 481
14.5.4 从数组中删除对象 483
14.5.5 搜索向量 484
14.5.6 应用向量 485
14.5.7 为集合排序 488
14.5.8 栈式存储 490
14.6 使用链表 494
14.7.1 散列处理 496
14.7 使用映射 496
14.7.2 用自己的类创建的对象作键 497
14.7.3 创建HashMap容器 498
14.7.4 存储、获取以及删除对象 499
14.7.5 处理映射中所有的元素 500
14.8 本章小结 509
14.9 练习题 510
15.1.1 填充数组 511
15.1 数组的工具方法 511
第15章 实用类的集合 511
15.1.2 比较数组 512
15.1.3 对数组排序 513
15.1.4 搜索数组 516
15.2 Observable对象和Observer对象 519
15.2.1 定义可观察对象的类 520
15.2.2 Observable类的方法 520
15.3 产生随机数 523
15.4 日期和时间 525
15.4.1 Date类 526
15.4.2 解释Date对象 526
15.4.3 Gregorian日历 530
15.5 正则表达式 535
15.6 使用扫描器 552
15.6.1 创建扫描器对象 552
15.6.2 获取从扫描器的输入 553
15.6.3 测试标记 555
15.6.4 为标记定义自己的模式 556
15.7 本章小结 558
15.8 练习题 558
第16章 线程 559
16.1 理解线程 559
16.1.1 创建线程 561
16.1.2 停止线程 565
16.1.4 线程调度 567
16.1.5 实现Runnable接口 567
16.1.3 连接线程 567
16.2 管理线程 570
16.2.1 同步处理 570
16.2.2 死锁 585
16.2.3 线程间的通信 586
16.3 线程的优先级 590
16.4 本章小结 593
16.5 练习题 593
第17章 创建窗口 594
17.1 Java中的图形用户界面 594
17.2 创建窗口 596
17.3 组件和容器 599
17.3.1 窗口和框架组件 601
17.3.2 窗口窗格 601
17.4 组件基础 602
17.4.1 组件属性 602
17.4.2 组件的大小和位置 603
17.4.3 点和矩形 606
17.4.4 组件的可视特性 608
17.4.5 Swing组件 615
17.5 使用容器 617
17.6 容器布局管理器 619
17.6.1 流布局管理器 620
17.6.2 使用边界布局管理器 624
17.6.3 使用卡片布局管理器 626
17.6.4 使用网格布局管理器 627
17.6.5 使用盒式布局管理器 629
17.6.6 使用GridBagLayout管理器 634
17.6.7 使用SpringLayout管理器 640
17.7 添加菜单到窗口中 646
17.7.1 创建JMenu和JMenuItem 646
17.7.2 创建菜单 647
17.7.3 添加菜单项到下拉菜单中 649
17.7.4 为菜单项添加快捷键 652
17.8 更多关于applet小程序的内容 654
17.9 本章小结 656
17.10 练习题 657
第18章 事件处理 658
18.1 基于窗口的Java程序 658
18.2 事件处理过程 659
18.3 在图形用户界面代码中避免死锁 661
18.4 事件类 662
18.4.1 低级事件类 662
18.4.2 低级事件监听器 667
18.4.3 语义事件 672
18.4.4 语义事件监听器 673
18.5 applet小程序中的语义事件处理 674
18.5.1 其他处理事件方法 682
18.5.2 处理低级事件和语义事件 683
18.6 应用程序中的语义事件监听器 684
18.7 使用Action 689
18.7.1 Action接口 690
18.7.2 将行为应用于菜单项 691
18.8 添加工具栏 696
18.8.1 添加按钮到工具栏中 696
18.8.2 添加工具提示 702
18.8.3 禁用动作 704
18.9 本章小结 705
18.10 练习题 705
第19章 在窗口中绘画 706
19.1 使用模型/视图体系结构 706
19.2 组件中的坐标系 709
19.3 在组件上绘图 710
19.3.1 图形环境 711
19.3.2 绘制过程 713
19.4 几何图形 714
19.4.1 定义点的类 714
19.3.3 渲染操作 714
19.4.2 直线段和矩形 716
19.4.3 圆弧和椭圆 720
19.4.4 曲线 723
19.4.5 复杂路径 729
19.5 填充几何图形 734
19.6 管理几何图形 738
19.6.1 在文档中存储图形 739
19.6.2 绘制图形 740
19.7 使用鼠标绘制 741
19.7.1 处理鼠标事件 742
19.7.2 处理鼠标按键按下事件 743
19.7.3 处理鼠标拖拽事件 745
19.7.4 处理鼠标按键释放事件 747
19.8 定义自己的图形类 748
19.8.1 定义线段 748
19.7.5 使用MouseInfo类方法确定鼠标的位置 748
19.8.2 定义矩形 750
19.8.3 定义圆形 752
19.8.4 绘制曲线 754
19.9 本章小结 756
19.10 练习题 757
第20章 扩展图形用户界面 758
20.1 创建状态栏 758
20.2 使用对话框 762
20.2.1 模式与非模式对话框 762
20.2.2 简单的模式对话框 763
20.2.3 即时对话框 767
20.2.4 输入对话框 768
20.2.5 字体选择对话框 777
20.3 弹出式菜单 790
20.3.1 显示弹出式菜单 791
20.3.2 实现上下文菜单 793
20.4 转换用户坐标系统 800
20.4.1 仿射转换类 802
20.4.2 修改图形环境的转换 803
20.4.3 创建仿射转换对象 804
20.5 选择自定义颜色 816
20.6 本章小结 818
20.7 练习题 818
第21章 文档的整理和打印 819
21.1 序列化处理草图 819
21.2 实现可序列化接口 822
21.3 支持文件菜单 827
21.3.1 使用文件选择器 827
21.3.2 文件保存操作 828
21.3.3 文件另存为操作 834
21.3.4 文件打开操作 835
21.3.5 开始新建草图 837
21.3.6 防止关闭时数据丢失 838
21.4 在Java中打印 839
21.4.1 创建和使用PrinterJob对象 841
21.4.2 打印页面 843
21.4.3 打印完整的草图 847
21.4.4 横向打印 851
21.4.5 改进打印应用程序 853
21.4.6 实现页面设置 854
21.4.7 使用Java的打印对话框 857
21.4.8 多页文档打印 859
21.4.9 使用Book打印 866
21.4.10 打印Swing组件 868
21.5 本章小结 871
21.6 练习题 871
第22章 Java与XML 872
22.1 XML 872
22.2 XML文档结构 873
22.2.1 有效的XML文档 874
22.2.2 XML文档中的元素 875
22.2.3 元素属性 878
22.3 XML中的数据结构 880
22.4 文档定义类型 881
22.4.1 声明DTD 881
22.4.2 定义DTD 882
22.4.3 Sketcher程序的DTD 888
22.5 构造良好文档的规则 891
22.6 XML名字空间 891
22.6.1 名字空间声明 892
22.6.2 XML名字空间和DTD 893
22.7 XML模式 893
22.7.1 定义模式 894
22.7.2 定义元素 895
22.7.3 定义复杂元素的属性 896
22.7.4 指定一组备选元素 898
22.7.5 用于Sketcher程序的模式 898
22.7.6 使用模式的文档 903
22.8 使用XML文档编程 904
22.8.1 SAX处理 904
22.8.2 DOM处理 905
22.9 访问解析器 906
22.10 使用SAX 906
22.10.1 使用不同的解析器 909
22.10.2 解析器的特征及特性 909
22.10.3 使用SAX解析文档 911
22.10.4 实现SAX处理器 912
22.10.5 处理其他解析事件 920
22.10.6 解析由模式实例化的文档 921
22.11 本章小结 925
22.12 练习题 925
第23章 创建和修改XML文档 926
23.1 文档对象模型 926
23.1.1 设置DOM解析器特征 927
23.1.2 解析文档 928
23.1.3 遍历文档对象树 929
23.1.4 创建XML文档 939
23.1.5 将草图存储为XML文档 943
23.1.6 阅读用XML表示的草图 956
23.2 本章小结 964
23.3 练习题 965
第24章 与数据库通信 966
24.1 JDBC的概念和术语 966
24.1.1 表 968
24.1.2 数据库编目 969
24.2 SQL简介 970
24.2.1 定义一个相交表 973
24.2.2 SQL语句 974
24.2.3 INSERT语句 974
24.2.4 SELECT语句 975
24.2.6 DELETE语句 977
24.3 JDBC包 977
24.2.5 UPDATE语句 977
24.3.1 JDBC与ODBC的关系 978
24.3.2 JDBC基础 978
24.3.3 建立一个数据库 979
24.3.4 DriverManager 980
24.3.5 创建一个数据源连接 981
24.3.6 关于驱动程序的更多内容 984
24.3.7 Statement对象 986
24.3.8 ResultSet对象 987
24.3.9 获得结果集的元数据 990
24.4 基本的JDBC程序 991
24.5 使用PreparedStatement对象 995
24.6 创建Interactive SQL工具 997
24.6.1 使用表 998
24.6.2 应用程序GUI 1001
24.6.3 处理事件 1004
24.6.4 处理命令行实参 1005
24.7 本章小结 1006
24.8 练习题 1006
第25章 JDBC操作 1007
25.1 数据类型与JDBC 1007
25.2 把关系数据映射到Java对象 1008
25.3 Statement和PreparedStatement接口 1015
25.3.1 Statement接口 1015
25.3.2 PreparedStatement接口 1020
25.4 结果集 1024
25.4.1 获取指定数据类型的列数据 1024
25.4.2 处理空值 1024
25.4.3 处理特殊数据类型 1026
25.4.4 流的处理 1028
25.5 调用存储过程 1030
25.6 错误处理 1031
25.6.1 SQLException 1031
25.6.2 SQLException链锁 1034
25.6.3 SQL警告 1036
25.7 浏览数据库 1039
25.7.1 显示数据库中的数据 1042
25.7.2 使用JTree组件 1043
25.7.3 获取数据库元数据 1046
25.7.4 使用树监听器 1053
25.8 本章小结 1058
25.9 练习题 1058
附录A Java保留关键字 1059
附录B 计算机运算基础知识 1060