
本书是《Java程序设计》的第二版。它从Java语言的基本特点入手,全面介绍了Java语言的基本概念和编程方法,并深入介绍了Java的高级特性。本书共分为12章,涉及Java中的基本语法、数据类型、类、异常、界面设计、小应用程序、I/O数据流、线程及网络功能等内容。这些内容基本覆盖了Java的实用技术,是进一步使用Java进行技术开发的基础。
本书内容详尽,实例丰富,在每章最后均列出了若干习题,以方便教学。本书适合作为高等学校教材,也可作为专业人员的参考书。
Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。
现在越来越多的高等学校计算机系开设了Java语言这门课程,国内外已经出版了较多的教材。针对Java语言的教学目的,结合国内教学的特点,我们于2001年编写了《Java程序设计》一书,并配套编写了《Java程序设计题解与上机指导》。承蒙读者的厚爱,这两本书被很多所大学选作教材。
近年来,Java语言版本不断更新,功能逐步完善,2001年编写的教材中已有的部分内容不再适用,而需要添加Java语言新版本中增加的内容,删除一些不再应用的部分。因此我们全面修订原书,推出第二版,旨在向读者更全面系统地介绍Java语言。
第二版所做的修订集中在以下几个方面。
(1) 将原来分散在第5章和第11章的内容集中起来,系统介绍了Java语言中类的概念。由于Java语言是一种严格的面向对象的语言,编写的所有代码都限定在类内完成,考虑到不熟悉这种程序设计思路的读者可能很难从面向过程的模式中转变过来,因此本书的第一版分两步向读者介绍类的内容。现在的情况已有了很大的改变。面向对象的程序设计思想已是各学校程序设计课程的主要内容,学习Java时,相信读者已有了初步的基础,所以本版中将两章合为一章。
(2) 将原来第7章、第8章及第9章中关于组件的内容合并在新版的第7章中介绍。程序界面一直是受关注的焦点,程序的功能往往蕴藏在良好的界面中,在一定程度上也反映了程序员的设计水平。Java语言在组件功能方面做了很大的改进,在早期的JDK版本中提供的Java抽象窗口工具集(abstract window toolkit,AWT)基础之上,又提供了功能更强的Swing。这部分内容在第8章中介绍。
(3) 相关章节都增加了一些例题。对于可以直接运行的代码,以“程序”标注,并在J2SDK 1.5平台下完成了调试,大部分都给出了运行的结果;不完整的代码以“例”来标注,读者可以继续完成不足的部分。习题中也增加了部分内容。
(4) 有些章节重新组织了内容,以适应新的变化。
本书从Java语言的基本特点入手,详细介绍了Java语言的基本概念和编程方法,帮助读者深入了解Java的高级特性。本书共分为12章,涉及Java中的基本语法、数据类型、类、异常、界面设计、小应用程序、I/O数据流、线程及网络功能等内容。这些内容基本覆盖了Java的大部分技术,是进一步使用Java进行技术开发的基础,愿本书能成为读者进入Java殿堂的铺路石。
作为教材,在每章的最后列出了若干习题,供读者参考。本书不仅适合Java语言的初学者使用,也可作为专业人员的参考书。
计算机技术是不断发展、不断完善的技术,Java语言也是如此。在本书出版的过程中,Java语言仍没有停止它的完善过程。本书中有些内容是以目前的版本为标准,当推出更高版本的Java时,读者应参考这些新标准。
在编写本书的过程中,得到了南开大学信息技术科学学院卢桂章教授、吴功宜教授、陈有祺教授、刘璟教授、周玉龙教授、朱耀庭教授等的亲切关怀和悉心指导。每当遇到困难,清华大学出版社焦虹编辑总是给予热心鼓励和全力支持,在此一并表示深深的感谢。我们非常感谢清华大学出版社为我们提供的这个机会,也同样感谢读者您在众多的Java参考书中选中了本书。
本书由辛运帏、饶一梅、马素霞编写,硕士生温小艳调试了大部分代码。由于作者的水平有限,书中难免有错误和不妥之处,恳请广大读者特别是同行专家们批评指正,感谢您的指导。
编者2006年6月于南开园
概述1.1什么是Java语言1
1.1.1Java语言的特点1
1.1.2Java的三层架构3
1.1.3Java语言的目标3
1.1.4Java虚拟机4
1.1.5垃圾收集5
1.1.6代码安全5
1.2一个基本的Java应用程序8
1.2.1开发环境的安装8
1.2.2Java应用程序9
1.3程序的编译和运行11
1.3.1编译11
1.3.2运行11
1.4常见错误12
1.4.1编译时错误12
1.4.2运行时错误13
1.5使用Java核心API文档14
习题17
标识符和数据类型2.1Java的基本语法单位18
2.1.1空白、注释及语句18
2.1.2关键字20
2.1.3标识符20
2.2Java编码体例21
2.3Java的基本数据类型22
2.3.1基本数据类型22
2.3.2类型转换24
2.3.3变量、说明和赋值25
2.4复合数据类型26
2.4.1概述26
2.4.2Java的复合数据类型27
2.5类和对象的初步介绍27
2.5.1Java中的面向对象技术27
2.5.2Java中的类定义29
2.5.3Java中与OOP有关的关键字30
2.5.4类定义示例33
2.5.5创建一个对象36
2.5.6引用变量的赋值38
2.5.7自动初始化和null引用值39
2.5.8术语概述39
习题40
表达式和流程控制语句3.1表达式42
3.1.1操作数42
3.1.2运算符46
3.1.3表达式的提升和转换48
3.1.4数学函数49
3.2流控制50
3.2.1表达式语句50
3.2.2块50
3.2.3分支语句51
3.2.4循环语句56
3.2.5break与continue语句59
3.2.6注释语句61
习题62
数组、向量和字符串4.1数组65
4.1.1数组说明65
4.1.2创建数组66
4.1.3数组边界69
4.1.4数组元素的引用69
4.1.5多维数组70
4.1.6数组复制75
4.2Vector类76
4.2.1概述77
4.2.2Vector类的构造方法77
4.2.3Vector类对象的操作78
4.2.4Vector类中的其他方法79
4.2.5Vector类的使用举例80
4.3字符串类型82
4.3.1字符串简述82
4.3.2字符串说明及初始化82
4.3.3字符串处理82
4.3.4几个特殊处理84
习题86
进一步讨论对象和类5.1抽象数据类型88
5.1.1概述88
5.1.2定义方法89
5.1.3按值传送92
5.1.4重载方法名94
5.2对象的构造和初始化95
5.2.1显式成员初始化95
5.2.2构造方法95
5.2.3默认的构造方法97
5.2.4构造方法重载97
5.2.5finalize方法98
5.3this引用99
5.4子类99
5.4.1“is a”关系100
5.4.2extends关键字1015.4.3单重继承102
5.4.4多态性104
5.4.5方法自变量和异类集合104
5.4.6instanceof运算符105
5.4.7转换对象106
5.5方法重写107
5.5.1方法重写示例107
5.5.2应用重写的规则111
5.5.3父类构造方法调用113
5.6Java包114
5.6.1Java包的概念114
5.6.2import语句115
5.6.3层次关系及classpath环境变量116
5.6.4访问权限与数据隐藏118
5.6.5封装119
5.7类成员120
5.7.1类变量120
5.7.2类方法122
5.8关键字final124
5.8.1终极类124
5.8.2终极方法125
5.8.3终极变量125
5.9抽象类127
5.10接口129
5.10.1接口的定义129
5.10.2接口的实现130
5.11内部类133
5.11.1内部类的概念133
5.11.2匿名类135
5.11.3内部类的工作方式136
5.12过时信息137
习题139
Java语言中的异常6.1异常142
6.2异常示例145
6.3异常处理145
6.3.1try,catch和finally语句146
6.3.2再讨论前面的示例146
6.3.3公共异常147
6.4异常分类148
6.5抛出149
6.6创建自己的异常149
习题151
Java的图形用户界面设计7.1AWT与Swing152
7.2容器153
7.2.1顶层容器153
7.2.2使用JFrame创建一个应用程序154
7.2.3内容窗格154
7.2.4面板156
7.3布局157
7.3.1一个简单的例子157
7.3.2FlowLayout布局管理器159
7.3.3BorderLayout布局管理器161
7.3.4GridLayout布局管理器162
7.3.5CardLayout布局管理器164
7.3.6BoxLayout布局管理器166
7.3.7其他布局管理器171
7.4事件处理172
7.4.1事件处理模型172
7.4.2事件的种类174
7.4.3一个较复杂的例子176
7.4.4多监听程序178
7.4.5事件适配器178
习题180Swing组件8.1按钮182
8.1.1普通按钮182
8.1.2切换按钮、复选按钮及单选按钮187
8.2标签192
8.3组合框195
8.4列表198
8.5文本组件203
8.5.1文本域204
8.5.2文本区208
8.6菜单组件211
8.6.1菜单栏211
8.6.2菜单212
8.6.3菜单项212
8.6.4复选菜单项和单选菜单项214
8.6.5弹出式菜单217
8.7对话框、标准对话框与文件对话框220
8.7.1对话框220
8.7.2标准对话框221
8.7.3文件对话框226
8.8控制组件外观229
8.8.1颜色229
8.8.2字体229
8.8.3绘图231
习题234
Java Applet9.1编写Applet237
9.2Applet的方法和Applet的生命周期239
9.3Applet的运行240
9.3.1用于显示Applet的方法240
9.3.2appletviewer2429.3.3HTML与〈applet〉标记243
9.3.4Applet参数的读取244
9.3.5Applet与URL246
9.4在Applet中的多媒体处理247
9.4.1在Applet中显示图像247
9.4.2在Applet中播放声音248
9.5Applet的事件处理250
9.6Applet与普通应用程序的结合251
习题253
Java数据流10.1数据流的基本概念254
10.1.1输入数据流255
10.1.2输出数据流256
10.2基本字节数据流类257
10.2.1文件数据流257
10.2.2过滤流259
10.2.3管道数据流261
10.2.4对象流262
10.2.5可持续性263
10.3基本字符流266
10.3.1读者和写者266
10.3.2缓冲区读者和缓冲区写者268
10.4文件的处理272
10.4.1File类272
10.4.2随机访问文件274
习题275
线程11.1线程和多线程277
11.1.1线程的概念277
11.1.2线程的结构27811.2线程的状态279
11.3创建线程280
11.3.1创建线程的方法一——继承Thread类281
11.3.2创建线程的方法二——实现Runnable
接口283
11.3.3关于两种创建线程方法的讨论285
11.4线程的启动286
11.5线程的调度286
11.6线程的基本控制288
11.6.1结束线程288
11.6.2检查线程289
11.6.3挂起线程289
11.7同步问题291
11.7.1线程间的通信291
11.7.2线程间的资源互斥共享293
11.7.3对象的锁定标志295
11.7.4同步方法296
11.8死锁297
11.9线程交互——wait()和notify()299
11.9.1问题的提出299
11.9.2解决方法300
11.9.3守护线程301
11.9.4综合应用302
习题307
Java的网络功能12.1概述309
12.2使用InetAddress311
12.3统一资源定位器312
12.3.1URL的概念312
12.3.2URL的构造方法313
12.3.3与URL相关的异常314
12.3.4获取URL对象属性314
12.3.5读入URL数据31512.4Socket接口318
12.4.1Socket的基本概念319
12.4.2Socket通信的基本步骤321
12.4.3Socket通信的程序设计321
12.5Java编程综合实例323
习题331
参考文献332