前言 1
第1章 起步走:编译、运行和调试Java程序 15
1.0简介 15
1.1编译和运行Java程序:JDK方式 15
1.2采用带彩色突出显示的编辑器编辑和编译程序 17
1.3采用IDE编译、执行和测试程序 18
1.4有效使用CLASSPATH 25
1.5使用本书的com.darwinsys API类 27
1.6编译本书的源代码示例 28
1.7使用Ant工具自动编译和执行Java程序 29
1.8 Applet 32
1.9处理过期警告 34
1.10没有#ifdef的条件编译 36
1.11调试信息的输出 37
1.12使用断言机制维护程序 38
1.13使用调试器JDB 39
1.14单元测试 41
1.15 获取可读的回溯 44
1.16更多的Java源程序 45
1.17例程:Debug 47
第2章 Java的运行环境 48
2.0简介 48
2.1获得环境变量 48
2.2系统属性 50
2.3编写JDK版本相关的代码 52
2.4编写操作系统相关的代码 53
2.5使用扩展包或其他API包 55
2.6解析命令行参数 56
第3章 字符串 64
3.0简介 64
3.1利用substring()分解字符串 66
3.2利用StringTokenizer分解字符串 67
3.3连接字符串 70
3.4处理单个字符 73
3.5字符串的对齐 74
3.6 Unicode字符与String的转换 77
3.7颠倒字符串 78
3.8扩展和压缩TAB符 79
3.9控制字母大小写 84
3.10缩排文档 85
3.11输入非打印字符 87
3.12删除字符串尾部的空格 88
3.13解析逗号分隔的数据 89
3.14例程:一个简单的文本格式化工具 93
3.15 例程:Soundex算法 95
第4章 正则表达式的模式匹配 99
4.0简介 99
4.1正则表达式的语法 101
4.2在Java中使用正则表达式:测试模式 108
4.3查找匹配的文本 111
4.4替换匹配的正文 113
4.5打印匹配的所有字符串 114
4.6打印含有模式的行 117
4.7在正则表达式中控制大小写 118
4.8匹配重音符或复合字符 119
4.9匹配时的换行问题 120
4.10例程:Apache日志文件解析 122
4.11例程:数据挖掘 124
4.12例程:完整的Grep 126
第5章 数字 130
5.0简介 130
5.1检查字符串是否包含有效数字 132
5.2数据类型的由大变小 134
5.3数字与对象的互相转换 135
5.4使用分数 135
5.5确保浮点数的准确性 136
5.6浮点数的比较 138
5.7浮点数的舍入 140
5.8数字的格式化 141
5.9二进制、八进制、十进制以及十六进制之间的转换 143
5.10整数序列 144
5.11罗马数字 145
5.12名词的复数形式 149
5.13产生随机数 151
5.14产生更好的随机数 152
5.15 三角函数的计算 153
5.16取对数 154
5.17矩阵乘法 155
5.18复数 156
5.19处理特大的数字 158
5.20例程:TempConverter 160
5.21例程:数字回文(Number Palindromes) 164
第6章 日期和时间 167
6.0简介 167
6.1查看当前日期 168
6.2按照指定格式打印日期/时间 169
6.3用其他历法表示日期 172
6.4将YMDHMS转换为Calendar对象 173
6.5将字符串转换为日期 174
6.6将秒数转换为DMYHMS格式 176
6.7日期的加减运算 177
6.8计算日期之间的间隔 178
6.9比较日期 179
6.10第几日 181
6.11日历页 182
6.12测量流逝的时间 184
6.13休眠 186
6.14例程:提醒服务 187
第7章 结构化数据 190
7.0简介 190
7.1数组 191
7.2调整数组的长度 192
7.3 ArrayList类 193
7.4 Iterator(迭代器) 195
7.5链表 196
7.6使用H ashtable和HashMap进行映射 198
7.7 Properties类和Preferences类 200
7.8排序 203
7.9避免频繁地排序 207
7.10排除重复元素 209
7.11搜索对象 209
7.12将集合转换为数组 211
7.13自定义Iterator 212
7.14堆栈 214
7.15 多维结构 215
7.16集合小结 218
7.17例程:运行效率 219
第8章 泛型、foreach循环和枚举的数据结构(JDK1.5) 222
8.0简介 222
8.1使用泛型 223
8.2使用“foreach”循环 224
8.3使用泛型避免强制类型转换 225
8.4使用自动装包和自动拆包进行转换 228
8.5使用类型安全的枚举 229
8.6例程:Medialnvoicer 233
第9章 面向对象的技术 236
9.0简介 236
9.1打印对象用toString()方法格式化 238
9.2覆盖equals方法 239
9.3覆盖hashcode方法 242
9.4 Clone方法 243
9.5 Finalize方法 245
9.6使用内部类 247
9.7通过接口进行回调(Callback) 248
9.8多态(Polymorphism)/抽象方法 251
9.9传值 253
9.10 Singleton模式 255
9.11自定义异常 257
9.12例程:Plotter(绘图仪) 258
第10章 输入和输出 261
10.0简介 261
10.1从标准输入设备读取数据 262
10.2向标准输出设备写数据 266
10.3 JDK 1.5的Formatter类 267
10.4扫描文件 271
10.5 JDK 1.5的Scanner类 275
10.6按文件名打开文件 279
10.7复制文件 280
10.8把文件读入字符串 283
10.9重定向标准流 283
10.10复制流 284
10.11读/写不同字符集的文本 286
10.12行结束符 287
10.13平台相关的文件编码 288
10.14断行再续 289
10.15读写二进制数据 294
10.16定位(Seeking) 295
10.17处理C程序写的数据流 296
10.18存储和还原串行化对象 298
10.19防止ClassCastExceptions异常 301
10.20读写JAR或Zip文档 302
10.21读写压缩文件 305
10.22例程:将文本输出为PostScript格式 307
第11章 目录和文件操作 310
11.0简介 310
11.1获取文件信息 310
11.2创建文件 313
11.3修改文件名 314
11.4删除文件 315
11.5创建临时文件 317
11.6更改文件属性 318
11.7列出目录内容 319
11.8获取根目录 321
11.9创建新目录 322
11.10例程:Find 323
第12章 串行和并行接口编程 326
12.0简介 326
12.1选择一个端口 328
12.2打开串行端口 331
12.3打开并行端口 334
12.4解决端口冲突 338
12.5基于端口读写数据:异步(Lock Step) 341
12.6基于端口的读写数据:事件驱动 343
12.7基于端口的读写数据:线程 347
12.8例程:Penman绘图仪 349
第13章 图形与声音 354
13.0简介 354
13.1绘制图形 354
13.2测试图形组件 356
13.3输出文本 356
13.4使组件上的文本居中 357
13.5阴影效果 359
13.6绘制二维艺术字 361
13.7文本字体 364
13.8图像 366
13.9播放声音文件 370
13.10播放视频文件 371
13.11 Java的打印 374
13.12例程:PlotterAWT 376
13.13例程:Grapher 379
第14章 图形用户界面(GUI) 383
14.0简介 383
14.1 GUI组件 384
14.2窗体布局 386
14.3带Tab的布局 388
14.4事件处理:让按钮工作起来 390
14.5使用匿名的内部类进行事件处理 392
14.6通过“关闭窗体”结束程序 393
14.7对话框 398
14.8 GUI异常 400
14.9在窗体上打印数据 402
14.10使用JSpinner选择值 405
14.11使用JFileChooser选择文件 407
14.12选择颜色 409
14.13使用HTML格式化JComponents 412
14.14将主窗体居中 413
14.15修改Swing程序的外观感受(Look and Feel) 414
14.16改进Mac OS X的GUI 418
14.17例程:定制字体 420
14.18例程:定制布局管理器 425
第15章 国际化与本地化 431
15.0简介 431
15.1用I18N资源创建按钮 432
15.2列出有效区域 433
15.3使用118N资源创建菜单 435
15.4编写国际化的实用子程序 435
15.5使用118N资源包创建对话框 437
15.6创建资源包 439
15.7从代码中提取字符串 440
15.8使用指定的区域 441
15.9设置默认的区域 442
15.10格式化消息 443
15.11例程:MenuIntl 445
15.12例程:BusCard 447
第16章 网络客户端 452
16.0简介 452
16.1访问服务器 454
16.2查找并报告网络地址 455
16.3处理网络错误 457
16.4读写文本数据 458
16.5读写二进制数据 460
16.6读写串行化数据 462
16.7 UDP数据报 464
16.8例程:TFTP的UDP客户端 466
16.9例程:Telnet客户端 470
16.10例程:聊天室的客户端 472
第17章 Java服务器端:Socket 478
17.0简介 478
17.1创建ServerSocket 478
17.2返回响应(字符串或二进制) 481
17.3返回对象信息 484
17.4处理多客户端 485
17.5 HTTP协议服务 490
17.6使用SSL和JSSE保护Web服务器 492
17.7网络日志 495
17.8使用log4j进行网络日志记录 499
17.9使用JDK 1.4进行网络日志记录 502
17.10找到网络接口 504
17.11例程:一个Java聊天室服务器 505
第18章 网络客户端(II):Applet和Web客户端 510
18.0简介 510
18.1在网页中嵌入Applet 510
18.2编写Applet 512
18.3连接Applet主机的服务器 514
18.4通过Applet显示文档 517
18.5在Applet上运行JavaScript 519
18.6通过Applet运行CGI脚本 520
18.7读取URL上的内容 521
18.8 URI、URL或URN? 522
18.9从URL中解析HTML文本 524
18.10从文件中解析URL名字 526
18.11将文件名转换为URL名字 528
18.12例程:Mklndex 529
18.13例程:LinkChecker 533
第19章 Java与Email 540
19.0简介 540
19.1发送Email:浏览器版 540
19.2发送Email:真正的客户程序 545
19.3邮件发送的服务器程序 547
19.4发送MIME邮件 551
19.5提供邮件设置 553
19.6不使用JavaMail发送邮件 555
19.7读邮件 559
19.8程序:MailReaderBean 563
19.9程序:MailClient 567
第20章 数据库访问 578
20.0简介 578
20.1采用JDO轻松访问数据库 579
20.2文本文件数据库 582
20.3 DBM数据库 587
20.4 JDBC的安装和连接 590
20.5与JDBC数据库连接 592
20.6发送一个JDBC查询并获得结果 595
20.7没有JDBC参数化语句 598
20.8在JDBC中使用存储过程 602
20.9用ResultSet改变数据 603
20.10在RowSet中存储结果 603
20.11用SQL改变数据 606
20.12寻找JDBC元数据 608
20.13程序:SQLRunner 611
第21章 XML 622
21.0简介 622
21.1从对象中生成XML 625
21.2用XSLT转换XML 626
21.3用SAX解析XML 629
21.4用DOM解析XML 631
21.5用DTD验证结构 635
21.6用DOM生成我们自己的XML 636
21.7程序:xm12mif 638
第22章 分布式Java:RMI 641
22.0简介 641
22.1定义RMI合同 642
22.2创建RMI客户 644
22.3创建RMI服务器 645
22.4跨网络部署RMI 648
22.5程序:RMI回调 648
22.6程序:RMIW atch 652
第23章 包和包装机制 659
23.0简介 659
23.1创建包 660
23.2用Javadoc为类写文档 661
23.3 JavaDoc进阶:Annotation/Metadata (JDK 1.5)和XDoclet 665
23.4用jar存档 667
23.5从JAR运行Applet 668
23.6用新的JDK运行Applet 669
23.7从JAR运行主程序 673
23.8将类作为JavaBean 675
23.9将JavaBean放入JAR中 678
23.10将Servlet压缩为一个WAR文件 679
23.11“编写一次 随处安装” 680
23.12“编写一次在Mac OS X上安装” 681
23.13 JWS (Java Web Start) 683
23.14签署JAR文件 688
第24章 Java线程 691
24.0简介 691
24.1在另一线程中运行代码 693
24.2显示一个带动画的图像 696
24.3停止线程 700
24.4超时 702
24.5使用synchronized关键字的同步线程 703
24.6使用JDK 1.5的锁定简单化同步 709
24.7线程的通信:wait()和notifyAll() 713
24.8使用JDK 1.5的Queue接口简化生产者-消费者模式 718
24.9在编辑器中后台保存 721
24.10例程:多线程的网络服务器 722
24.11使用Concurrency Utility (JDK 1.5)简化服务器 729
第25章 内省或“命名类的类” 732
25.0简介 732
25.1获得类描述符 733
25.2寻找和使用方法和字段 734
25.3动态地装载和实例化一个类 737
25.4从头开始构造一个类 740
25.5性能计时 741
25.6输出类信息 744
25.7例程:CrossRef 745
25.8程序:AppletViewer 750
第26章 Java与其他语言的结合 758
26.0简介 758
26.1运行一个程序 758
26.2运行程序并获取它的结果 761
26.3用BSF混合使用Java和脚本语言 765
26.4 Java和Perl的结合 769
26.5与本机代码(C/C++)混合 773
26.6本机代码调用Java 779
26.7程序:DB M 779
后记 783