第1章 多线程 1
1.1 什么是线程 2
1.2 中断线程 11
1.3 线程状态 13
1.3.1 新生线程 13
1.3.2 可运行线程 13
1.3.3 被阻塞线程 14
1.3.4 死线程 15
1.4 线程属性 15
1.4.1 线程优先级 15
1.4.2 守护线程 16
1.4.3 线程组 16
1.4.4 未捕获异常处理器 18
1.5 同步 19
1.5.1 竞争条件的一个例子 19
1.5.2 详解竞争条件 22
1.5.3 锁对象 23
1.5.4 条件对象 25
1.5.5 Synchronized关键字 30
1.5.6 同步块 35
1.5.7 Volatile域 35
1.5.8 死锁 36
1.5.9 公平 38
1.5.10 锁测试和超时 38
1.5.11 读/写锁 39
1.5.12 为什么要弃用stop和suspend方法 40
1.6 阻塞队列 41
1.7 线程安全的集合 46
1.7.1 高效队列和散列表 46
1.7.2 写数组的拷贝 47
1.7.3 旧的线程安全的集合 47
1.8 Callable和Future 48
1.9 执行器 51
1.9.1 线程池 51
1.9.2 预定执行 55
1.9.3 控制线程组 55
1.10 同步器 56
1.10.1 障栅 57
1.10.2 倒计时门栓 57
1.10.3 交换器 57
1.10.4 同步队列 58
1.10.5 信号量 58
1.11 线程和Swing 63
1.11.1 “单一线程”规则 64
1.11.2 Swing工作器 68
第2章 集合 74
2.1 集合接口 74
2.1.1 将集合接口和实现分离 74
2.1.2 Java类库中的集合接口和迭代器接口 76
2.2 具体的集合 80
2.2.1 链表 81
2.2.2 数组列表 88
2.2.3 散列集 88
2.2.4 树集 90
2.2.5 优先级队列 95
2.2.6 映射表 96
2.2.7 专用的集和映射表类 99
2.3 集合框架 103
2.3.1 视图和包装器 105
2.3.2 批操作 110
2.3.3 集合与数组的转换 110
2.3.4 框架的扩展 111
2.4 算法 113
2.4.1 排序与混排 114
2.4.2 二分查找 116
2.4.3 简单算法 117
2.4.4 编写你自己的算法 118
2.5 遗留下来的集合 119
2.5.1 Hashtable类 119
2.5.2 枚举 120
2.5.3 属性集 120
2.5.4 栈 121
2.5.5 位集 121
第3章 网络 125
3.1 连接到服务器 125
3.2 实现服务器 128
3.3 发送E-Mail 134
3.4 建立URL连接 137
3.4.1 URL和URI 137
3.4.2 使用URLConnection获取信息 139
3.4.3 提交表单数据 146
3.5 高级套接字编程 153
3.5.1 套接字超时 153
3.5.2 可中断套接字 154
3.5.3 半关闭 158
3.5.4 因特网地址 158
第4章 数据库编程 162
4.1 JDBC的设计 162
4.1.1 JDBC驱动程序类型 163
4.1.2 JDBC的典型用法 164
4.2 结构化查询语言 165
4.3 安装JDBC 168
4.4 JDBC编程的基本概念 169
4.4.1 数据库URL 169
4.4.2 建立连接 169
4.4.3 执行SQL命令 173
4.4.4 高级SQL类型 175
4.4.5 管理连接、语句和结果集 176
4.4.6 组装数据库 177
4.5 执行查询操作 180
4.6 可滚动和可更新的结果集 187
4.6.1 可滚动的结果集 188
4.6.2 可更新的结果集 190
4.7 元数据 193
4.8 行集 200
4.9 事务 208
4.9.1 保存点 209
4.9.2 批量更新 209
4.10 高级连接管理 211
4.11 LDAP概述 212
4.11.1 配置LDAP服务器 213
4.11.2 访问LDAP目录信息 215
第5章 分布式对象 225
5.1 客户与服务器的角色 225
5.2 远程方法调用 227
5.2.1 存根与参数编组 227
5.2.2 动态类加载 229
5.3 配置远程方法调用 229
5.3.1 接口与实现 229
5.3.2 存根类的生成 231
5.3.3 定位服务器对象 231
5.3.4 客户端 235
5.3.5 部署的准备工作 239
5.3.6 部署程序 241
5.4 远程方法中的参数传递 242
5.4.1 传递非远程对象 242
5.4.2 传递远程对象 251
5.4.3 远程对象与equals和hashCode方法 253
5.4.4 克隆远程对象 253
5.5 服务器对象激活 254
5.6 Java IDL与CORBA 258
5.6.1 接口定义语言 259
5.6.2 一个CORBA的例子 262
5.6.3 实现CORBA服务器 269
5.7 远程方法调用与SOAP 274
第6章 高级Swing 279
6.1 列表 279
6.1.1 JList构件 279
6.1.2 列表模式 284
6.1.3 插入和移除值 288
6.1.4 值的绘制 289
6.2 树 293
6.2.1 简单的树 294
6.2.2 结点枚举 305
6.2.3 绘制结点 306
6.2.4 监听树事件 312
6.2.5 定制树模型 316
6.3 表格 323
6.3.1 简单表格 323
6.3.2 表格模型 326
6.3.3 排序过滤器 333
6.3.4 单元格的绘制和编辑 338
6.3.5 对行和列的操作 349
6.3.6 选择行、列和单元格 350
6.4 样式文本构件 356
6.5 进度指示器 361
6.5.1 进度条 361
6.5.2 进度监视器 365
6.5.3 监视输入流的进度 369
6.6 构件组织器 373
6.6.1 分割面板 373
6.6.2 选项卡面板 377
6.6.3 桌面面板和内部框体 381
6.6.4 级联与平铺 383
6.6.5 否决属性设置 385
第7章 高级AWT 396
7.1 绘图操作流程 396
7.2 形状 398
7.3 区域 409
7.4 笔划 412
7.5 着色 418
7.6 坐标变换 423
7.7 剪切 430
7.8 透明与组合 433
7.9 绘图提示 440
7.10 图像的读取器和写入器 444
7.10.1 获得图像文件类型的读取器和写入器 445
7.10.2 读取和写入带有多个图像的文件 446
7.11 图像处理 454
7.11.1 访问图像数据 454
7.11.2 图像过滤 460
7.12 打印 467
7.12.1 图形打印 467
7.12.2 打印多页文件 474
7.12.3 打印预览 475
7.12.4 打印服务程序 483
7.12.5 流打印服务程序 488
7.12.6 打印属性 492
7.13 剪贴板 498
7.13.1 数据传递的类和接口 498
7.13.2 传递文本 499
7.13.3 可传递的接口和数据风格 502
7.13.4 构建一个可传递的图像 504
7.13.5 使用本地剪贴板来传递对象引用 509
7.13.6 通过系统剪贴板传递Java对象 514
7.14 拖放操作 517
7.14.1 放置目标 519
7.14.2 拖曳源 526
7.14.3 Swing对数据传递的支持 531
第8章 JavaBean构件 534
8.1 为何是Bean 534
8.2 编写Bean的过程 535
8.3 使用Bean构造应用程序 537
8.3.1 将Bean打包成JAR文件 538
8.3.2 在开发环境中组合Bean 539
8.4 Bean属性与事件的命名模式 542
8.5 Bean属性的类型 544
8.5.1 简单属性 545
8.5.2 索引属性 545
8.5.3 绑定属性 546
8.5.4 约束属性 547
8.6 BeanInfo类 552
8.7 属性编辑器 556
8.8 定制器 573
8.9 JavaBean持久化 580
8.9.1 JavaBean持久化可用于任何数据 583
8.9.2 一个JavaBean持久化的完整示例 588
第9章 安全 599
9.1 类加载器 599
9.1.1 将类加载器作为名字空间 601
9.1.2 编写你自己的类加载器 601
9.2 字节码校验 605
9.3 安全管理器与访问权限 609
9.3.1 Java2平台安全性 610
9.3.2 安全策略文件 613
9.3.3 定制权限 619
9.3.4 实现权限类 619
9.3.5 定制安全管理器 624
9.3.6 用户认证 630
9.3.7 JAAS登录模块 634
9.4 数字签名 641
9.4.1 消息摘要 642
9.4.2 消息签名 646
9.4.3 消息认证 652
9.4.4 X.509证书格式 654
9.4.5 证书的生成 654
9.4.6 证书签名 657
9.5 代码签名 663
9.5.1 JAR文件签名 663
9.5.2 软件开发者证书 666
9.6 加密 667
9.6.1 对称密码 667
9.6.2 密码流 672
9.6.3 公共密钥密码 673
第10章 国际化 678
10.1 Locale 678
10.2 数字格式 682
10.3 日期和时间 687
10.4 排序 692
10.5 消息格式化 698
10.6 文本文件和字符集 701
10.7 资源包 702
10.7.1 定位资源包 702
10.7.2 属性文件 703
10.7.3 包类 704
10.8 一个完整的例子 705
第11章 本地方法 717
11.1 用Java编程语言调用C函数 718
11.2 数值参数与返回值 722
11.3 字符串参数 723
11.4 访问域 727
11.4.1 访问实例域 727
11.4.2 访问静态域 731
11.5 编码签名 731
11.6 调用Java方法 732
11.6.1 非静态方法 732
11.6.2 静态方法 733
11.6.3 构造器 734
11.6.4 替代方法调用 734
11.7 访问数组元素 738
11.8 错误处理 740
11.9 使用调用API 744
11.10 完整的示例:访问Windows注册表 747
11.10.1 Windows注册表概述 747
11.10.2 访问注册表的Java平台接口 748
11.10.3 以本地方法方式实现注册表访问函数 748
第12章 XML 760
12.1 XML概述 760
12.2 解析XML文档 764
12.3 验证XML文档 773
12.3.1 文档类型定义 774
12.3.2 XML Schema 779
12.3.3 实用示例 781
12.4 使用XPath来定位信息 792
12.5 使用名字空间 797
12.6 使用SAX解析器 799
12.7 生成XML文档 802
12.8 XSL转换 809
第13章 注释 817
13.1 对程序添加元数据 817
13.2 一个示例:注释事件处理器 818
13.3 注释语法 822
13.4 标准注释 825
13.4.1 正规注释 826
13.4.2 元注释 826
13.5 用于源码级注释处理的apt工具 828
13.6 字节码工程 833