
本书以Java 2语言为基础,详细介绍了面向对象的编程思想和方法。全书共12章,主要包括:Java 2编程基础、面向对象编程原理、接口、包、字符串类String和StringBuffer、异常处理、输入和输出、多线程、Java小程序、GUI布局管理、对象序列化、内隐类、Adapter类和事件处理等,非常适合于Java初学者阅读。此外,本书还突出了Java语言与C/C++的异同点,从而也非常适合于具有C/C++编程经验,又想转向Java编程的读者阅读。
本书语言流畅,实例丰富,全部代码都在JDK 5.0运行环境下调试通过,并配有大量的习题,同时在http://www.tupwk.com.cn 网站“资源下载”栏提供了该书的电子教案和程序示例源码。
本书特别适合于高等院校用作讲授Java 2编程语言和面向对象程序设计的教材。
前 言
Internet的发展极大地影响着计算机世界,同时也影响着人们的生活。目前,它已经成为全球范围最大和资源最为丰富的网络。美国的Sun Microsystems公司推出的Java语言是一种令人激动的新型语言,它具有面向对象、平台无关、可移植性强、安全、支持分布式等诸多特征,特别适合开发Internet程序,它能使网页中静态的图像和文本元素变得具有动感,栩栩如生。
网络是多台计算机的互联集合,Java则是网络中通用的世界语。目前,Java已经成为网络编程语言事实上的标准。从计算机程序设计语言的发展历史来看,Java语言是在C++语言之上推出的新一代语言,其语法与C++的语法相似,但剔除了C++中易于出错的成分。Java增加了诸如内存自动回收之类的新功能,删去了C++中令人费解的、不常用的成分,如运算符重载等。Java语言自从1995年问世以来,很快流行于全世界,并获得了极大成功。目前,许多软件项目已选择Java语言作为其编程语言,特别是计算机网络方面的软件,如大型软件ERP有许多就是采用Java语言开发的。目前越来越多的人开始学习并使用Java语言,全世界已经掀起了一股Java热潮。
Java 2的推出使Java的用途更加广泛,它适用于各种应用开发,尤其是网络应用和嵌入式系统开发。
本书的第一版受到了大量读者(高校教师、大学生、程序员等)的欢迎,他们在使用的过程中,给作者提出了一些很好的意见和建议,在此,作者表示深深的感谢。
本书特点
1. 抓住重要概念
Java语言属于高等院校计算机相关专业的学生要学习的一门专业课,一般安排在C/C++课程之后学习,理论教学的学时往往比较少,本科教学大多是24学时,专科教学是40学时。在如此少的学时内,教师不可能讲授完Java 2的所有知识,只能抓住重点内容进行介绍。针对这种情况,本书突出了Java与C/C++的不同之处,对这些语言的共性不作详细介绍,仅仅讲授Java 2的核心内容,这不但便于读者学习和掌握,同时也便于教师讲解。
本书将要介绍的主要知识点如下。
● 类:类是面向对象程序设计中的重要概念。本书从第4章起便开始介绍类及其应用。
● 字符串:Java将字符串作为一种对象进行处理,这与C/C++不同。本书单独开辟一章讲解用于处理字符串的类String和StringBuffer,并对各种处理方式的特点、性质和处理方法进行了分析。
● 异常处理:采用Java语言编写的系统不会因几个较小的错误而导致整个系统崩溃,因而异常处理是系统设计中不得不考虑的一个因素。
● 输入和输出处理:为了支持网络数据读写,Java提供了许多数据输入和输出类。本书分析和讲解了其中较常用的类,并着重介绍了对象序列化的知识。
● 多线程:多线程可以使程序并行执行,从而提高对系统资源的利用率。本书重点介绍了如何设计多线程程序。
● 事件处理:事件处理是图形用户界面程序设计的核心。本书深入分析了Java委托事件处理思想、组件事件、鼠标事件和键盘事件,并给出了3个比较大的示例。
2. 舍弃次要内容
考虑到Java语言课程的学时有限,以及Java与C/C++之间的关系,本书对Java开发工具的应用、基本数据类型、运算符、控制语句和类库,都没有作过多的讨论。例如,Java中的基本数据类型、运算符及控制语句等内容与C/C++类似,因而只是作了简单介绍;另外,由于Java的类库十分庞大,因此本书仅对常用的类库进行了介绍。
3. 力求培养学生的思考能力
本书就Java的一些实现技术进行了讨论和分析,并介绍了实现内幕。例如,作者结合自己的理解,分析了实例变量和方法的多态性问题(见第4.9节);结合String和StringBuffer类,分析了“+”号操作的实现内幕(见第6.2.3节)。这些内容对培养学生的思考能力提供了一定的帮助,有助于培养他们勤于思考、勇于实践的能力。
4. 以最新的J2SE 5.0为标准
本书讲述的内容以Sun公司的J2SE 5.0为标准,所有程序均在NetBeans 4.1集成开发环境下运行通过。
5. 突出Java与C/C++的异同点
如前所述,Java课程往往安排在C/C++课程之后。为了便于读者对Java的理解和掌握,本书在内容编排上突出了Java与C/C++的异同点,以免读者误解Java的知识点。
6. 力求通俗易懂
编写本书的目的是让读者通过自学或在教师的指导下,学会运用Java语言的核心要素,进行面向对象的程序设计。因此,本书围绕着如何进行Java编程展开。为了便于读者学习,作者力求使本书的语言通俗易懂,将复杂的概念采用浅显的语言来讲述,便于读者理解和掌握。
本书的编排特点
● 每章开始均点明本章要讲解的内容和学习要求。
● 每章结束时,都进行了小结,给出了该章内容的概括性描述,并对该章的知识点进行了归纳。
● 每章安排的习题都具有很强的操作性,读者可通过计算机进行练习。
● 书中重要的内容采用黑体标记,特别重要的内容采用下面加点的方式标记。
● 本书强调程序的可读性。书中的程序全部采用统一的程序设计风格。例如,类名、方法名和变量名的定义做到“望名知义”;语句的末尾或下一句的开头放上左大括号,而右大括号自成一行,并采用缩排格式组织程序代码;此外,对程序中的语句还尽可能多地进行了注释。希望读者在编程时模仿这种程序设计风格。
● 本书强调程序的可移植性,不以某个Java开发工具为标准,而是以Sun公司提供的最新J2SE 5.0为标准。
● 本书包含了大量的程序示例,并给出了运行结果。凡是程序开头带有编号的,都是完整的程序,可以直接在计算机上编译运行。
● 本书采用了醒目的标记来显示知识点。这些标记包括“注意”、“警告”和“思考”等,它们穿插在全书中,能帮助读者尽快找到重要的信息。这些标记的含义如下。
? 警告:这是警告信息,它们往往是容易混淆的知识点。
? 注意:值得关注的地方,其级别略次于警告。
? 思考:提出问题,引导读者进行思考,以培养读者的独立思考能力。
教学支持
本书的电子教案是采用PowerPoint 2000制作的,可以在讲课时用多媒体投影演示,这可部分取代板书。教师不仅可以使用本教案,还可以方便地修改和重新组织其中的内容以适应自己的教学需要。使用本教案可以减少教师备课时编写教案的工作量,以及因板书所耗费的时间和精力,从而提高单位课时内的知识含量。
我们向使用本教材的教师免费提供本书的电子教案和116个程序示例源码,它们的下载网址为http://www.tupwk.com.cn/downpage。需要本书习题参考答案的教师请发邮件至cwkbook@tup.tsinghua.edu.cn,邮件的主题请设为“获取《Java 2简明教程(第2版)》的参考答案”。为了更好地为您服务,请在邮件中附上姓名、工作单位、地址、联系电话、主讲课程等信息。
感谢读者选择本书,欢迎对本书的内容提出批评和修改建议,作者将不胜感激。作者的联系地址如下。
电子邮件地址:dc.pi@nuaa.edu.cn
通信地址:江苏省南京市南京航空航天大学信息科学与技术学院 皮德常(收)
邮政编码:210016
作 者
2006年3月
目 录
第1章 Java语言简介 1
1.1 Java语言的发展 1
1.2 Java语言的特点 2
1.2.1 简单性 3
1.2.2 面向对象 3
1.2.3 分布性 3
1.2.4 解释执行 4
1.2.5 健壮性 4
1.2.6 安全性 4
1.2.7 结构中立 5
1.2.8 可移植性 5
1.2.9 高效性 6
1.2.10 多线程 6
1.2.11 动态性 6
1.3 Java类库的概念 6
1.4 网络浏览器 7
1.5 Java开发工具 8
1.6 Java程序分类 9
1.6.1 使用NetBeans运行Java
应用程序 9
1.6.2 使用NetBeans运行Java
小程序 10
1.7 对Java程序的解释 11
1.7.1 程序注释方法 11
1.7.2 对Java应用程序的解释 11
1.7.3 对Java小程序的解释 13
1.7.4 对HTML文件的解释 13
1.8 编写Java程序的风格要求 14
1.9 本章小结 14
1.10 思考和练习 15
第2章 数据类型、运算符和表达式 17
2.1 常量 17
2.2 变量 18
2.2.1 整型变量 19
2.2.2 字符型变量 21
2.2.3 浮点型变量 21
2.2.4 布尔型变量 22
2.2.5 对原子类型变量生存空间
的讨论 22
2.3 变量赋值问题 23
2.4 数组 24
2.4.1 一维数组 24
2.4.2 二维数组 26
2.5 Java中的参数传递方式 27
2.6 Java的运算符 29
2.6.1 算术运算符 29
2.6.2 关系运算符 30
2.6.3 逻辑运算符 31
2.6.4 位运算符 32
2.6.5 三元条件运算符 33
2.6.6 "+”运算符 33
2.7 本章小结 34
2.8 思考和练习 34
第3章 控制语句 37
3.1 分支语句 37
3.1.1 if语句 37
3.1.2 switch语句 40
3.2 循环控制语句 43
3.2.1 while语句 43
3.2.2 do-while语句 44
3.2.3 for语句 45
3.3 break语句和continue语句 46
3.3.1 不带标号的break语句
和continue语句 46
3.3.2 带标号的break语句和
continue语句 46
3.4 本章小结 48
3.5 思考和练习 49
第4章 Java的类 51
4.1 类与对象 51
4.1.1 类与对象的区别 51
4.1.2 Java和C编程思想的区别 52
4.1.3 如何定义类 52
4.1.4 对象和引用 53
4.2 方法 55
4.3 实例变量和局部变量 56
4.4 构造函数 58
4.5 方法重载 60
4.6 关键字this 61
4.6.1 指代对象 62
4.6.2 指代构造函数 64
4.7 继承 65
4.7.1 继承的概念 65
4.7.2 关键字super 67
4.7.3 再论构造函数 68
4.8 方法的覆盖 69
4.8.1 覆盖与重载的区别 70
4.8.2 方法的动态调用 72
4.9 一个令人迷惑的问题:
多态性不适合于继承链中的
实例变量 74
4.10 finalize 75
4.11 static 77
4.11.1 static变量 77
4.11.2 static方法 79
4.12 关键字final 81
4.12.1 final数据 81
4.12.2 final方法 82
4.12.3 final类 82
4.13 组合与继承 83
4.14 抽象类和抽象方法 85
4.15 对象的类型转换 87
4.15.1 向上类型转换 88
4.15.2 向下类型转换 89
4.16 访问权限限制 89
4.16.1 友元 90
4.16.2 public 成员 91
4.16.3 private成员 91
4.16.4 protected成员 92
4.17 应用程序从键盘输入
数据举例 93
4.18 本章小结 94
4.19 思考和练习 95
第5章 接口和包 97
5.1 接口 97
5.1.1 接口的定义和应用 97
5.1.2 接口和抽象类的异同点 103
5.2 包 103
5.2.1 package语句 103
5.2.2 import语句 104
5.2.3 包应用举例 105
5.3 本章小结 108
5.4 思考和练习 108
第6章 字符串处理 109
6.1 字符串的分类 109
6.2 String类 109
6.2.1 字符串常量 110
6.2.2 创建String类对象 111
6.2.3 String类的常用方法 114
6.2.4 Java应用程序的
命令行参数 121
6.3 StringBuffer类 122
6.3.1 创建StringBuffer类对象 122
6.3.2 StringBuffer类的常用方法 123
6.3.3 String类中“+”操作的
技术内幕 127
6.4 应用举例 128
6.5 本章小结 131
6.6 思考和练习 131
第7章 异常处理 133
7.1 异常的层次结构 133
7.2 异常处理语句 135
7.2.1 try和catch语句 136
7.2.2 finally语句 138
7.2.3 throw语句 139
7.2.4 throws语句 140
7.3 自定义异常类 143
7.4 异常处理常用调试方法 144
7.5 本章小结 146
7.6 思考和练习 146
第8章 输入与输出处理 147
8.1 流的层次结构 147
8.2 File类 148
8.3 InputStream类和
OutputStream类 150
8.3.1 InputStream类的常用方法 150
8.3.2 OutputStream类的常用方法 151
8.3.3 FileInputStream类 151
8.3.4 FileOutputStream类 153
8.3.5 DataInputStream和
DataOutputStream类 154
8.4 RandomAccessFile类 156
8.5 对象流和对象序列化 160
8.5.1 对象流的概念 160
8.5.2 对象序列化 161
8.6 IOException类 164
8.7 本章小结 165
8.8 思考和练习 165
第9章 多线程 167
9.1 Java中的多线程的基本概念 167
9.2 线程类 168
9.2.1 多线程编程中常用的
常量和方法 168
9.2.2 线程的生命周期 169
9.2.3 创建多线程的方法 170
9.3 资源的协调与同步 174
9.3.1 线程调度模型 174
9.3.2 资源冲突 175
9.3.3 同步方法 177
9.4 线程间通信 178
9.4.1 通过封装共享变量实现
线程通信 178
9.4.2 通过系统方法实现
线程通信 180
9.5 本章小结 183
9.6 思考和练习 184
第10章 小程序 185
10.1 小程序的基本知识 185
10.1.1 小程序与应用程序
的区别 185
10.1.2 小程序标签的语法格式 186
10.2 小程序的生命周期 188
10.3 小程序常用方法 191
10.3.1 常用的输出方法 191
10.3.2 输出中的颜色控制 193
10.4 常用组件 195
10.4.1 组件和容器的关系 196
10.4.2 按钮 197
10.4.3 标签 198
10.4.4 文本框 199
10.4.5 文本域 201
10.4.6 选择框 203
10.4.7 下拉列表 205
10.4.8 列表 207
10.5 本章小结 209
10.6 思考和练习 209
第11章 GUI布局管理器 211
11.1 Swing常用容器 211
11.1.1 框架 211
11.1.2 面板 213
11.2 布局管理器 215
11.2.1 FlowLayout布局 215
11.2.2 BorderLayout布局 217
11.2.3 GridLayout布局 220
11.2.4 CardLayout布局 222
11.3 本章小结 226
11.4 思考和练习 226
第12章 事件处理 229
12.1 委托事件处理模型 229
12.2 组件事件处理 230
12.2.1 JButton事件处理 230
12.2.2 JTextField和JPassword
Field事件处理 232
12.2.3 JCheckBox和JRadio
Button事件处理 234
12.2.4 JComboBox事件处理 238
12.2.5 JList事件处理 240
12.3 鼠标事件处理 242
12.4 Adapter类 246
12.5 键盘事件处理 247
12.6 事件处理综合应用举例 250
12.6.1 舞动的字符 250
12.6.2 播放声音剪辑 253
12.6.3 网络浏览器 255
12.7 本章小结 258
12.8 思考和练习 258
参考文献 259