Java经典实例pdf下载pdf下载

Java经典实例百度网盘pdf下载

作者:
简介:本篇主要提供Java经典实例pdf下载
出版社:中国电力出版社
出版时间:2016-08
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

适读人群 :《Java经典实例(第三版)》广大Java程序员。
  本书对于Java程序员来说是理想的“第二本书”,300个Java应用经典技巧,涵盖了广泛的Java主题。

内容简介

  《Java经典实例(第三版)》 从lambda表达式、JavaFX 8,到网络编程和支持移动设备等方面,Java 8都有许多更新。包含了数百个经过实践验证的技巧,内容涵盖了广泛的Java主题,可帮助你快速进入编程状态。你可以从中学到一切有用的技术,包括调试、数据结构、GUI开发和函数编程。
  的每个技巧既给出了代码部分,也给出了运行结果,还有对它们的讨论。你可以免费使用这些代码。如果你对Java基础知识比较熟悉,学习将使你进一步掌握语言方面的通用知识和Java 8 中主要API方面的特殊知识。
  的主题包括:
  1.用于编译、运行和调试的方法。
  对文本的处理、比较和重新安排。
  2.用于字符串匹配和模式匹配的正则表达式。
  ?处理数字、日期和时间。
  3.使用集合、数组和其他类型实现数据的结构化。
  4.面向对象技术和函数编程技术。
  5.目录和文件系统运算符。
  6.使用图形、视频和音频。
  7.GUI开发,包括JavaFX和处理器。
  8.客户端和服务器端的网络编程。
  9.数据库访问,使用JPA、Hibernate和JDBC。
  10.处理JSON和用于数据存储的XML。
  11.多线程和并发机制。

作者简介

  Ian F.Darwin,已在计算机工业界工作了三十年。除了编程和提供咨询,Ian还为Learning Tree International公司讲授UNIX、C和Java,这是一家世界上zui大的培训公司之一。他还编写了《Checking C Programs with Lint》(O'Reilly 公司出版)一书,以及超过100篇有关C和UNIX方面的文章。

精彩书评

  业界评论
  “ O’Reilly Radar博客有口皆碑。”
  ——Wired

  “ O’Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”
  ——Business 2.0

  “ O’Reilly Conference是聚集关键思想领袖的绝对典范。”
  ——CRN

  “一本O’Reilly的书就代表一个有用、有前途、需要学习的主题。”
  ——Irish Times

  “ Tim是位特立独行的商人,他不光放眼于zui长远、zui广阔的视野并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”
  ——Linux Journal

目录

前言. 1
第1章 入门: 编译、 运行和调试Java程序. 19
1.0 引言 .19
1.1 编译和运行Java程序: JDK方式20
1.2 用带语法高亮显示的编辑器编辑和编译程序21
1.3 使用IDE编译、 运行和测试程序22
1.4 有效使用CLASSPATH.30
1.5 下载和使用代码示例 .32
1.6 使用 Ant工具自动编译 37
1.7 使用Apache Maven自动设置依赖关系、 编译、 测试和部署.40
1.8 使用Gradle自动设置依赖关系、 编译、 测试和部署 .45
1.9 处理过期警告 46
1.10 没有#ifdef的条件编译 .48
1.11 使用断言机制维护程序的正确性.50
1.12 使用JDB调试 .51
1.13 用单元测试避免调试 .53
1.14 用持续集成维护代码 .56
1.15 获取可读回溯 60
1.16 更多的Java源代码: 程序、 框架和库61
第2章 与运行环境交互 65
2.0 引言 .65
2.1 获得环境变量 65
2.2 从系统属性获得信息 .67
2.3 了解当前的JDK版本68
2.4 编写操作系统相关的代码69
2.5 使用扩展包或其他API包.72
2.6 解析命令行参数 73
第3章 字符串 80
3.0 引言 .80
3.1 用Substring分解字符串 .82
3.2 将字符串分解成词.83
3.3 用StringBuilder连接字符串 .87
3.4 处理单个字符串 89
3.5字符串对齐 .91
3.6 Unicode字符和String之间的转换 93
3.7 按单词或字符颠倒字符串96
3.8 扩展和压缩Tab 97
3.9 控制字母大小写 101
3.10 缩排文本文档 102
3.11 输入非打印字符 103
3.12 删除字符串的尾部空格 .104
3.13 解析用逗号分隔的数据 .106
3.14 程序: 一个简单的文本格式化工具. 110
3.15 程序: Soundex算法. 112
第4章 正则表达式的模式匹配 116
4.0 引言 . 116
4.1 正则表达式语法 118
4.2 在Java中使用正则表达式:测试模式 124
4.3 找到匹配的文本 128
4.4 替换匹配的文本 130
4.5 打印匹配的所有字符串 .132
4.6 打印包含一个模式的行 .134
4.7 在正则表达式中控制大小写135
4.8 匹配“ 重音符” 或复合字符136
4.9 在文本中匹配换行符 .138
4.10 程序:Apache日志文件解析 .139
4.11 程序: 数据挖掘.141
4.12 程序: 完整的Grep.143
第5章 数字 . 149
5.0 引言 .149
5.1 检查字符串是否是有效数字151
5.2 用小数据类型储存大数据类型的数字 .153
5.3 数字与对象的相互转换 .154
5.4 直接使用分数而不用浮点数155
5.5 保证浮点数的准确.157
5.6 比较浮点数 159
5.7 舍入浮点数 160
5.8 格式化数字 161
5.9 二进制、 八进制、 十进制和十六进制之间的转换 164
5.10 对整数序列的操作.165
5.11 使用罗马数字 166
5.12 复数的正确格式化.170
5.13 生成随机数 172
5.14 计算三角函数 174
5.15 取对数 .175
5.16 矩阵乘法176
5.17 使用复数178
5.18 处理非常大的数字180
5.19 程序: TempConverter182
5.20 程序: 数字回文.184
第6章 日期和时间——新的API 187
6.0 引言 .187
6.1 查看当天日期 190
6.2 日期和时间的格式化 .191
6.3 日期/时间、 YMDHMS和 纪元秒( Epoch Seconds) 之间的转换 193
6.4 将字符串解析为日期 .194
6.5 两个日期之间的差.195
6.6 日期或日历的加减.196
6.7 与传统日期和日历类的接口197
第7章 结构化数据 . 199
7.0 引言 .199
7.1 使用数组200
7.2 调整数组长度 201
7.3 集合框架203
7.4 动态数组列表 204
7.5 使用泛型集合 207
7.6 使用泛型避免强制类型转换208
7.7 迭代器的使用方式. 211
7.8 使用Set避免元素重复存储 213
7.9 使用迭代器或枚举.215
7.10 链表结构216
7.11 使用Hashtable和HashMap进行映射.219
7.12 Properties类和Preferences类221
7.13 对集合排序 225
7.14 避免频繁排序 229
7.15 在集合中查找对象.231
7.16 将集合转换为数组.233
7.17 自定义迭代器 234
7.18 堆栈 .237
7.19 多维结构240
7.20 程序:运行时间比较 242
第8章 面向对象技术 245
8.0 引言 .245
8.1 使用toString()格式化对象并输出 247
8.2 覆盖equals()和hashCode()方法249
8.3 使用关闭钩子清理程序 .254
8.4 使用内部类 256
8.5 通过接口提供回调.257
8.6 多态性/抽象方法 .260
8.7 传递数值262
8.8 使用类型安全的枚举 .265
8.9 Singleton模式 269
8.10 自定义异常 271
8.11 使用依赖注入 272
8.12 程序: 绘图仪 275
第9章 函数式编程技术: 函数接口、 流、 并行集合 279
9.0 引言 .279
9.1 使用lambda/Closure替代内部类 281
9.2 使用lambda预定义接口 .284
9.3 使用流 .287
9.4 使用并行流与集合提高吞吐量 288
9.5 创建自己的函数式接口 .289
9.6 函数引用292
9.7 Java Mixins: 方法混合 .296
第10章 输入与输出 . 298
10.0 引言 .298
10.1 从标准输入设备读取数据301
10.2 从控制台或控制终端读取数据, 隐藏读取密码 303
10.3 向标准输出或标准错误流写数据 305
10.4 使用 Formatter 和 printf输出 .307
10.5 使用Stream Tokenizer的扫描输入 .310
10.6 使用Scanner类扫描输入 315
10.7 使用语法结构扫描输入 .318
10.8 按文件名打开文件.319
10.9 复制文件320
10.10 把文件读入一个字符串 .326
10.11 重新分配标准流.327
10.12 复制一个流 328
10.13 读/写不同的字符集331
10.14 行结束符332
10.15 平台相关的文件编码 .332
10.16 阅读“ 连续” 行.334
10.17 读/写二进制数据338
10.18 在文件中定位 338
10.19 处理C程序写的数据流.340
10.20 存储和还原Java对象342
10.21 防止ClassCastExceptions异常345
10.22 读写JRA或Zip文档 347
10.23 利用get Resource()和getResourceAsStream()获得文件 .350
10.24 读写压缩文件 352
10.25 了解串行和并行端口的通信API353
10.26 将用户数据保存到磁盘 .357
10.27 程序: 将文本输出为PostScript格式361
第11章 目录和文件系统操作 364
11.0 引言 .364
11.1 获取文件信息 364
11.2 创建一个文件 367
11.3 重命名一个文件.368
11.4 删除一个文件 369
11.5 创建临时文件 370
11.6 改变文件属性 372
11.7 列出目录内容 373
11.8 获取根目录 375
11.9 创建新的目录 377
11.10 使用路径而不是文件 .377
11.11 使用FileWatcher 服务得到文件变化的通知. 379
11.12 程序: Find.381
第12章 媒体: 图形、 音频、 视频. 384
12.0 引言 .384
12.1 使用Graphics对象画图 385
12.2 无需编写主函数显示图形组件 386
12.3 绘制文本387
12.4 在组件中央绘制文本 .388
12.5 绘制阴影389
12.6 绘制2D( 二维) 文本 391
12.7 使用应用程序字体绘制文本 394
12.8 绘制图像396
12.9 使用 javax.imageio读写图像399
12.10 播放音频/语音文件401
12.11 播放视频文件.402
12.12 在Java中打印 407
12.13 程序: PlotterAWT .410
12.14 程序: Grapher .412
第13章 网络客户端 . 416
13.0 引言 .416
13.1 访问服务器 418
13.2 查找和报告网络地址 .419
13.3 处理网络错误 421
13.4 读写文本数据 422
13.5 读写二进制数据.424
13.6 读写串行化数据.427
13.7 UDP数据报 428
13.8 程序: TFTP的UDP客户端 431
13.9 URI、 URL, 还是URN? 435
13.10 轻量级Web服务客户端 436
13.11 SOAP Web服务客户端 .438
13.12 程序: Telnet客户端.442
13.13 程序: 聊天客户端 .444
13.14 程序: 简单的HTTP链接检查器 448
第14章 图形用户界面. 450
14.0 引言 .450
14.1 显示GUI( 图形用户界面) 组件 .451
14.2 在事件调度线程上运行GUI.453
14.3 设计一个窗口布局.454
14.4 选项卡视图 457
14.5 事件处理: 使按钮工作 .458
14.6 使用匿名内部类进行事件处理 460
14.7 使用Lambdas的事件处理.461
14.8 用“ 窗口关闭” 来终止程序 462
14.9 对话框 .467
14.10 捕捉和格式化GUI异常 469
14.11 在窗口上打印.472
14.12 使用JSpinner选择一个值 .478
14.13 用JFileChoose选择一个文件479
14.14 选择一种颜色 481
14.15 用HTML格式化jcomponents484
14.16 将主窗口居中显示 .485
14.17 改变Swing程序的外观和感觉488
14.18 改进MAC OS X下的Swing GUI 492
14.19 使用JavaFX构建GUI应用程序.494
14.20 程序: 定制字体选择器 .496
14.21 程序: 定制AWT/Swing布局管理器 500
第15章 国际化和本地化 508
15.0 引言 .508
15.1 用I18N资源创建一个按钮 .509
15.2 列出可用的语言环境 . 511
15.3 使用I18N资源创建菜单 .512
15.4 编写国际化的方便子程序512
15.5 使用I18N资源创建一个对话框514
15.6 创建一个资源包.516
15.7 从代码中提取字符串 .517
15.8 使用特定的语言环境 .518
15.9 设置默认语言环境.519
15.10 使用MessageFormat格式化消息 520
15.11 程序: MenuIntl 522
15.12 程序: BusCard .524
第16章 Java服务器端 . 528
16.0 引言 .528
16.1 打开服务器套接字.529
16.2 返回一个响应( 字符串或二进制) .531
16.3 通过网络连接返回对象信息 534
16.4 处理多个客户端.535
16.5 为HTTP协议服务.540
16.6 用SSL和JSSE保护Web服务器 .542
16.7 网络日志545
16.8 使用SLF4J进行网络日志记录 .546
16.9 使用log4j进行网络日志记录 .548
16.10 使用java.util.logging进行网络日志记录 551
16.11 查找网络接口.553
16.12 程序: 一个Java聊天服务器.554
第17章 Java和电子邮箱 560
17.0 引言 .560
17.1 发送电子邮件: 浏览器版本 561
17.2 发送电子邮件: 真实的 .564
17.3 启用服务器程序的邮件发送 567
17.4 发送MIME邮件 .572
17.5 提供邮件设置 575
17.6 阅读电子邮件 576
17.7 程序: MailReaderBean580
17.8 程序: MailClient.584
第18章 数据库访问 . 594
18.0 引言 594
18.1 用JPA或Hibernate轻松访问数据库 596
18.2 JDBC设置和连接.601
18.3 连接JDBC数据库.604
18.4 发送一个JDBC查询并获取结果 607
18.5 使用JDBC准备好的语句610
18.6 在JDBC中使用存储过程614
18.7 使用ResultSet修改数据614
18.8 在RowSet中存储615
18.9 使用SQL更新数据 .617
18.10 查找JDBC元数据.619
18.11 程序: SQLRunner .623
第19章 处理JSON数据 . 636
19.0 引言 .636
19.1 直接生成 JSON638
19.2 使用Jackson解析和编写JSON .639
19.3 用org.json解析和编写JSON 640
第20章 处理XML 643
20.0 引言 .643
20.1 用JAXB在对象与XML之间转换 .646
20.2 使用序列化实现对象与XML之间的转换 648
20.3 通过XSLT转换XML 649
20.4 用SAX解析XML652
20.5 用DOM解析XML.654
20.6 用XPath查找XML元素 658
20.7 用Schema或DTD验证结构 659
20.8 用DOM和XML转换器生成自己的XML .662
20.9 程序xml2mif 664
第21章 包和打包 667
21.0 引言 .667
21.1 创建一个封装包.668
21.2 用Javadoc为类写文档 669
21.3 超出Javadoc: 注解/元数据 .673
21.4 用jar归档 .675
21.5 从一个JAR运行一个程序 676
21.6 将一个类作为JavaBean678
21.7 将Bean放入一个JAR中681
21.8 打包一个Servlet到WAR文件 .683
21.9 编写一次, 随处安装 .684
21.10 编写一次, 在Mac OS X上进行安装 .684
21.11 Java Web Start 686
21.12 签名你的JAR文件692
第22章 Java线程 694
22.0 引言 .694
22.1 在不同线程中运行代码 .696
22.2 用动画显示运动图像 .700
22.3 停止一个线程 704
22.4 交会和超时 707
22.5 用synchronized关键字实现线程同步 .708
22.6 使用锁简化同步.714
22.7 用wait()和notifyAll()同步线程 718
22.8 使用队列接口简化生产者/消费者模式 723
22.9 用Fork/Join优化并行处理725
22.10 在编辑器的后台保存 .729
22.11 程序: 多线程网络服务器730
22.12 使用Concurrency Utilities简化服务器 .736
第23章 反射或“ 命名类的类” 739
23.0 引言 .739
23.1 获取类描述符 740
23.2 查找并使用方法和域 .741
23.3 通过反射访问私有的方法和域 744
23.4 动态加载并实例化一个类746
23.5 通过一个ClassLoader从头开始构造一个类 .748
23.6 性能计时749
23.7 输出类的信息 753
23.8 显示包中包含的类清单 .755
23.9 使用和定义注解.757
23.10 通过注解找到类似插件的类 762
23.11 程序: CrossRef .764
23.12 程序: AppletViewer 766
第24章 Java和其他语言的结合 773
24.0 引言 .773
24.1 在Java中运行外部程序 774
24.2 运行一个程序并捕捉其输出 778
24.3 通过javax.script调用其他语言.781
24.4 启动自己的脚本引擎 .783

精彩书摘

  封面介绍
  本书的封面动物是一只家养的鸡( 高卢鸡) 。 家养鸡是印度野生红丛林家禽的后裔, 在越南和泰国地区经历了8000年的驯化。 人们养鸡的目的是得到鸡肉和鸡蛋, 公鸡也用于斗鸡活动( 尽管斗鸡目前在许多地方是非法活动) 。
  这些“ 鸟” 有着大而肥硕的身躯和娇小的翅膀, 使得它们适于生活在地面, 只能飞很短的距离。 它们的四趾脚爪用来在泥土中刨食, 从中寻找它们的美味: 虫子、 种子和各种植物残渣。
  雄性鸡称为雄鸡或公鸡, 雌性鸡称为母鸡。 从鸡蛋孵化出小鸡需要三周的时间。 刚孵出的小鸡就很早熟, 即它们有毛茸茸的羽毛, 从蛋壳里出来后就能行走。 它们也不依赖妈妈喂它们食物, 不仅能自己觅食, 而且孵出后, 依靠仍留在它们腹部的蛋黄可以维持一周的营养。
  关于鸡的话题在古代作品中经常出现。 中文文献最早的记录是公元前1400年, 古巴比伦关于鸡的雕刻则在公元前600年, 阿里斯托芬在公元前400年就有关于鸡的记载。公鸡长期以来象征着勇气, 罗马人认为鸡是神圣的火星、 战神, 法兰西共和国选择了“ 公鸡” 作为其象征。
  ……

前言/序言

  前言
  关于第三版
  Java 8是Java社区的新伙伴。 Java 7是对以前版本的重大改进。自本书上一版出版以来, Java已发生了太多的变化! Java 5中出现的新功能如注解、泛型类型、并发机制等已普遍存在了。在Java的整个画面中, API来了又走: JavaME已经过时很久了,BlackBerry已经放弃了它;在部分企业级Java中, JSF正在(慢慢)替代JSP; Spring框架继续扩大其覆盖面。许多人似乎认为桌面Java已经死亡,甚至整个Java正在逐步灭亡,但它肯定还没离开舞台;Swing、 JavaFX、 Java企业版以及 (尽管Oracle有重大诉讼案件) Android正在使Java语言保持活力。此外,在其他“ JVM语言”方面出现了更新的关注,如Groovy、 JRuby、 Jython、 Scala和Clojure正在使Java平台处于世界的开发前沿。
  实际上,第三版的主要挑战在于缩短对流行的API的介绍,保持自己应有的特色并尽量避免有偏见,使本书符合由O’Reilly手册系列和之前版本所确定的厚度约束。因此,本书不得不保留900多页,这当然不是我努力适应“所有亮点”的结果。
  我还去掉了前一版本中的一些API介绍。最明显的是在介绍串口和并口的一章(在第10章中将有关内容消减为一节);电脑一般不使用这些了,几乎也没有人使用它们了:大家的注意力都转移到了USB口,而Java目前似乎还没有一个标准的API(坦率地讲,对此,开发者之间的真正兴趣也不大)。
  关于之前版本
  如果你了解一点Java的话,那很好。如果你了解更多Java编程的话,那就更好了!如果你了解一些J a v a知识,还想进一步深入学习,那么,本书是你的理想选择。如果你对Java一点都不了解,你应当选择一本更基础的书,如果你是新手,选择 《 Head First Java 》( O’Reilly),如果你是有经验的C程序员,请选择《 Learning Java》( O’Reilly)。
  我是1980年在Toronto大学工作时开始使用C语言编程的,在20世纪80年代到90年代期间, C语言为我提供了很好的服务。 1995年,随着新生语言Oak更名为Java,我碰到了好运,我的同事J. Greg Davidson告诉我有关Java的情况。我向Greg提供的地址发送了一封电子邮件,并在1995年3月收到了来自Java发明者James Gosling的回复,邮件内容如下:
  | Hi. A friend told me about WebRunner( ?), your extensible network
  | browser. It and Oak( ?) its extension language, sounded neat. Can
  | you please tell me if it's available for play yet, and/or if any
  | papers on it are available for FTP?
  Check out http://java.sun.com
  ( oak got renamed to java and webrunner got renamed to
  hotjava to keep the lawyers happy)
  因此,在我开始使用之前, Oak已经变成了Java注1。我下载了HotJava,并尝试使用它。开始我并不太相信这个新奇的语言,它看起来像错位的C/C++。我编写了测试和演示程序,并将其放入javasrc目录下,以使它们与我的C源代码相互独立(因为程序经常会重名)。随着我对Java了解得越多,我开始看到它用于许多工作中的优势,比如,自动内存回收(“垃圾回收”)以及指针运算符的去除。 javasrc目录下的文件在持续增加。我编写了一本Java教程“ Learning Tree” 注2,目录下的文件增长得更快了,为此,我不得不创建子目录,尽管如此,查找东西还是越来越困难,显然,对文档的需求就变得迫切了。
  在某种意义上,本书是源自我的javasrc目录和为另一种新语言所建立的文档框架的高速碰撞的结果。在O’Reilly公司出版的《 Perl Cookbook》一书中, Tom Christiansen和Nathan Torkington通过他们成功的设计,将当时较新的Perl语言材料以一个个称为“实例”的精短的文章展示给大家。这样一本书最初的模型当然来自人们熟悉的厨房食谱。将“ cookbook”术语用于列举与计算机相关的操作技巧已有很长的历史。
  在软件方面, Donald Knuth用 “ cookbook”来比喻他的书《 The Art of Computer Programming》( Addison-Wesley),该书于1968年首印。在硬件方面, Don Lancaster 编写了《 The TTL Cookbook》一书 ( Sams)。( Transistor-transistor logic, TTL,是当时电子电路的小规模构建块)。 Tom 和 Nathan在这方面做得很成功,我想向希望学习更多Perl语言的人们推荐这本书。实际上,本书正是为那些想深入学习Java的人们而编写的。
  每节中的代码都是高度独立的,在你的项目中可随意使用其中的代码。代码的发布符合Berkeley风格的版权,以打击成批的盗版行为。
  读者对象
  我假定你有一些Java基础。在本书中不会告诉你怎样使用println同时输出一个字符串和一个数字,或怎样编写一个对JFrame扩展的类并将你的名字输出到窗口中。我假设你已经学习过Java课程或看过一本入门类的书籍,如《 Head First Java》、《LearningJava》或《 Java in a Nutshell 》( O’Reilly)。然而,第1章介绍了一些你可能了解不深的技术,掌握它们对理解后面的内容是非常必要的。请尽管跳着阅读本书!书的打印版和电子版都有大量的相互交叉引用。
  本书内容
  与我的Perl同事Tom 和Nathan不同,我不需要在语言的古怪和习语方面花费太多时间。 Java是一种简洁明了的语言,没有太多的怪异之处注3。但这并不是说学好Java是件轻松的事!如果是的话,本书的出版将没有必要了。我的主要精力是集中在Java API上。我将通过例子教你了解重要的API是什么,它们擅长用于哪些方面。
  像P e r l一样, J a v a也是一种伴随你成长的语言。我承认我目前大部分时间都在使用Java。以前用C语言编写的程序除了其中用于设备驱动和遗留系统的之外,我现在都用Java实现了。
  不过, Java比Perl更适合不同范围的任务。 Perl(和其他脚本语言,如awk和Python)尤其适用“ one-liner”(一句话)式的应用任务。正如Tom和Nathan所说, Perl擅长像从文件中打印第42行这样的事情。 Java当然也能实现,但它似乎更适合“大型应用的开发”或企业应用的开发,因为它是可编译的面向对象的语言。实际上,在Java 2中添加的大部分API都是为了实现这种类型的开发。不过,我将以较短的例子甚至是代码片段来对这些技术进行必要的说明。我会确保你看到的每个代码片段都能编译并运行。
  本书中较长的例子是我最初编写的一些将日常工作自动化的工具,例如, MkIndex工具(见javasrc库)可在我的Java例子源代码所在位置读取顶层目录,并为这个顶层目录构建一个浏览器能打开的index.html文件。另一个例子就是本书第一版的主体部分可用XML标记(见20章)。我使用XML格式输入本书部分章节的内容,并给这些初始文本加上标记,然后就可用XmlForm程序将文本转换为出版软件要求的格式。这个程序还能完成从javasrc目录插入书的手稿的全部和部分代码。 XmlForm的讨论见20章。
  本书内容结构
  让我们看看本书的内容结构。第1章入门:编译、运行和调试Java程序,描述了在不同平台上编译程序、在不同环境中运行(浏览器、命令行、窗口桌面)和调试的一些方法。
  第2章与运行环境交互,从编译转向运行程序,以使其适应周围的环境,周围环境是指在你的电脑中运行的其他程序。接下来的几章处理基本的API。
  第3章字符串,主要阐述Java中基本但很强大的数据类型,显示了怎样合并、分离、比较和重新排列文本。
  第4章正则表达式的模式匹配,教你如何使用UNIX的强大的正则表达式实现字符串匹配和模式匹配。“ Regex”处理成为Java标准已有多年历史了,但如果你不知道怎么使用它,你可以“重塑轮胎”。
  第5章数字,同时介绍了内置的数字类型如int和double,以及对应的API类( Integer,Double等)及其类型转换。还简单提了“大数”类。由于Java程序员经常以本地化和国际化形式处理日期和时间,第6章日期和时间——新的API,涵盖了这一重要话题。
  接下来的两章介绍了数据处理部分。与大多数语言中的一样, Java中的数组是由相似类型的对象构成的线性的索引集合,见第7章结构化数据。本章还继续介绍了许多集合类的使用,这是一种存储大量java.util包中对象的强有力的方式,包括使用“ Java泛型”。
  尽管Java在语法上与过程式语言,如C有些相似,但Java核心是面向对象的编程语言( OOP)。第8章面向对象技术,讨论了一些适用于Java的OOP的关键概念,包括常见的java.lang.Object的覆盖方法和设计模式这一重要问题。
  Java不是而且永远也不会是纯“函数编程”( FP)语言。不过,它可能使用FP的一些观点,而且在Java 8及其对lambda表达式(又名“闭包”)的支持下会越来越多地使用。参见第9章函数编程技术:函数接口、流、并行集合。
  接下来的几章介绍传统的输入和输出。第10章输入输出,讲读取和写入文件的规则(如果你觉得文件比较繁琐,请不要跳过这一章,因为这是后面两章的基础。你需要在本章介绍的串口或并口,以及在第13章网络客户端中讲的一个基于套接字的网络连接上读/写数据)。第11章目录和文件系统运算符,展示了文件以外的任何操作,例如识别它们的大小以及最后更新时间,还介绍了如何读取和修改目录、如何创建临时文件,以及重命名磁盘上的文件。
  第12章媒体:图形、视频、音频,将我们带进GUI的开发中。这一章内容是底层细节(如绘制图形及设置字体和颜色)和非常高级的活动(如控制视频剪辑或电影)的混合。第14章图形用户接口中,介绍了GUI的高级话题,如按钮、标签、菜单等类似的GUI预定义组件的使用。一旦有了GUI程序(实际上,在你真正写它之前),你会想读第15章国际化和本地化的内容,这样在阿克巴、阿富汗、阿尔及尔、阿姆斯特丹和英格兰运行你的程序将和在阿尔伯塔、阿肯色州、阿拉巴马州等地运行结果一样。
  因为Java一开始就被标榜为“ Internet上的编程语言”,所以应该在本书中花费一些时间讨论J a v a的网络编程。第13章网络客户端,涵盖了客户端网络编程的基础,主要集中在套接字技术上。在本书第三版第13章网络客户端中已重新从Applet和Web客户端转向强调Web服务的客户端。今天,有许多应用程序需要访问Web服务,主要是RESTful服务,而这似乎是必要的。然后我们将转向服务器端,见第16章Java服务器端,在这一章中,你将学到一些服务器端的编程技术。
  网络编程常常需要生成或处理电子邮件,第17章对此话题做了介绍。
  第18章数据库访问,涵盖了高级数据库访问( JPA和Hibernate)和低级Java数据库连接( JDBC)的要点,展示了怎样连接本地或远程关系数据库、怎样存储和检索数据,以及怎样找到查询结果集或数据库中的信息。
  用于数据交换的一个简单的基于文本的表示是JSON,即JavaScript Object Notation( JavaScript对象符号)。第19章处理JSON数据,描述了格式以及处理格式的一些API。
  另一种用于存储和交换数据的文本形式是XML。第20章处理XML,讨论了XML格式及在用SAX和DOM这两种标准Java API进行解析时使用的运算符。
  第21章包和打包,展示了怎样创建一起使用的类的包。本章还讨论了怎样发布或分发并安装你的软件。
  第22章Java线程,告诉你怎样编写一次执行多个任务的类,并利用强大的多线程硬件的优势。
  第23章反射或命名类的类,向你揭示如何编写API的交叉参考文档(在你的有生之年成为Java书籍的作者!),以及Web服务器怎样能装载任意旧的Servlet(以前从未看到过特定的类)并运行它。
  有时你已经有现成的代码,该代码使用另一种语言编写,且能为你实现一部分工作,或者你想用Java作为一个更大包的一部分。第24章Java和其他语言的结合,展示了怎样运行外部程序(已编译或脚本程序)以及怎样直接与C/C++或其他语言编写的本地码交互。
  我不可能在一本八百多页的书中讲述Java的全部内容,后记中是一些结语和指向我的在线Java API总结的链接,每个Java开发者都应该了解这些内容。
  最后,附录A按照发布时间线给出了Java颇具故事性的历史,不论你学过Java的哪一版本,你都可以跳到这里,很快赶上。
  没有两个程序员或作者能在展示所有Java话题的最佳顺序上达成一致。为帮助你更好地学习,我在书中建立了额外的交叉引用,大多数引用的是章节号。
  平台说明
  Java经历了许多版本的变迁,见附录A。本书主要针对Java 7和Java 8平台。在本书出版前,我期望所有开发中的Java项目都使用Java 6或Java 7,只有几个地方由于历史原因与早期版本有关(注意Java 6在本版出版前约一年时间已处于“生命尽头”状态)。
  我已在几种操作系统组合下和多个Java版本下对javasrc归档中的代码进行了编译,以测试这一代码的可移植性。
  Java API由两部分组成:核心API和非核心API。根据定义,核心API包含在JDK中,你可以免费从Java网站( http://java.com/)下载。非核心API是其余部分。但即使是这个核心部分,却一点也不小,它将近50个包, 3000多个公有类,平均每个类有12个左右的方法。只调用核心API的程序可以在任何标准Java平台上运行。
  Java非核心API进一步可分为标准扩展部分和非标准扩展部分。所有标准扩展API的包名都以javax开始。但请注意,并不是所有以javax命名的包都是扩展API: javax.swing及其子包Swing GUI包以前是扩展API,但现在是核心API的一部分。实现每个标准扩展API并不需要Java的许可(如Apple或IBM公司),但如果需要,就应坚持使用标准扩展的接口。本书中依赖于标准扩展API的代码都会引起你的注意,除了在书中所列举的代码外,几乎很少的代码是依赖于非标准扩展的。我自己的包com.darwinsys包含一些在这里或那里用得着的实用类,在使用这个包中的类时,你会看到在文件顶部有一条导入语句。
  此外,另两个平台Java ME 和Java EE也是标准定义的平台。 Java微版( Java ME)用于小型设备如手持设备、移动电话、传真机等。在Java ME内,有针对不同设备类的各种“描述”。相对的, Java企业版( Java EE)则用于构建大型可扩展的分布式应用。
  Servlets、 JavaServer Pages、 JavaServer Faces、 CORBA、 RMI、 JavaMail、 Enterprise JavaBeans ( EJBs)、 Transactions以及其他的API都是Java EE的一部分。 Java ME 和Java EE包名通常以“ javax”开始,因为它们不是核心包。本书中没有讨论这些内容,
  但包含了几个EE API可用于客户端程序,如JavaMail。如前所述,第一版中的Servlets和JSP在本版中已移除,因为现在有《 Java Servlet and JSP Cookbook》( http://shop.oreilly.com/product/9780596005726.do)一书专门讨论它们。
  谈到手机和移动设备,你可能知道A n d r o i d系统使用了J a v a作为其编程语言。对J a v a开发者而言,值得欣慰的是, A n d r o i d系统也使用了大多数核心J a v a A P I,而Swing和AWT除外,因为Android系统对此提供了Android特定的替代品。那些想学习Android的Java开发者可以参阅《 Android Cookbook》( http://shop.oreilly.com/product/0636920010241.do)一书或该书的网站。