译者序
前言
第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