作为理想的面向对象的程序设计语言,Java以自身的简单性和强大功能成为Internet编程和跨平台开发中最常用的开发语言。
本书以规范化的方式讲解Java编程。在介绍Java语言各个方面的过程中,一边解释有关Java语言结构和工作原理的基本知识,一边以大量的代码实例讲述如何开发功能齐全的Java应用程序。本书系统全面、浅显易懂,涵盖了从入门到精通的所有知识,以期帮助读者掌握Java语言的最新特性和Java类库中主要的功能包,积累Java应用环境的使用经验,并在核心技术领域打下坚实的基础。
本书主要内容
● 有关Java语言程序工作原理的基本知识
● 运用语言要素的方法
● 在程序中保存数据的方法
● 定义及实例化类的方法
● 在交互式Web网页中建立applet的方法
● 实现图形化用户程序的技术
● 利用JDBC功能使用关系型数据库
● 成为一个熟练的Java程序员所需的一切知识
无
欢迎选用本书
欢迎选用本书。本书可指导读者学会Java语言和Java平台应用程序接口(Application Program Interface,API),理解和掌握使用J2SE 50或者更高版本开发程序的基本技巧。
本书不仅向读者教授Java语言,还介绍了作为Java程序员应该了解的各种相关知识。本书合理安排内容、结构,以便读者精心安排进度,循序渐进地学习,其中每一阶段学习内容均以前面的已学内容为基础。
本书的读者对象
Java程序设计是一个宽泛的领域,而且随着Java语言功能的改善和相关类库的扩充,它还在不断发展。Java是一种为互联网编程、跨平台开发和教学目的而设计的面向对象语言,自发布以来便发展迅猛。这主要由于三点:Java与生俱来的平台无关性;Java语言形式简单却功能强大;以及对相当多的任务而言Java高效易用。很多大型应用软件的开发者都选择使用Java语言,因为与其他语言相比,Java更加易于开发和维护,并且无须修改代码即可在各种结构的计算机和操作系统上运行。使用Java语言,程序员的工作将变得效率更高、更轻松。
本书的目标是帮助读者全面地理解Java语言,并通过对Java编程环境的体验在其每个核心领域打下坚实的基础。本书使用丰富的代码示例阐明了Java语言的各个方面,读者可以而且应该自己动手建立并且运行这些代码示例。每一章末尾均有练习题,以便读者学会运用所学知识。学完本书各章内容后,读者将能够独立编写功能丰富且富有效率的Java程序。
本书书名中的“入门”(Beginning)一词更多地是指讲述风格而非技能水平,因此本书也可叫做“Java直通车”(Straight into Java)。这是因为不论读者是具有其他语言编程经验的程序员还是初学者,都能从本书的内容构架中找到适合自己层次的内容。
本书假定读者懂得最基本的一些编程知识,即至少了解程序工作原理的基本概念。但是先前没有一定编程经验的读者也能顺利地使用本书。本书的内容安排相当紧凑,但是并不缺少对Java程序的工作原理的必要解释和说明。
本书的内容
本书按照如下顺序向读者讲授Java语言的编程知识:
●首先,介绍一些Java编程的基础术语和概念,以及后续内容的概要与框架,为日后的深入学习打好基础。
●其次,清楚地解释Java语言的各项特性——包括基本数据类型、处理数据的控制结构、面向对象、运行错误的处理方式以及线程等等,此外还解释了泛型的概念和使用方法。本书不但阐述了这些语言元素的含义,还告诉读者如何在实践中运用它们。
●第三,全面介绍了Java类库中关键的包(package),尤其是介绍并用大量实例说明了 javamath、javaio、javanio、javautil、javaawt、javaawtevent、javaapplet、javaxswing、javaxxml和 javaxsql包。这些包涵盖了文件处理、打印、集成类、帮助对象、图形用户界面(Graphical User Interface,GUI)、applet、XML以及关系数据库等诸多方面的功能。
●第四,通过介绍一个名为“Sketcher”的应用程序的开发全过程,指导读者在真实环境中学习运用Java语言功能和类库。在开发工程中,读者既要学会利用菜单、工具栏和状态栏等“组装”出程序的用户界面,也要实现绘制处理大量图形元素、编辑文本以及打印和保存文本处理结果(包括使用XML实现导入与导出)等功能。通过这种把功能函数组合成为应用程序的过程,读者能更好地理解如何在自己的实际项目中运用Java语言,这些经验是无法通过那些琐碎的示例得到的。
●最后,介绍了SQL基础,并讲授了如何使用JDK自带的JDBC功能操作关系数据库。
作者在阐述上述主题的同时,还提供了一些原理性的介绍,并用具体实例予以清晰的说明。读者可以先快速浏览一遍,必要时再回顾有关基本原理。每章中的小例子主要用来阐述类及其使用方法,或者解释刚刚用到的新原理。这些小例子集中向读者展示某些特定的语言特性和工作原理。
为了获得最佳阅读效果,推荐读者在阅读的同时实践所碰到的实例。即使已下载了代码,最好还是亲手输入它们,实践一遍,这样做效果一定非同一般。这些例子为读者编写自己的程序提供了不错的代码基础和提示。实践是非常重要的,从第一次运行代码出现的错误中,读者能够收获很多。
本书所有实例源代码均可在 http://wwwwroxcom 网站上获得。
阅读本书的前提
本书的实例源代码在J2SE 50版本下测试无误,读者需使用JDK 50或者以上版本。大部分章节的要求都不高,仅需要文本编辑器和可以运行Java工具的命令行窗口即可。第1章将给出这些要求的所有细节,并解释如何获得并安装这些指定软件。
本书约定
为了让读者获得最佳阅读效果,本书对文字编排做了一些约定。
在讨论代码时,使用Courier字体标识,对重要的、必须牢记的内容加上方框。例如:
诸如此类的方框提供了一些不容忘记的重要信息,这些信息与方框前后的文字有很直接的关系。
当介绍重要术语时,将使用黑体来突出强调。
当表示组合按键时,使用Ctrl+A的形式。
命令行和终端输出显示为:
表现特定功能和机制的代码段将用灰色阴影予以识别:
当部分改变某代码段时,被改变的部分也将用灰色阴影显示,如下所示:
本书将通过“试一试”小节展示完整实例的部分代码。在“试一试”小节中,值得注意的是:代码段将被单独分离,重要的代码段加上了灰色阴影,表明程序的进展。当讲到重要的代码段时,本书会给出“程序工作原理”小节,以解释与之前所述理论相关的代码要点。
“试一试”小节中的全新代码段将添加灰色阴影,如下所示:
由前一版本修改而来的新代码将局部添加灰色阴影,如下所示:
最后,代码中出现的“程序工作原理”小节将不添加灰色阴影,如下所示:
源代码
在使用本书中的示例时,读者可以手工输入所有代码,也可直接使用本书附带的源代码文件。本书所有源代码均可从 http://wwwwroxcom 下载。访问该网站时,只需找到本书书名(可通过搜索书名或者检索书名列表找到),单击详细内容中的下载代码(Download Code)链接,即可得到本书所有源代码。
由于许多书的书名与本书雷同,最快捷的方法是利用ISBN搜索,本书的ISBN为0764568744。
下载代码后读者只需使用最习惯的工具予以解压即可。此外,读者还可以到Wrox主站的代码下载网页(http://wwwwroxcom/dynamic/books/downloadaspx ),可以得到本书以及其他由Wrox出版的书籍的相关源代码。
勘误和更新
尽管我们竭尽所能力争文字和代码不出现错误,但是人非圣人,错误在所难免。如果读者在书中发现了错误(如拼写错误、代码错误等等),希望能及时反馈给我们,从而可以提醒更多的人避免陷入同样的错误,也有利于提高本书质量。对此我们深表谢意。
若查看勘误表,请先登陆 http://wwwwroxcom,使用搜索框或者书名列表找到本书书名,然后在详情页面中单击勘误表链接。在勘误表网页中,读者将会看到所有和本书相关的勘误信息。读者可在wwwwroxcom/miscpages/booklistshtml 中得到所有相关书籍的勘误表(附带有链接)。
p2pwroxcom
若想与作者和其他读者讨论有关Java的技术问题,可加入P2P论坛(p2pwroxcom)。这个论坛是基于Web的系统,读者可就Wrox出版的图书以及相关技术发表自己的见解,也可与图书作者和其他读者、技术人员进行交流。此论坛还提供了邮件订阅功能,读者可选择感兴趣的话题,如果论坛上新发布了相关的消息,系统会自动将这些方面的最新信息发送到读者的Email信箱。
通过http://p2pwroxcom,不仅在阅读本书时,甚至在开发自己的程序时,读者也能得到许多有益的知识。
只需以下简单操作,读者即可成为论坛的一员:
1)登录http://p2pwroxcom ,并单击“注册”(Register)按钮。
2)阅读用户条例,选择“同意”(Agree)按钮。
3)填写所有必需的个人信息,选填愿意公布的可选信息,然后单击“提交”(Submit)按钮。
4)你的Email信箱中将收到一封确认函,按照其中的要求确认注册即可。
阅读p2p论坛中的内容无须注册,但是发布内容则必须注册。
一旦注册成功,读者即可发表自己的帖子或者对其他发帖人回帖,任意时刻均可登录p2p论坛阅读内容。如果想看另外一个论坛的最新消息,可通过单击“订阅”Email中的论坛列表项来添加订阅。
读者若想得到更多Wrox p2p论坛的使用信息,请阅读P2P FAQ,这里提供了如何使用论坛软件以及其他一些常见的问题。单击任何p2p页面中的“FAQ”链接即可访问。
无
在阅读这篇序言之前,读者的脑海里可能有些疑问。首先,这是不是一本适合我的书,书中的材料是不是最新的,还有书的内容是不是反映了最终版API?其次,面对这么厚的一本书,我该学习哪些东西?从哪里开始学习?
我看过很多序言,其中大部分都是给读者讲一段轶事或者故事,然后稍稍介绍一下作者,但最后都不能为上述问题给出更好的答案。为了避免落入这种俗套,首先我要开门见山地回答上面第二个问题:这是一本值得从第一页一口气读到最后一页的书。如果读者从来没有接触过Ivon Horton的著作,那一定会感到惊喜。Ivon Horton撰写的著作通俗易懂,非常好读。这一点我是了解的,因为我已经把整本书从头到尾读了一遍。
本书的本版是基于J2SE 50平台的。J2SE 50历经3年开发,是多年来Java平台最重大的更新之一。此版本的开发过程中有世界范围内160多名专家参与,他们都参与Java Community Process,致力于为所有开发者提供一款更好的开发平台。我本人也以JSR 176的Specification Lead身份参与其中,而JSR 176就定义了J2SE 50的内容。因此,我最关心的地方在于确保本书的精确性以及和最终版API集相一致。我甚至把本书每个代码实例编译运行了两次,发现了大量非常棒的代码实例,这一点读者不久就会发现。
那么从本书可以学到什么呢?首先,作者会阐述基本的编程部件,帮助读者完成自己的第一个Java程序。然后,一步一步介绍Java语言,包括新的泛型、功能更强的for循环、枚举类型等等。在后面的章节里,读者还会接触到Java语言的最新特性,甚至学到其他一些非语言的特性,譬如XML、 DOM3的更新等。所以,不论是初学者,还是已经具备一些Java编程经验的人,都能从本书中学到使用最新版Java所必需的技术。
最后,建议读者好好阅读这本书,享受JDK 50带来的一切,最终发现原来使用J2SE 50是这么简单!
Calvin Austin
Sun公司J2SE 50规范制订者之一
Ivor Horton:Ivor Horton: Ivon Horton 早年投身数学领域,但大学毕业不久即受雇于某著名制造企业。多年来,他曾使用各种语言编写实用程序,同时,对科学工作者和工程师进行编程培训。他在各种行业的工程设计中使用计算机解决问题有非常丰富的经验,撰写了多部C、C++和Java编程著作。
潘晓雷 于浚泊 王丹 等:暂无简介
也许读者是一位C++或其他语言的程序员,也许读者从未接触过任何编程语言。无论如何,学习Java语言都是非常好的选择。这个理由有些是技术上的,有些是非技术上的。从技术上讲,Java语言具有如下优点:
●简单。Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。其语法风格类似于C++,但摒弃了C++中容易引发程序错误的地方,同时提供了丰富的类库。
●面向对象。Java语言的设计完全是面向对象的。除了基本数据类型外,Java的所有数据都是用对象表示的。
●分布式。Java同时支持数据分布和操作分布。对于数据分布,Java提供了一个叫做URL的对象,利用这个对象,可以打开并访问相同URL地址上的对象,访问方式与访问本地文件系统相同。对于操作分布,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。
●可靠性和安全性高。因为Java最初的设计致力于电子类消费产品,所以要求较高的可靠性。首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集避免了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界。最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务,便于恢复。
●可移植性。这一直是Java程序开发人员的精神指标,也是Java之所以能够受到他们喜爱的原因之一。大多数编译器产生的目标代码只能运行在一种CPU上,即使那些能支持多种CPU的编译器也不能同时产生适合多种CPU的目标代码。但Java编译器不同,它产生的目标代码(JCode)是针对Java虚拟机(Java Virtual Machine)的,而不是实际存在的CPU。Java虚拟机能掩盖不同CPU之间的差别,使JCode能运行于任何具有Java虚拟机的机器上。
●多线程。Java在两方面支持多线程:一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收、系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序的开发。
●动态。Java的动态特性是其面向对象设计方法的发展,它允许程序动态地装入运行过程中所需要的类。
●支持Unicode码。Java使用Unicode作为它的标准字符,这项特性使得Java的程序能在不同语言的平台上编写和执行。Java也是目前所有计算机语言当中,惟一“天生”使用Unicode的语言。
从非技术的角度谈学习Java的益处是Java的应用非常广泛,如果读者靠编写程序为生,那么迟早都会接触到Java。Java已经渐渐地渗透到各个领域,可以用它写出Java Servlet,将其挂在apache或其他Web服务器上;还可以写出Java applet,在网页浏览器上执行;甚至可以写出数据库的存储过程,然后安装到Oracle上。另外,Java是免费的,Sun公司提供Java相关的工具,允许用户开发并执行Java程序。用户无须支付授权费,也不用花钱买Java开发工具;而且可以从网站上免费获得Java的信息文件。
基于上述原因,学习Java语言着实是件不错的事。本书是学习Java语言的理想教材,同前几版相比较,本书增添了许多对Java 2中新引进技术的介绍。从Java产生到现在,Java 2是第一次真正意义上对语言实现进行了大刀阔斧的改造。这包括泛型、增强的for 循环、自动装箱/拆箱、枚举类型、可变参数、静态导入、格式化的输入/输出、元数据等,这些新特性很大程度上简化了开发。
本书作者Ivor Horton著有许多优秀的Java教程,他独到的编写风格赢得了全球数十万的读者,多部作品被评为最受欢迎的Java编程流行书籍。本书继承了他一贯的风格,并具有如下特点:
■本书的目标是为读者成为优秀的程序员打下坚实的基础,因此本书着重帮助读者掌握Java语言各种元素在软件开发中的使用。
■本书在介绍新的特性和概念之后都会精心安排一些示例,并详细地讲解示例程序的工作原理。同时在各个章节后面都设有相应的练习,帮助读者从更深的层次上理解Java的编程思想。
■本书的结构设计得十分到位,对于初次接触编程的读者,只需追随作者的思路即可;对于已经熟悉前几版Java特性的程序员,可以快速地了解到有关Java的新特性。
■本书介绍Java在特定领域(例如数据库和XML)的应用时,不仅讲解Java语言本身对应用的支持,而且生动、详尽地介绍了相关的知识。
本书讲解深入浅出、结构合理,并提供了非常丰富的实例,非常适合作为编程初学者的自学教材;同时由于其涉及领域广泛,也可以作为具有一定编程经验的软件开发人员的参考手册。
本书由潘晓雷组织翻译并负责全书译稿的统稿和审校,黄晓博负责初稿的文字校对。本书翻译具体分工如下:潘晓雷翻译前言、序、第1章、第13章、第14章、附录A、附录B;谷云翻译第2章、第3章;聂振辉翻译第4章、第8章、第15章;王丹翻译第5章~第7章;禹金璐翻译第9章~第12章、第16章;侯文翻译第17章、第18章;赵晓岩翻译第19章、第20章;赵毅翻译第21章、第24章、第25章;于浚泊翻译第22章、第23章。另外,海利顺翻译部为本书的翻译工作提供了一定的帮助。
译著文字力求信、达、雅,但由于译者水平和时间有限,译作中难免有疏漏之处,恳请专家和读者批评指正。
潘晓雷
中国科学院青年公寓
无
第1章Java概述
11什么是Java
12Java语言的特性
13学习Java
131Java程序
132学习Java要走的路
14Java环境
15基于Java语言的面向对象程序设计
151对象是什么
152如何定义对象的类
153对象的操作
154Java程序语句
155封装
156类和数据类型
157类和子类
158使用对象的优点
16Java程序结构
161Java的类库
162Java应用程序
17Java和Unicode码
18本章小结
19参考资源
第2章程序、数据、变量和计算
21数据和变量
211变量的命名
212变量名和Unicode码
213变量和类型
22整型数据类型
221整型字面值
222整型变量的声明
23浮点数据类型
231浮点字面值
232浮点型变量的声明
24固定变量的值
25算术运算
251整数运算
252整数除法和余数
253自增和自减运算符
254短整型数计算
255整数算术运算中的错误
256浮点运算
26混合数据类型的算术运算表达式
261显式类型强制转换
262赋值语句中的自动类型转换
27op=运算符
28数学函数和常量
29字符的存储
291字符转义序列
292字符的算术运算
210按位运算
2101使用AND和OR运算符
2102使用异或运算符
2103移位运算
2104按位运算的方法
211有固定序列整型值的变量(枚举)
212布尔型变量
213运算符的优先级
214程序注释
215本章小结
216练习题
第3章循环与逻辑
31决策
311比较
312if语句
313嵌套的if语句
314比较枚举值
32逻辑运算符
33条件运算符
34switch语句
35变量作用域
36循环
361循环的种类
362嵌套循环
363continue语句
364在循环中使用break语句
37断言
38本章小结
39练习题
第4章数组和字符串
41数组
411数组变量
412数组定义
413数组的长度
414访问数组元素
415数组变量的重用
416数组初始化
417使用数组
418嵌套数组
419字符数组
42字符串
421字符串常量
422创建String对象
423字符串数组
43字符串的运算
431字符串的连接
432字符串的比较
433字符串的排序
434访问字符串中的字符
435搜索字符串中的字符
436子串搜索
437提取子串
438String对象的修改版本
439由String对象创建字符数组
4310对字符串使用collectionbased for循环
4311以字节数组的形式获取字符串中的字符
4312由字符数组创建String对象
44可变字符串
441创建StringBuffer对象
442StringBuffer对象的容量
443为StringBuffer对象改变字符串的长度
444向StringBuffer对象增加其他内容
445查找子串的位置
446替换缓冲区中的子串
447插入子串
448从可变字符串中提取字符
449对可变字符串的其他操作
4410由StringBuffer对象创建String对象
45本章小结
46练习题
第5章类的定义
51什么是类
511类定义中的变量
512类定义中的方法
513变量和方法的访问
52定义类
53方法的定义
531由方法返回
532形式参数表
533类方法的定义
534在方法中访问类的数据成员
535this变量
536初始化数据成员
54构造函数
541默认构造函数
542生成类的对象
55类的定义和使用
56方法重载
561多个构造函数
562使用构造函数复制对象
57对象的使用
58递归
59理解包
591类的打包
592将包中的类添加到程序中
593程序中的包和名称
594导入静态类成员
595标准包
510控制对类成员的访问
5101使用访问属性
5102指定访问属性
5103选择访问属性
511嵌套类
5111静态嵌套类
5112使用非静态嵌套类
5113在顶层类之外使用嵌套类
5114局部嵌套类
512finalize()方法
513本地方法
514本章小结
515练习题
第6章类的扩展与继承
61使用现有的类
62类的继承
621继承数据成员
622继承方法
623覆盖基类的方法
63选择基类的访问属性
64多态
65多级继承
66抽象类
67通用超类
671toString()方法
672确定对象的类型
673对象的复制
68接收可变实参的方法
69对象的类型强制转换
691何时强制转换对象的类型
692对象的识别
610关于枚举
611类的设计
612使用final修饰符
613接口
6131封装程序中的常量
6132声明方法的接口
6133接口的扩展
6134接口的应用
6135接口类型的方法形参
6136接口定义中的嵌套类
6137接口与现实世界
614匿名类
615本章小结
616练习题
第7章异常
71异常的概念
72异常的类型
721Error异常
722RuntimeException异常
723Exception类的其他子类
73异常的处理
731指定方法可以抛出的异常
732异常的处理
733try代码块
734catch代码块
735finally代码块
736方法的组织
737执行的顺序
738嵌套的try代码块
739再次抛出异常
74异常对象
741Throwable类
742标准异常
75定义自己的异常
751定义异常类
752抛出自己的异常
753异常处理策略
76本章小结
77练习题
第8章理解流
81流和新的I/O功能
82流的定义
821输入流和输出流
822二进制流和字符流
83输入/输出类
831基本的输入流操作
832基本的输出流操作
833Readers流和Writers流
84标准流
841从键盘获取数据
842向命令行写
843printf()方法
844将数据格式化输入到字符串
85本章小结
86练习题
第9章访问文件和目录
91运用File对象
911创建File对象
912访问系统属性
913测试和检查File对象
914文件列表的过滤
915创建、修改文件和目录
92创建文件输出流
921确保文件存在
922避免覆盖文件
923FileDescriptor对象
93本章小结
94练习题
第10章写文件
101文件输入/输出基础
102文件输入/输出
103通道
1031通道操作
1032文件通道
104缓冲区
1041缓冲区容量
1042缓冲区位置和边界
1043设置位置和边界
1044创建缓冲区
1045标记缓冲区
1046缓冲区数据传送
1047将数据传送到缓冲区
1048使用视图缓冲区
1049准备好向文件输出的缓冲区
105写入文件
1051文件位置
1052将变长字符串写入文件
1053直接缓冲区和间接缓冲区
1054将数值数据写入文件
1055将混合数据写入文件
1056集中写操作
106本章小结
107练习题
第11章读文件
111文件读操作
112文件通道读操作
113读取文本文件
114读取二进制数据
115读取混合型数据
116文件的复制
117随机存取文件
118使用一个文件通道进行读写
119内存映像文件
1191锁定文件
1192文件的部分锁定
1193实际文件锁定的注意事项
1110本章小结
1111练习题
第12章对象的序列化
121在文件中存储对象
1211将对象写入文件
1212将基本数据类型写入对象流
1213实现Serializable接口
1214从文件读取对象
1215使用对象序列化
1216自己实现类的序列化
1217序列化的问题和复杂情况
122本章小结
123练习题
第13章泛型类
131什么是泛型
132泛型类的定义
1321泛型的实现
1322泛型的实例化
1323泛型实例的运行时类型
1324泛型实例之间的关系
1325多重类型参数
1326类型参数的作用域
1327泛型中的静态成员域
1328类型参数限制
133泛型和泛型接口
1331利用collectionbased for循环
1332实现一个迭代器
1333参数化的二叉树
134原生类型变量
135用通配符作为类型实参
1351对通配符的约束
1352进一步研究Class类
136数组和参数化类型
137参数化方法
138参数化类型和继承
139本章小结
1310练习题
第14章集合框架
141理解集合框架
142对象的集合
1421集
1422序列
1423映射
143迭代器
144集合类
145使用向量
1451创建向量
1452把对象存入向量中
1453从向量中获取对象
1454从数组中删除对象
1455搜索向量
1456应用向量
1457为集合排序
1458栈式存储
146使用链表
147使用映射
1471散列处理
1472用自己的类创建的对象作键
1473创建HashMap容器
1474存储、获取以及删除对象
1475处理映射中所有的元素
148本章小结
149练习题
第15章实用类的集合
151数组的工具方法
1511填充数组
1512比较数组
1513对数组排序
1514搜索数组
152Observable对象和Observer对象
1521定义可观察对象的类
1522Observable类的方法
153产生随机数
154日期和时间
1541Date类
1542解释Date对象
1543Gregorian日历
155正则表达式
156使用扫描器
1561创建扫描器对象
1562获取从扫描器的输入
1563测试标记
1564为标记定义自己的模式
157本章小结
158练习题
第16章线程
161理解线程
1611创建线程
1612停止线程
1613连接线程
1614线程调度
1615实现Runnable接口
162管理线程
1621同步处理
1622死锁
1623线程间的通信
163线程的优先级
164本章小结
165练习题
第17章创建窗口
171Java中的图形用户界面
172创建窗口
173组件和容器
1731窗口和框架组件
1732窗口窗格
174组件基础
1741组件属性
1742组件的大小和位置
1743点和矩形
1744组件的可视特性
1745Swing组件
175使用容器
176容器布局管理器
1761流布局管理器
1762使用边界布局管理器
1763使用卡片布局管理器
1764使用网格布局管理器
1765使用盒式布局管理器
1766使用GridBagLayout管理器
1767使用SpringLayout管理器
177添加菜单到窗口中
1771创建JMenu和JMenuItem
1772创建菜单
1773添加菜单项到下拉菜单中
1774为菜单项添加快捷键
178更多关于applet小程序的内容
179本章小结
1710练习题
第18章事件处理
181基于窗口的Java程序
182事件处理过程
183在图形用户界面代码中避免死锁
184事件类
1841低级事件类
1842低级事件监听器
1843语义事件
1844语义事件监听器
185applet小程序中的语义事件处理
1851其他处理事件方法
1852处理低级事件和语义事件
186应用程序中的语义事件监听器
187使用Action
1871Action接口
1872将行为应用于菜单项
188添加工具栏
1881添加按钮到工具栏中
1882添加工具提示
1883禁用动作
189本章小结
1810练习题
第19章在窗口中绘画
191使用模型/视图体系结构
192组件中的坐标系
193在组件上绘图
1931图形环境
1932绘制过程
1933渲染操作
194几何图形
1941定义点的类
1942直线段和矩形
1943圆弧和椭圆
1944曲线
1945复杂路径
195填充几何图形
196管理几何图形
1961在文档中存储图形
1962绘制图形
197使用鼠标绘制
1971处理鼠标事件
1972处理鼠标按键按下事件
1973处理鼠标拖拽事件
1974处理鼠标按键释放事件
1975使用MouseInfo类方法确定鼠标的位置
198定义自己的图形类
1981定义线段
1982定义矩形
1983定义圆形
1984绘制曲线
199本章小结
1910练习题
第20章扩展图形用户界面
201创建状态栏
202使用对话框
2021模式与非模式对话框
2022简单的模式对话框
2023即时对话框
2024输入对话框
2025字体选择对话框
203弹出式菜单
2031显示弹出式菜单
2032实现上下文菜单
204转换用户坐标系统
2041仿射转换类
2042修改图形环境的转换
2043创建仿射转换对象
205选择自定义颜色
206本章小结
207练习题
第21章文档的整理和打印
211序列化处理草图
212实现可序列化接口
213支持文件菜单
2131使用文件选择器
2132文件保存操作
2133文件另存为操作
2134文件打开操作
2135开始新建草图
2136防止关闭时数据丢失
214在Java中打印
2141创建和使用PrinterJob对象
2142打印页面
2143打印完整的草图
2144横向打印
2145改进打印应用程序
2146实现页面设置
2147使用Java的打印对话框
2148多页文档打印
2149使用Book打印
21410打印Swing组件
215本章小结
216练习题
第22章Java与XML
221XML
222XML文档结构
2221有效的XML文档
2222XML文档中的元素
2223元素属性
223XML中的数据结构
224文档定义类型
2241声明DTD
2242定义DTD
2243Sketcher程序的DTD
225构造良好文档的规则
226XML名字空间
2261名字空间声明
2262XML名字空间和DTD
227XML模式
2271定义模式
2272定义元素
2273定义复杂元素的属性
2274指定一组备选元素
2275用于Sketcher程序的模式
2276使用模式的文档
228使用XML文档编程
2281SAX处理
2282DOM处理
229访问解析器
2210使用SAX
22101使用不同的解析器
22102解析器的特征及特性
22103使用SAX解析文档
22104实现SAX处理器
22105处理其他解析事件
22106解析由模式实例化的文档
2211本章小结
2212练习题
第23章创建和修改XML文档
231文档对象模型
2311设置DOM解析器特征
2312解析文档
2313遍历文档对象树
2314创建XML文档
2315将草图存储为XML文档
2316阅读用XML表示的草图
232本章小结
233练习题
第24章与数据库通信
241JDBC的概念和术语
2411表
2412数据库编目
242SQL简介
2421定义一个相交表
2422SQL语句
2423INSERT语句
2424SELECT语句
2425UPDATE语句
2426DELETE语句
243JDBC包
2431JDBC与ODBC的关系
2432JDBC基础
2433建立一个数据库
2434DriverManager
2435创建一个数据源连接
2436关于驱动程序的更多内容
2437Statement对象
2438ResultSet对象
2439获得结果集的元数据
244基本的JDBC程序
245使用PreparedStatement对象
246创建Interactive SQL工具
2461使用表
2462应用程序GUI
2463处理事件
2464处理命令行实参
247本章小结
248练习题
第25章JDBC操作
251数据类型与JDBC
252把关系数据映射到Java对象
253Statement和PreparedStatement接口
2531Statement接口
2532PreparedStatement接口
254结果集
2541获取指定数据类型的列数据
2542处理空值
2543处理特殊数据类型
2544流的处理
255调用存储过程
256错误处理
2561SQLException
2562SQLException链锁
2563SQL警告
257浏览数据库
2571显示数据库中的数据
2572使用JTree组件
2573获取数据库元数据
2574使用树监听器
258本章小结
259练习题
附录AJava保留关键字
附录B计算机运算基础知识ⅩⅦⅩⅧ