Java经典实例(第二版)
Java经典实例(第二版)
Ian F. Darwin
张晓坤 译
出版时间:2009年01月
页数:784
本书收集了Java开发人员经常遇到的成百个问题的解决方案,涵盖了Java应用的方方面面,堪称讲述Java应用的百科全书。书中的实例从正确设置CLASSPATH和读取环境信息这样的简单任务,到应用XML,或者使用JDK 1.5所带的并发性工具实现多线程编程的完整程序,几乎无所不包。

无论你是否直接使用书中的实例,作为灵感的源泉,作为学习Java的工具,或者用于其他用途,本书都将成为你图书收藏中的珍品。还没有一本书能够如此全面地讲述Java的诸多功能,并能够如此容易地运用到实践当中去。作为第二版,本书更像是一部秘笈,指引你获取最新的第三方资源,以及提供实用的“招式”。本书展现了JDK 1.5中许多新的编程语言与API特性,这些都包括在那些实例中。

本书的主题包括:

* 编译和调试Java程序
* 使用Ant
* 将应用程序打包,以便部署
* 字符串和正则表达式
* 格式化器和扫描器(1.5版)
* Java和Mac OS X
* 数组和其他数据集合
* 并行和串行端口的编程
* 文件、目录和文件系统
* 泛型、foreach和枚举(1.5版)
* 开发网络客户端和服务器端
* Web编程、Servlet和JSP
* 数据库访问
* 集成XML
* 远程方法调用(RMI)
* 内省
* 开发图形化用户界面
* 并发性(1.5版)

本书对于Java开发人员而言是理想的“第二本书”(也是理想的自学书籍),讲述API比一般书籍要详细,非常适合扩大Java应用的知识面。

Ian F.Darwin有三十年的计算机软件开发经验,是Learning Tree国际教育公司的讲师和课程设计师。
  1. 前言
  2. 第1章 起步走:编译、运行和调试Java程序
  3. 1.0 简介
  4. 1.1 编译和运行Java程序: JDK方式
  5. 1.2 采用带彩色突出显示的编辑器编辑和编译程序
  6. 1.3 采用IDE编译、执行和测试程序
  7. 1.4 有效使用CLASSPATH
  8. 1.5 使用本书的com.darwinsys API类
  9. 1.6 编译本书的源代码示例
  10. 1.7 使用Ant工具自动编译和执行Java程序
  11. 1.8 Applet
  12. 1.9 处理过期警告
  13. 1.10 没有#ifdef的条件编译
  14. 1.11 调试信息的输出
  15. 1.12 使用断言机制维护程序
  16. 1.13 使用调试器JDB
  17. 1.14 单元测试
  18. 1.15 获取可读的回溯
  19. 1.16 更多的Java源程序
  20. 1.17 例程: Debug
  21. 第2章 Java的运行环境
  22. 2.0 简介
  23. 2.1 获得环境变量
  24. 2.2 系统属性
  25. 2.3 编写JDK版本相关的代码
  26. 2.4 编写操作系统相关的代码
  27. 2.5 使用扩展包或其他API包
  28. 2.6 解析命令行参数
  29. 第3章 字符串
  30. 3.0 简介
  31. 3.1 利用substring()分解字符串
  32. 3.2 利用StringTokenizer分解字符串
  33. 3.3 连接字符串
  34. 3.4 处理单个字符
  35. 3.5 字符串的对齐
  36. 3.6 Unicode字符与String的转换
  37. 3.7 颠倒字符串
  38. 3.8 扩展和压缩TAB符
  39. 3.9 控制字母大小写
  40. 3.10 缩排文档
  41. 3.11 输入非打印字符
  42. 3.12 删除字符串尾部的空格
  43. 3.13 解析逗号分隔的数据
  44. 3.14 例程: 一个简单的文本格式化工具
  45. 3.15 例程: Soundex算法
  46. 第4章 正则表达式的模式匹配
  47. 4.0 简介
  48. 4.1 正则表达式的语法
  49. 4.2 在Java中使用正则表达式: 测试模式
  50. 4.3 查找匹配的文本
  51. 4.4 替换匹配的正文
  52. 4.5 打印匹配的所有字符串
  53. 4.6 打印含有模式的行
  54. 4.7 在正则表达式中控制大小写
  55. 4.8 匹配重音符或复合字符
  56. 4.9 匹配时的换行问题
  57. 4.10 例程: Apache日志文件解析
  58. 4.11 例程: 数据挖掘
  59. 4.12 例程: 完整的Grep
  60. 第5章 数字
  61. 5.0 简介
  62. 5.1 检查字符串是否包含有效数字
  63. 5.2 数据类型的由大变小
  64. 5.3 数字与对象的互相转换
  65. 5.4 使用分数
  66. 5.5 确保浮点数的准确性
  67. 5.6 浮点数的比较
  68. 5.7 浮点数的舍入
  69. 5.8 数字的格式化
  70. 5.9 二进制、八进制、十进制以及十六进制之间的转换
  71. 5.10 整数序列
  72. 5.11 罗马数字
  73. 5.12 名词的复数形式
  74. 5.13 产生随机数
  75. 5.14 产生更好的随机数
  76. 5.15 三角函数的计算
  77. 5.16 取对数
  78. 5.17 矩阵乘法
  79. 5.18 复数
  80. 5.19 处理特大的数字
  81. 5.20 例程: TempConverter
  82. 5.21 例程: 数字回文(Number Palindromes)
  83. 第6章 日期和时间
  84. 6.0 简介
  85. 6.1 查看当前日期
  86. 6.2 按照指定格式打印日期/时间
  87. 6.3 用其他历法表示日期
  88. 6.4 将YMDHMS转换为Calendar对象
  89. 6.5 将字符串转换为日期
  90. 6.6 将秒数转换为DMYHMS格式
  91. 6.7 日期的加减运算
  92. 6.8 计算日期之间的间隔
  93. 6.9 比较日期
  94. 6.10 第几日
  95. 6.11 日历页
  96. 6.12 测量流逝的时间
  97. 6.13 休眠
  98. 6.14 例程: 提醒服务
  99. 第7章 结构化数据
  100. 7.0 简介
  101. 7.1 数组
  102. 7.2 调整数组的长度
  103. 7.3 ArrayList类
  104. 7.4 Iterator(迭代器)
  105. 7.5 链表
  106. 7.6 使用Hashtable和HashMap进行映射
  107. 7.7 Properties类和Preferences类
  108. 7.8 排序
  109. 7.9 避免频繁地排序
  110. 7.10 排除重复元素
  111. 7.11 搜索对象
  112. 7.12 将集合转换为数组
  113. 7.13 自定义Iterator
  114. 7.14 堆栈
  115. 7.15 多维结构
  116. 7.16 集合小结
  117. 7.17 例程: 运行效率
  118. 第8章 泛型、foreach循环和枚举的数据结构(JDK 1.5)
  119. 8.0 简介
  120. 8.1 使用泛型
  121. 8.2 使用“foreach”循环
  122. 8.3 使用泛型避免强制类型转换
  123. 8.4 使用自动装包和自动拆包进行转换
  124. 8.5 使用类型安全的枚举
  125. 8.6 例程: MediaInvoicer
  126. 第9章 面向对象的技术
  127. 9.0 简介
  128. 9.1 打印对象: 用toString()方法格式化
  129. 9.2 覆盖equals方法
  130. 9.3 覆盖hashcode方法
  131. 9.4 Clone方法
  132. 9.5 Finalize方法
  133. 9.6 使用内部类
  134. 9.7 通过接口进行回调(Callback)
  135. 9.8 多态(Polymorphism)/抽象方法
  136. 9.9 传值
  137. 9.10 Singleton模式
  138. 9.11 自定义异常
  139. 9.12 例程: Plotter(绘图仪)
  140. 第10章 输入和输出
  141. 10.0 简介
  142. 10.1 从标准输入设备读取数据
  143. 10.2 向标准输出设备写数据
  144. 10.3 JDK 1.5 的Formatter类
  145. 10.4 扫描文件
  146. 10.5 JDK 1.5的Scanner类
  147. 10.6 按文件名打开文件
  148. 10.7 复制文件
  149. 10.8 把文件读入字符串
  150. 10.9 重定向标准流
  151. 10.10 复制流
  152. 10.11 读/写不同字符集的文本
  153. 10.12 行结束符
  154. 10.13 平台相关的文件编码
  155. 10.14 断行再续
  156. 10.15 读写二进制数据
  157. 10.16 定位(Seeking)
  158. 10.17 处理C程序写的数据流
  159. 10.18 存储和还原串行化对象
  160. 10.19 防止ClassCastExceptions异常
  161. 10.20 读写JAR或Zip文档
  162. 10.21 读写压缩文件
  163. 10.22 例程: 将文本输出为PostScript格式
  164. 第11章 目录和文件操作
  165. 11.0 简介
  166. 11.1 获取文件信息
  167. 11.2 创建文件
  168. 11.3 修改文件名
  169. 11.4 删除文件
  170. 11.5 创建临时文件
  171. 11.6 更改文件属性
  172. 11.7 列出目录内容
  173. 11.8 获取根目录
  174. 11.9 创建新目录
  175. 11.10 例程: Find
  176. 第12章 串行和并行接口编程
  177. 12.0 简介
  178. 12.1 选择一个端口
  179. 12.2 打开串行端口
  180. 12.3 打开并行端口
  181. 12.4 解决端口冲突
  182. 12.5 基于端口读写数据: 异步(Lock Step)
  183. 12.6 基于端口的读写数据: 事件驱动
  184. 12.7 基于端口的读写数据: 线程
  185. 12.8 例程: Penman绘图仪
  186. 第13章 图形与声音
  187. 13.0 简介
  188. 13.1 绘制图形
  189. 13.2 测试图形组件
  190. 13.3 输出文本
  191. 13.4 使组件上的文本居中
  192. 13.5 阴影效果
  193. 13.6 绘制二维艺术字
  194. 13.7 文本字体
  195. 13.8 图像
  196. 13.9 播放声音文件
  197. 13.10 播放视频文件
  198. 13.11 Java的打印
  199. 13.12 例程: PlotterAWT
  200. 13.13 例程: Grapher
  201. 第14章 图形用户界面(GUI)
  202. 14.0 简介
  203. 14.1 GUI组件
  204. 14.2 窗体布局
  205. 14.3 带Tab的布局
  206. 14.4 事件处理: 让按钮工作起来
  207. 14.5 使用匿名的内部类进行事件处理
  208. 14.6 通过“关闭窗体”结束程序
  209. 14.7 对话框
  210. 14.8 GUI 异常
  211. 14.9 在窗体上打印数据
  212. 14.10 使用JSpinner选择值
  213. 14.11 使用JFileChooser选择文件
  214. 14.12 选择颜色
  215. 14.13 使用HTML格式化JComponents
  216. 14.14 将主窗体居中
  217. 14.15 修改Swing程序的外观感受(Look and Feel)
  218. 14.16 改进Mac OS X的GUI
  219. 14.17 例程: 定制字体
  220. 14.18 例程: 定制布局管理器
  221. 第15章 国际化与本地化
  222. 15.0 简介
  223. 15.1 用I18N资源创建按钮
  224. 15.2 列出有效区域
  225. 15.3 使用I18N 资源创建菜单
  226. 15.4 编写国际化的实用子程序
  227. 15.5 使用I18N资源包创建对话框
  228. 15.6 创建资源包
  229. 15.7 从代码中提取字符串
  230. 15.8 使用指定的区域
  231. 15.9 设置默认的区域
  232. 15.10 格式化消息
  233. 15.11 例程: MenuIntl
  234. 15.12 例程: BusCard
  235. 第16章 网络客户端
  236. 16.0 简介
  237. 16.1 访问服务器
  238. 16.2 查找并报告网络地址
  239. 16.3 处理网络错误
  240. 16.4 读写文本数据
  241. 16.5 读写二进制数据
  242. 16.6 读写串行化数据
  243. 16.7 UDP数据报
  244. 16.8 例程: TFTP的UDP客户端
  245. 16.9 例程: Telnet客户端
  246. 16.10 例程: 聊天室的客户端
  247. 第17章 Java服务器端:Socket
  248. 17.0 简介
  249. 17.1 创建ServerSocket
  250. 17.2 返回响应(字符串或二进制)
  251. 17.3 返回对象信息
  252. 17.4 处理多客户端
  253. 17.5 HTTP协议服务
  254. 17.6 使用SSL和JSSE保护Web服务器
  255. 17.7 网络日志
  256. 17.8 使用log4j进行网络日志记录
  257. 17.9 使用JDK 1.4进行网络日志记录
  258. 17.10 找到网络接口
  259. 17.11 例程: 一个Java聊天室服务器
  260. 第18章 网络客户端(II):Applet和Web客户端
  261. 18.0 简介
  262. 18.1 在网页中嵌入Applet
  263. 18.2 编写Applet
  264. 18.3 连接Applet主机的服务器
  265. 18.4 通过Applet显示文档
  266. 18.5 在Applet上运行JavaScript
  267. 18.6 通过Applet运行CGI脚本
  268. 18.7 读取URL上的内容
  269. 18.8 URI、URL或URN?
  270. 18.9 从URL中解析HTML文本
  271. 18.10 从文件中解析URL名字
  272. 18.11 将文件名转换为URL名字
  273. 18.12 例程: MkIndex
  274. 18.13 例程: LinkChecker
  275. 第19章 Java与Email
  276. 19.0 简介
  277. 19.1 发送Email: 浏览器版
  278. 19.2 发送Email: 真正的客户程序
  279. 19.3 邮件发送的服务器程序
  280. 19.4 发送MIME邮件
  281. 19.5 提供邮件设置
  282. 19.6 不使用JavaMail发送邮件
  283. 19.7 读邮件
  284. 19.8 程序: MailReaderBean
  285. 19.9 程序: MailClient
  286. 第20章 数据库访问
  287. 20.0 简介
  288. 20.1 采用JDO轻松访问数据库
  289. 20.2 文本文件数据库
  290. 20.3 DBM数据库
  291. 20.4 JDBC的安装和连接
  292. 20.5 与JDBC数据库连接
  293. 20.6 发送一个JDBC查询并获得结果
  294. 20.7 没有JDBC参数化语句
  295. 20.8 在JDBC中使用存储过程
  296. 20.9 用ResultSet改变数据
  297. 20.10 在RowSet中存储结果
  298. 20.11 用SQL改变数据
  299. 20.12 寻找JDBC元数据
  300. 20.13 程序: SQLRunner
  301. 第21章 XML
  302. 21.0 简介
  303. 21.1 从对象中生成XML
  304. 21.2 用XSLT转换XML
  305. 21.3 用SAX解析XML
  306. 21.4 用DOM解析XML
  307. 21.5 用DTD验证结构
  308. 21.6 用DOM生成我们自己的XML
  309. 21.7 程序: xml2mif
  310. 第22章 分布式Java:RMI
  311. 22.0 简介
  312. 22.1 定义RMI合同
  313. 22.2 创建RMI客户
  314. 22.3 创建RMI服务器
  315. 22.4 跨网络部署RMI
  316. 22.5 程序: RMI回调
  317. 22.6 程序: RMIWatch
  318. 第23章 包和包装机制
  319. 23.0 简介
  320. 23.1 创建包
  321. 23.2 用Javadoc为类写文档
  322. 23.3 JavaDoc进阶: Annotation/Metadata (JDK 1.5)和XDoclet
  323. 23.4 用jar存档
  324. 23.5 从JAR运行Applet
  325. 23.6 用新的JDK运行Applet
  326. 23.7 从JAR运行主程序
  327. 23.8 将类作为JavaBean
  328. 23.9 将JavaBean放入JAR中
  329. 23.10 将Servlet压缩为一个WAR文件
  330. 23.11 “编写一次,随处安装”
  331. 23.12 “编写一次,在Mac OS X上安装”
  332. 23.13 JWS(Java Web Start)
  333. 23.14 签署JAR文件
  334. 第24章 Java线程
  335. 24.0 简介
  336. 24.1 在另一线程中运行代码
  337. 24.2 显示一个带动画的图像
  338. 24.3 停止线程
  339. 24.4 超时
  340. 24.5 使用synchronized关键字的同步线程
  341. 24.6 使用JDK 1.5 的锁定简单化同步
  342. 24.7 线程的通信: wait()和notifyAll()
  343. 24.8 使用JDK 1.5的Queue接口简化生产者-消费者模式
  344. 24.9 在编辑器中后台保存
  345. 24.10 例程: 多线程的网络服务器
  346. 24.11 使用Concurrency Utility(JDK 1.5)简化服务器
  347. 第25章 内省或“命名类的类”
  348. 25.0 简介
  349. 25.1 获得类描述符
  350. 25.2 寻找和使用方法和字段
  351. 25.3 动态地装载和实例化一个类
  352. 25.4 从头开始构造一个类
  353. 25.5 性能计时
  354. 25.6 输出类信息
  355. 25.7 例程: CrossRef
  356. 25.8 程序: AppletViewer
  357. 第26章 Java与其他语言的结合
  358. 26.0 简介
  359. 26.1 运行一个程序
  360. 26.2 运行程序并获取它的结果
  361. 26.3 用BSF混合使用Java和脚本语言
  362. 26.4 Java 和 Perl的结合
  363. 26.5 与本机代码(C/C++)混合
  364. 26.6 本机代码调用Java
  365. 26.7 程序: DBM
  366. 后记
书名:Java经典实例(第二版)
作者:Ian F. Darwin
译者:张晓坤 译
国内出版社:中国电力出版社
出版时间:2009年01月
页数:784
书号:978-7-5083-7966-1
原版书出版商:O'Reilly Media
Ian F. Darwin
 
Ian F. Darwin在计算机行业已经工作了30年。他编写了用于Linux和BSD的免费软件file(1),是《Checking C Programs with Lint》(http://shop.oreilly.com/product/9780937175309.do)、《Java Cookbook》(http://shop.oreilly.com/product/9780596007010.do)的作者并撰写了一百多篇有关C、UNIX、Java及Android的文章和教程。除了编程和顾问工作之外,Ian还为世界最大的技术培训公司——Learning Tree International服务,讲授UNIX、Java和Android技术。
 
 
《Java经典实例》第二版的封面动物是一支家养的鸡(高卢鸡)。家养的鸡是由印度野外红色的原鸡演变而来的。这个演变过程主要是在现在的越南和泰国完成的,历时8000多年。人们养鸡的主要目的是肉食和鸡蛋,公鸡也用于斗鸡活动(尽管斗鸡活动目前在许多地方都已经被明令禁止)。
肥硕的身躯和娇小的翅膀,使得这些“鸟”适于地面生活,而只能飞很短的距离。它们的四趾脚爪用来在泥土中刨食,寻找它们的美味佳肴:虫子、种子以及各种植物残渣。
雄性鸡被称为雄鸡或者公鸡,雌性鸡被称为母鸡。从鸡蛋里孵化出小鸡一般需要三周;新孵出来的小鸡就具备很强的生存能力,它们有着毛绒绒的羽毛,从蛋壳里出来就能行走。它们也依赖它们的妈妈们来觅食。它们不仅能够自己参与觅食,而且从蛋黄孵出来后,还有许多营养物质堆积在它们的腹部,这些给养能够维持它们一周的生计。
关于鸡的话题经常出现在古代的作品中。中国文献最早的记录可以追溯到公元前1400年,古巴比伦(Babylonian)关于鸡的雕刻则在公元前600年,阿里斯托芬(Aristophanes)于公元前400年就撰写鸡的故事了。公鸡被长期当作勇敢的标志:罗马人将鸡奉为战神、战争之神灵,第一法兰西共和国则选择雄鸡作为其象征。