本书将集成环境下UML的面向对象设计与Java的面向对象编程很好地结合起来,详细说明了如何使用UML对系统进行分析和建模,并使用Java语言来实现系统。书中首先详细介绍了编程的基本概念,包括变量、数据类型、创建和使用类、各种控制结构等;讨论了面向对象编程的相关内容,包括多态和继承、用户界面以及数据文件和流等;并且覆盖了几个高级课题,如Swing库、线程编程、利用Java API创建和处理数据结构、利用套接字编程和RMI的分布式系统、数据库接口、网页编程等。
第1章 引言
1.1 阅读本书所需的预备知识
1.2 关于计算机
1.3 java应用程序和Java小应用程序
1.4 JavaScript和JSP
1.5 本书的组织结构
1.6 一个小例子
1.7 Applet的例子
1.8 本章所涉及的新概念
1.9 复习题
1.10 编程练习
第2章 变量、数据类型及表达式
2.1 例子
2.2 数据和变量
2.3 算法、编程错误和测试数据
2.4 语句、程序导体和命名规范
2.5 变量和常量
2.6 数据类型
2.7 赋值与算术表达式
2.8 类型转换
2.9 装修工程预算
2.10 本章所涉及的新概念
2.11 复习题
2.12 编程练习
第3章 使用预定义的类
3.1 类: 现实世界的模型
3.2 使用预定义的类
3.3 Random类
3.4 String类
3.5 以包的形式组织类
3.6 java库中的类方法与类常量
3.7 读入用户数据
3.8 本章所涉及的新概念
3.9 复习题
3.10 编程练习
第4章 构造自己的类
4.1 构造类
4.2 编程实现类
4.3 访问修饰符private和public
4.4 类中的内容
4.5 再写一个类并介绍几个新运算符
4.6 Applet简介
4.7 Graphics简介
4.8 本章所涉及的新概念
4.9 复习题
4.10 编程练习
第5章 选择控制结构
5.1 一个功能简单的计算器
5.2 条件判断控制结构
5.3 方法内部的程序块
5.4 if语句
5.5 嵌套if语句和多项选择语句
5.6 布尔表达式
5.7 多条件选择语句switch
5.8 小数的比较
5.9 条件运算符?:
5.10 本章所涉及的新概念
5.11 复习题
5.12 编程练习
第6章 循环控制结构
6.1 计数循环
6.2 通用循环
6.3 图形应用示例
6.4 for语句
6.5 嵌套的控制结构
6.6 do-while语句
6.7 选择合适的循环语句
6.8 验证输入数据
6.9 本章所涉及的新概念
6.10 复习题
6.11 编程练习
第7章 对象间的协作
7.1 对象间协作的例子
7.2 菜单驱动的程序
7.3 指向同一个对象的多个引用
7.4 小结:参数的传递
7.5 本章所涉及的新概念
7.6 复习题
7.7 编程练习
第8章 Java程序库及异常处理
8.1 在线的API文档
8.2 自行创建类库
8.3 本地化
8.4 声音和图像
8.5 异常处理简介
8.6 对异常处理的详细说明
8.7 本章所涉及的新概念
8.8 复习题
8.9 编程练习
第9章 基本数据类型的数组
9.1 数组
9.2 数组的复制
9.3 存放降水量信息的Month类
9.4 排序
9.5 查找
9.6 java.util.Arrays类
9.7 维数组
9.8 多维数组
9.9 多维数组及面向对象的编程
9.10 本章所涉及的新概念
9.11 复习题
9.12 编程练习
第10章 引用类型的数组和变长数组
10.1 引用类型的数组
10.2 变长数组
10.3 外包类
10.4 equals()方法和toString()方法
10.5 联合
10.6 较为复杂的例子
10.7 Comparable接口和Comparator接口
10.8 对数组和变长数组进行排序
10.9 本章所涉及的新概念
10.10 复习题
10.11 编程练习
第11章 使用数据文件和流
11.1 数据文件和流
11.2 数据文件举例
11.3 从文件中读人文本格式的信息
11.4 往文件中写入文本格式的数据
11.5 数据文件:小结与类说明
11.6 从数据文件中读取数字
11.7 与控制台间进行通信
11.8 传输二进制数据
11.9 随机访问文件中的内容
11.10 序列化
11.11 本章所涉及的新概念
11.12 复习题
11.13 编程练习
第12章 继承与多态
12.1 泛化与特化
12.2 继承
12.3 Material类及其子类
12.4 将子类的实例作为一个整体来处理
12.5 涉及多个表面和多种材料的装修程序
12.6 没有多态会怎样
12.7 protected访问修饰符
12.8 两级继承
12.9 语法规则
12.10 接口
12.11 本章所涉及的新概念
12.12 复习题
12.13 编程练习
第13章 GUI编程与事件
13.1 GUI组件
13.2 按钮
13.3 内联类
13.4 布局管理
13.5 本章所涉及的新概念
13.6 复习题
13.7 编程练习
第14章 文本框、选择框和窗口
14.1 文本框组件和焦点监听器
14.2 让用户在多个选项中选择
14.3 使用复选框
14.4 使用单选按钮
14.5 使用列表框
14.6 窗口
14.7 编写一个图形用户界面的应用程序
14.8 Applet与Application之间的区别
14.9 监听器的其他实现方法
14.10 本章所涉及的新概念
14.11 复习题
14.12 编程练习
第15章 创建用户界面
15.1 菜单
15.2 工具栏
15.3 对话框
15.4 使用GridBagLayout布局管理器
15.5 表
15.6 装修程序的图形用户界面
15.7 本章所涉及的新概念
15.8 复习题
15.9 编程练习
第16章 线程
16.1 进程中的线程
16.2 在多线程间分配时间
16.3 使用线程的例子
16.4 线程的状态
16.5 线程间的通信
16.6 同步与锁
16.7 更多的控制功能:wait()、notify()和notifyAll()
16.8 使用JDB来观察线程
16.9 本章所涉及的新概念
16.10 复习题
16.11 编程练习
第17章 算法与数据结构
17.1 图
17.2 链表
17.3 集合、列表和链表的实现
17.4 队列和栈
17.5 递归
17.6 树
17.7 JavaAPI中实现的树
17.8 散列表
17.9 本章所涉及的新概念
17.10 复习题
17.11 编程练习
第18章 深入介绍Applet
18.1 Applet在Web中完成的工作
18.2 安全
18.3 编写Applet
18.4 实际应用中的安全性问题
18.5 Applet与浏览器间的通信
18.6 本章所涉及的新概念
18.7 复习题
18.8 编程练习
第19章 分布式系统、套接宇编程和RMI
19.1 套接字
19.2 对象通过网络进行协作
19.3 对象间如何完成通信
19.4 RMI和Applet
19.5 部署图
19.6 使用回调的分布式系统
19.7 本章所涉及的新概念
19.8 复习题
19.9 编程练习
第20章 数据库编程
20.1 数据库驱动程序
20.2 与数据库建立连接
20.3 一个稍微复杂一些的例子
20.4 数据库应用程序
20.5 三层结构
20.6 事务以及预编译的SQL语句
20.7 本章所涉及的新概念
20.8 复习题
20.9 编程练习
第21章 使用JSP完成Web编程
21.1 Web编程的不同之处
21.2 安装所需软件
21.3 Servlet
21.4 Java Server Page(JSP)
21.5 JSP的各个组成部分
21.6 得到用户输入的数据
21.7 使用JavaScript在客户端完成数据校验
21.8 数据库
21.9 保存状态信息
21.10 本章所涉及的新概念
21.11 复习题
21.12 编程练习
附录A 使用Java SDK和WinEdit
附录B 关键字
附录C 记数法
附录D Unicode字符集
附录E HTML和Applet
附录F 未遵守的编码规则
附录G 参考资料
这本教材是为在高校中讲授Java语言和面向对象的编程思想而编写的。书中包括基础知识和一些高级编程技巧。
阅读本书的读者需要对计算机、操作系统以及一些常用工具(比如字处理软件和浏览器等)较为熟悉,还应该能够理解像“文件”、“目录”这类概念的含义,对RAM和存储器(如硬盘)等概念的区别也应有所了解。
以面向对象的思想为基础
使用Java作为教学语言,可以让读者一开始就从面向对象的角度思考问题。现在的编程在很大程度上依赖于对预定义的组件和类的使用。使用Java语言就可以通过最简单的控制结构来完成画图、显示图片、播放音乐等功能。我们深信,图形应用和图形用户界面程序的发展会促进面向对象编程和一般的编程方法不断向前发展,并且最终能够使用与编写文本用户界面同样简单的控制结构来编写图形应用程序。
在第3章中首次引入Java API的概念。最先介绍的是JOpfionPane类,这个类是图形用户界面的重要组成部分之一。第3章中还介绍了Random类和String类。可以通过学习使用在Java语言中预定义的类来理解面向对象的思想与方法。
在学会使用预定义的类之后,读者一定很想了解类的内部实现机制是怎么回事。本书使用了大量的篇幅来说明应该如何编写类。类的编写是一个涉及面很广并很复杂的课题。在第4章中,读者将首先学习编写一个带有简单几何图形的Java Applet,用户可以改变其形状、颜色和字体。
在此基础上,我们还将编写更多的类来说明应如何使用选择和循环控制结构。
在本书的学习过程中,我们要逐步建立起面向对象的思想与建模方法。对于刚学会运行Java程序的初学者来讲,首先应该关注如何编写程序,然后抛开编程细节来学习编程的思路。
本书的第一部分主要讲解如何使用预定义的类。通过使用预定义的类,读者将逐渐习惯以抽象的方式来思考问题,理解封装的概念。而编写图形用户界面还需要理解事件的概念以及事件处理的过程。由于这部分内容较为复杂,本书会在介绍Java语言的基础知识及面向对象的基本思路之后,再来进行讲解。过早地介绍这部分内容,恐怕读者很难理解其中的“奥妙”之处。
本书不仅是为初学者而写
本书一开始就引入了面向对象的思想,并将其贯穿全书。本书同样适合于已经了解非面向对象的编程思想及编程语言的读者。已熟悉这种编程语言的读者,无须在前几章所讲的编程细节上花费过多时间,而应该认真体会在这些简单的例子中体现出来的面向对象的思想与概念。
那些学习过面向对象的编程语言(如c++)的读者对本书第一部分中的大部分内容应该已经很熟悉了。但我们还是希望读者能够很快地浏览一遍这部分内容。因为Java语言与C++之间还是略有不同的,而且这两种编程语言所用到的一些概念也有区别。例如:Java语言中的数组包含有其长度的信息;如果用户使用了一个错误的索引来访问数组元素,系统就会抛出异常;所有对象都需要使用new关键字来为其开辟空间(不能在栈中使用对象);那些不再有引用指向的对象会被系统自动释放;在编程时,不能使用真正意义上的多重继承;不支持运算符的重载;不再使用指针等。
Java语言提供了大量的应用编程接口(API),这些API对于编写过程序的读者会很有吸引力。使用Swing库可以编写与平台无关的带有图形用户界面的程序;那些可以动态改变长度的字符串和变长数组类都是非常好用的类;通用的数据结构,如链表、树和散列表均为JavaAH的组成部分;利用远程方法调用(RMI)可以很方便地通过网络中相互协作的对象来实现分布式系统;Java语言中提供的Java数据库连接服务(JDBC)里包含一组类,可以实现程序与任何一种数据库系统间的通信。Java Server Page(JSP)是一种编程实现动态Web页的技术,运行在Web服务器上的程序可以为每位客户生成与之相应的页面。
使用统一建模语言(UML)
近年来,在面向对象分析与设计领域,最令人鼓舞的成就是由Booch,Jacobson和Rumbaugh共同创建的一种通用的建模语言——统一建模语言(Unified Modeling Language,UML)。这种建模语言已经成为对象管理组织(Object Management Group,OMG)所认可的标准语言。本书中将介绍其中的一部分内容。从第3章开始,首先介绍仅包含了一个类的类图,然后引入多个类来讲解类间的泛化与关联关系。我们还使用活动图来说明控制结构、线程以及并行处理的过程。序列图对于读者理解对象间消息的传递会有很大帮助。在本书的最后几章,我们还要使用部署图来说明在分布式系统中分布于不同的主机之上、但又相互依赖的不同组件间的关系。所需的软件
编写Java程序所需的软件可以从因特网上免费下载。本书使用的开发环境是Java 2 SDK。这个软件包可以在Sun的Web页上找到(http://java.sun.com/)。本书也介绍了应如何使用这个软件包。另外,你还需要一个好用的文本编辑器,当然也可以使用像JBuilderFoundafon这样的集成开发环境。JBuilder可以在Borland公司的网页上找到(http://www.borland.conffibuilder/)。
使用Java Server Page开发动态页面时(第21章中的内容),读者会用到Web服务器。本书简要讲解了安装和使用LiteWebServer的过程。LiteWebServer是一种免费的Web服务器,其程序可以在网页http://www.gefionsoftware.com/上找到。
因特网上的相关资源
本书有自己的网页http://www.tisip.no/JavaTheUmlWay/。网页中包含本书用到的所有例子,还有每节后面的习题答案和每章最后的编程练习答案,以及与本书相关的信息和链接。
教学方式
本书中各章的内容是这样组织的在每章的开始首先列出本章的教学目标,在结尾对本章所涉及的新概念加以总结,并给出一些复习题和编程练习。另外,在每节的末尾也给出了一些小题目,使读者可以及时地动手实践并巩固刚刚学过的内容。
在本书的网页中(见上)提供了一组链接,能够链接到每章的内容。其中包括本书的主要内容,还有一些未在书中讲到的例子与图。
本书的组织结构
基础部分
本书的前9章主要讲解编程所需的基础知识。
第1章介绍了有关编程和Java语言的一些概念,并指出本书读者应了解的一些基础知识。这一章中还说明了本书所使用的各种字体的含义。
在第2章中介绍了变量、数据类型和表达式的概念。第3章和第4章主要讲解面向对象的概念,除教给读者使用Java语言中预定义的类之外,还要让你自己编写类。从中可以学到面向对象思想中最重要的一些概念,例如服务器、客户端、属性、消息、操作等。此外,还应该能够区分出现实生活中的对象与程序中的对象间的不同。第4章教你如何编写一个带有简单几何图形的JavaApplet。
第5章和第6章分别讲述了选择和循环这两种控制结构。
第7章再次强调了面向对象的思想。在这一章中说明了对象间消息的交互过程。读者需要理解参数的传递过程,并且更深入地理解编程时要注意的一些细节问题,其中有些内容还是有一定难度的。
在学完第7章之后,我们认为读者应该可以看懂Java SDK中提供的在线API文档了。第8章中说明了使用在线API文档的方法。读者在使用Java SDK提供的预定义的类进行编程时,还要理解Java语言中的异常处理过程。这一章也对此做了相应的介绍。
第9章主要讲解基本数据类型中的数组类型,并介绍了一些简单的查找与排序算法。这一章还介绍了如何使用Java语言预定义的实现查找与排序功能的方法。
中级内容部分
在这部分章节中,我们要介绍编写带有图形用户界面的较复杂的程序。读者要学会使用更多的Java API,并要对面向对象系统有更深入的理解(例如,理解关联与泛化的概念等)。
存放引用类型数据的数组与存放基本数据类型数据的数组,在结构和形式上都有明显的不同。因而,本书用单独的一章来介绍引用类型的数组。在这一章中还讲解了ArrayList类,ArrayList类是一种引用类型的数组,但这种数组的长度是可变的。使用ArrayList类要比直接使用引用类型的数组方便。在第10章还介绍了定义有查找与排序方法的类,以及可以根据国家的不同而使用不同的字符集的方法。
第10章中还说明了对象间的关联关系,并且介绍如何将类图转换成相应的源程序。
程序与数据文件的通信是在第11章中介绍的。在这一章中分别说明了以文本方式和二进制方式来访问数据文件的方法,此外还讲解了序列化这种简单又实用的技术。
第12章所讲的内容是面向对象思想中很重要的概念,即继承与多态。如何完成建模是编写面向对象程序的关键。读者要明白关联与泛化的不同。只有在深入理解了这些概念之后,才能编写出正确的面向对象的程序。
在打下了面向对象编程的坚实基础之后,你就能够理解在Java语言中编写图形用户界面时所用的事件模型了。从第13章到第15章都在讨论图形用户界面编程的问题。在这几章中介绍了常用的图形组件,并强调了一个在编写图形用户界面时非常重要的思想:要将解决实际问题所用的类与完成用户界面显示所用的类分离开来。通过这几章的学习,读者不但要学会编写Java Applet,还要学会编写Java应用程序。
Java高级编程部分
第16章讲述的是多线程编程的内容。使用多线程可以在一个程序内部同时处理多项任务。Java解释器本身就使用了多线程的机制。例如,在使用图形用户界面时,程序就需要同时处理多项任务。
第17章主要说明如何使用Java API来建立并处理各种传统的数据结构,例如链表、队列、栈、树和散列表等。这一章中还介绍了递归的思想。
第18章讨论了在Java Applet的使用与编写时会遇到的其他一些问题,分析了Applet的应用范围,以及Applet必须解决的安全性问题。本章还介绍了Applet与浏览器间的通信过程。
第19章说明了如何编写分布式应用程序,并简要讲解了Socket编程。但本章最主要的部分是对RMI(远程方法调用)的讨论。最后,我们要编写一个较为复杂的使用回调来实现的分布式系统。
第20章的主要内容为数据库编程,介绍了Java程序如何通过JDBC来使用SQL语句与关系型数据库之间完成信息的交互。
第21章讲解了如何为因特网上的服务器编写服务器程序,介绍了如何使用JSP来编写服务器程序。通过JSP可以让访问服务器的用户看到为他个人生成的Web页。位于服务器上的程序也可以与数据库进行通信。
致谢
许多人都为本书的最终出版付出了辛勤的劳动。首先,我们要感谢TISIP。正是在她的资助下,我们才得以完成本书。同样,我们要感谢Norwegian Technical Literary Fund[Det Faglitterare Fond]所给予的资助。
还有许多人为本书提供了大量的材料、观点和想法。在这里对以下各位致以由衷的谢意:Mildrid Ljosland和Tore Berg Hansen认真地审阅本书的原稿并提出了许多技术方面的意见和建议;感谢SimonThoresen工程师,他为30多道编程练习做出了解答,其中一些复杂问题的解答为本书提供了素材。
我们还要感谢三位老师:Bjorn Klefstad、Jan H. Nilsen和Grethe Sandstrak。他们首先在1999~2000学年中,与近100名学生一起使用本书的初稿作为教材。他们的教学经验给了我们很大的帮助,使得本书不断完善并充实。
Java Server Page这一章在挪威语版中还未加人。Tomas Holt为本章的内容提出了许多想法和建议,从而使我们最终完成了本章的编写。
Tara F. Chace在很短的时间内出色完成了本书全部内容的翻译,使其英文版得以面世。我们由衷地感谢她!