本书是经典的《Java核心技术,卷Ⅱ:高级特性》的最新修订版,涵盖了Java SE 6平台的高级用户界面程序设计和企业特性。与第Ⅰ卷(涵盖了核心的语言和类库特性)一样,本卷已经更新到了Java SE 6,并且对新内容都作了重点标注。书中所有的示例程序都进行了详细的设计,用来演示最新的编程技术,并展示针对专业开发者在现实中所碰到的典型问题的最佳解决方案。
本书包含有关StAX API、JDBC 4、编译器API、脚本框架、闪屏和托盘API以及其他许多Java SE 6改进特性的新章节。本书聚焦于Java语言中更高级的特性,包括下列内容:
关于Java基础知识的讨论,包括接口与内部类、使用Swing的GUI编程、异常处理、泛型、集合和并发,读者可以查阅《Java核心技术,卷Ⅰ:基础知识(原书第8版)》(ISBN: 978-7-111-23950-5)。
《Java核心技术》的第8版又推出了,它已经在广大Java程序员和爱好者们当中产生了巨大的影响力。该书覆盖面广,几乎囊括了Java 2标准版的所有方面。其以接近实战的实例来展开内容的书写方式更是容易让读者理解和接受Java的精髓。
Java已经受到越来越多的程序员的青睐,但是Java语言包罗万象,而且其自身发展的速度更是惊人,我们在Sun的网站上几乎每个月都会看到有新的基于Java的规范出台。JDK 6.0使得Java又呈现出了新的面貌,其新添加的特性更好地能够应对Java在构建企业应用时所需要面对的挑战。因此,《Java核心技术》第8版在第7版的基础上,对JDK 6.0中的新特性进行了重点介绍,对原有部分章节进行了更新和调整,删除了一些过时的内容,并新增加了一些章节,而且对第7版的很多示例程序进行了调整,以此来使得程序员们能够更加透彻地理解和熟练地掌握这些新特性。
卷Ⅱ面向的是已经熟读并掌握了卷Ⅰ内容的读者,或者是已经对Java语言的基本特性相当熟悉的读者。卷Ⅱ的内容包含了流与文件、XML、网络、数据库编程、国际化、高级Swing、高级AWT、JavaBeans、安全、分布式对象、脚本编写、编译与注解处理,以及本地方法等内容,把读者引入了Java世界的更深处。
我们在翻译本书的过程中力求忠于原著。对于本书中出现的大量的专业术语尽量遵循标准的译法,并在有可能引起歧义之处注上了英文原文,以方便读者的对照理解。
全书的翻译由陈昊鹏、王浩、姚建平和龚斌合作完成,楼钢、李伟、郭嘉和方小丽对全书的翻译也做了大量的工作。由于译者水平有限,书中出现错误与不妥之处在所难免,恳请读者批评指正。
封面图
目录
- 译者序
- 前言
- 第1章 流与文件1
- 1.1 流1
- 1.1.1 读写字节1
- 1.1.2 完整的流家族3
- 1.1.3 组合流过滤器7
- 1.2 文本输入与输出10
- 1.2.1 如何写出文本输出10
- 1.2.2 如何读入文本输入12
- 1.2.3 以文本格式存储对象13
- 1.2.4 字符集17
- 1.3 读写二进制数据20
- 1.4 ZIP文档28
- 1.5 对象流与序列化35
- 1.5.1 理解对象序列化的文件格式40
- 1.5.2 修改默认的序列化机制45
- 1.5.3 序列化单例和类型安全的枚举47
- 1.5.4 版本管理48
- 1.5.5 为克隆使用序列化50
- 1.6 文件管理52
- 1.7 新I/O57
- 1.7.1 内存映射文件58
- 1.7.2 缓冲区数据结构63
- 1.7.3 文件加锁机制65
- 1.8 正则表达式67
- 第2章 XML76
- 2.1 XML概述76
- 2.2 解析XML文档80
- 2.3 验证XML文档91
- 2.3.1 文档类型定义92
- 2.3.2 XML Schema98
- 2.3.3 实用示例100
- 2.4 使用XPath来定位信息113
- 2.5 使用命名空间118
- 2.6 流机制解析器120
- 2.6.1 使用SAX解析器121
- 2.6.2 使用StAX解析器125
- 2.7 生成XML文档128
- 2.8 XSL转换138
- 第3章 网络148
- 3.1 连接到服务器148
- 3.1.1 套接字超时152
- 3.1.2 因特网地址153
- 3.2 实现服务器154
- 3.2.1 为多个客户端服务157
- 3.2.2 半关闭160
- 3.3 可中断套接字161
- 3.4 发送E-mail167
- 3.5 建立URL连接172
- 3.5.1 URL和URI172
- 3.5.2 使用URLConnection获取信息173
- 3.5.3 提交表单数据182
- 第4章 数据库编程190
- 4.1 JDBC的设计190
- 4.1.1 JDBC驱动程序类型191
- 4.1.2 JDBC的典型用法192
- 4.2 结构化查询语言193
- 4.3 JDBC配置198
- 4.3.1 数据库URL198
- 4.3.2 驱动程序JAR文件199
- 4.3.3 启动数据库199
- 4.3.4 注册驱动器类200
- 4.3.5 连接到数据库200
- 4.4 执行SQL语句203
- 4.4.1 管理连接、语句和结果集205
- 4.4.2 分析SQL异常206
- 4.4.3 组装数据库208
- 4.5 执行查询操作211
- 4.5.1 预备语句212
- 4.5.2 读写LOB219
- 4.5.3 SQL转义220
- 4.5.4 多结果集222
- 4.5.5 获取自动生成键222
- 4.6 可滚动和可更新的结果集223
- 4.6.1 可滚动的结果集223
- 4.6.2 可更新的结果集225
- 4.7 行集228
- 4.8 元数据231
- 4.9 事务240
- 4.9.1 保存点241
- 4.9.2 批量更新241
- 4.9.3 高级SQL类型243
- 4.10 Web与企业应用中的连接管理244
- 4.11 LDAP介绍245
- 4.11.1 配置LDAP服务器247
- 4.11.2 访问LDAP目录信息249
- 第5章 国际化260
- 5.1 Locales260
- 5.2 数字格式265
- 5.3 日期和时间271
- 5.4 排序277
- 5.4.1 排序强度278
- 5.4.2 分解279
- 5.5 消息格式化284
- 5.6 文本文件和字符集287
- 5.7 资源包288
- 5.7.1 定位资源包288
- 5.7.2 属性文件289
- 5.7.3 包类290
- 5.8 一个完整的例子291
- 第6章 高级Swing305
- 6.1 列表305
- 6.1.1 JList构件305
- 6.1.2 列表模式310
- 6.1.3 插入和移除值315
- 6.1.4 值的绘制316
- 6.2 表格321
- 6.2.1 简单表格321
- 6.2.2 表格模型324
- 6.2.3 对行和列的操作328
- 6.2.4 单元格的绘制和编辑340
- 6.3 树351
- 6.3.1 简单的树352
- 6.3.2 节点枚举365
- 6.3.3 绘制节点367
- 6.3.4 监听树事件369
- 6.3.5 定制树模型375
- 6.4 文本构件383
- 6.4.1 文本构件中的修改跟踪384
- 6.4.2 格式化的输入框387
- 6.4.3 JSpinner构件401
- 6.4.4 用JEditorPane显示HTML408
- 6.5 进度指示器414
- 6.5.1 进度条414
- 6.5.2 进度监视器417
- 6.5.3 监视输入流的进度421
- 6.6 构件组织器425
- 6.6.1 分割面板425
- 6.6.2 选项卡面板429
- 6.6.3 桌面面板和内部框体435
- 6.6.4 级联与平铺437
- 6.6.5 否决属性设置440
- 第7章 高级AWT451
- 7.1 绘图操作流程451
- 7.2 形状453
- 7.3 区域467
- 7.4 笔划468
- 7.5 着色475
- 7.6 坐标变换476
- 7.7 剪切481
- 7.8 透明与组合483
- 7.9 绘图提示490
- 7.10 图像的读取器和写入器496
- 7.10.1 获得图像文件类型的读取器
- 和写入器497
- 7.10.2 读取和写入带有多个图像的文件498
- 7.11 图像处理506
- 7.11.1 构建光栅图像506
- 7.11.2 图像过滤512
- 7.12 打印519
- 7.12.1 图形打印520
- 7.12.2 打印多页文件528
- 7.12.3 打印预览529
- 7.12.4 打印服务程序537
- 7.12.5 流打印服务程序540
- 7.12.6 打印属性541
- 7.13 剪贴板547
- 7.13.1 数据传递的类和接口548
- 7.13.2 传递文本548
- 7.13.3 可传递的接口和数据风格552
- 7.13.4 构建一个可传递的图像554
- 7.13.5 通过系统剪贴板传递Java对象558
- 7.13.6 使用本地剪贴板来传递对象引用562
- 7.14 拖放操作562
- 7.14.1 Swing对数据传递的支持563
- 7.14.2 拖曳源567
- 7.14.3 放置目标569
- 7.15 平台集成576
- 7.15.1 闪屏576
- 7.15.2 启动桌面应用程序580
- 7.15.3 系统托盘585
- 第8章 JavaBean构件590
- 8.1 为何使用Bean590
- 8.2 编写Bean的过程591
- 8.3 使用Bean构造应用程序594
- 8.3.1 将Bean打包成JAR文件594
- 8.3.2 在开发环境中组合Bean595
- 8.4 Bean属性与事件的命名模式600
- 8.5 Bean属性的类型602
- 8.5.1 简单属性603
- 8.5.2 索引属性603
- 8.5.3 绑定属性603
- 8.5.4 约束属性605
- 8.6 BeanInfo类611
- 8.7 属性编辑器614
- 8.8 定制器623
- 8.9 JavaBean持久化631
- 8.9.1 JavaBean持久化可用于任何数据634
- 8.9.2 一个JavaBean持久化的完整示例640
- 第9章 安全650
- 9.1 类加载器650
- 9.1.1 类加载器的层次结构651
- 9.1.2 将类加载器作为命名空间653
- 9.1.3 编写你自己的类加载器653
- 9.2 字节码校验659
- 9.3 安全管理器与访问权限663
- 9.3.1 Java平台安全性664
- 9.3.2 安全策略文件667
- 9.3.3 定制权限672
- 9.3.4 实现权限类674
- 9.4 用户认证679
- 9.5 数字签名692
- 9.5.1 消息摘要693
- 9.5.2 消息签名698
- 9.5.3 X.509证书格式700
- 9.5.4 校验签名701
- 9.5.5 认证问题703
- 9.5.6 证书签名705
- 9.5.7 证书请求706
- 9.6 代码签名707
- 9.6.1 JAR文件签名707
- 9.6.2 软件开发者证书709
- 9.7 加密713
- 9.7.1 对称密码713
- 9.7.2 密钥生成714
- 9.7.3 密码流719
- 9.7.4 公共密钥密码720
- 第10章 分布式对象724
- 10.1 客户与服务器的角色724
- 10.2 远程方法调用726
- 10.3 配置远程方法调用728
- 10.3.1 接口与实现728
- 10.3.2 RMI注册表729
- 10.3.3 部署程序733
- 10.3.4 记录RMI活动735
- 10.4 远程方法中的参数和返回值736
- 10.4.1 传递远程对象736
- 10.4.2 传递非远程对象736
- 10.4.3 动态类加载739
- 10.4.4 具有多重接口的远程引用743
- 10.4.5 远程对象与equals、hashCode和
- clone方法743
- 10.5 远程对象激活744
- 10.6 Web Services与JAX-WS749
- 10.6.1 使用JAX-WS749
- 10.6.2 Web服务的客户端752
- 10.6.3 Amazon的E-Commerce服务754
- 第11章 脚本、编译与注解处理760
- 11.1 Java平台的脚本760
- 11.1.1 获取脚本引擎760
- 11.1.2 脚本赋值与绑定761
- 11.1.3 重定向输入和输出763
- 11.1.4 调用脚本的函数和方法764
- 11.1.5 编译脚本765
- 11.1.6 一个示例:用脚本处理GUI事件766
- 11.2 编译器API770
- 11.2.1 编译便捷之法770
- 11.2.2 使用编译工具771
- 11.2.3 一个示例:动态Java代码生成775
- 11.3 使用注解779
- 11.4 注解语法785
- 11.5 标准注解788
- 11.5.1 用于编译的注解789
- 11.5.2 用于管理资源的注解790
- 11.5.3 元注解790
- 11.6 源码级注解处理792
- 11.7 字节码工程798
- 第12章 本地方法805
- 12.1 从Java程序中调用C函数805
- 12.2 数值参数与返回值810
- 12.3 字符串参数812
- 12.4 访问域817
- 12.4.1 访问实例域817
- 12.4.2 访问静态域820
- 12.5 编码签名821
- 12.6 调用Java方法822
- 12.6.1 实例方法822
- 12.6.2 静态方法823
- 12.6.3 构造器824
- 12.6.4 替代方法调用824
- 12.7 访问数组元素828
- 12.8 错误处理831
- 12.9 使用调用API835
- 12.10 完整的示例:访问Windows注册表839
- 12.10.1 Windows注册表概述840
- 12.10.2 访问注册表的Java平台接口841
- 12.10.3 以本地方法方式实现注册表
- 访问函数841