《Java程序设计教程(第3版普通高等教育十二五国家级规划教材)》讲解Java程序设计知识及其编程方法,包括Java语言的基础语法、结构化程序设计、面向对象程序设计、数组、字符串、向量、哈希表、泛型、枚举、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体和图形学程序设计以及数据库程序设计等。
《Java程序设计教程(第3版普通高等教育十二五国家级规划教材)》的章节编排与内容以人们学习与认知过程为基础,与公司的实际需求相匹配。内容力求简明,每章都附有习题,而且在附录中包含了图、表、例程以及类和接口的页码索引,在正文中采用特殊字体突出中心词,希望读者在轻松和欢乐之中迅速地了解并掌握Java程序设计的知识和方法,能应用到实践中去。
本书内容丰富,结构合理,语言简练,而且提供了丰富的例程,既可以作为计算机专业和非计算机专业的基础教材以及Sun公司的SCJP(Java程序员认证)考试的辅导教材,也可以作为需要使用Java语言的工程人员和科技工作者的自学参考书。
现代科学技术正在迅猛地发展着,计算机信息技术在其中发挥着巨大的作用。计算机技术已经渗透到各行各业,并推动着这些行业迅速发展。因此,如何尽快地掌握计算机知识,学好一门计算机语言,已经成为一个比较普遍面临的基本问题。本书就是在这种背景下编写的。
首先,Java语言本身是可以满足这种需求的一种计算机语言。它比C++计算机语言简单,去掉了在C++语言中一些不易理解或容易出错的概念和语法。此外,因为Java是一种较新的计算机语言,所以它在面向对象和多线程特性上比其他现有计算机语言更为纯粹一些。同时,Java语言在网络、平台无关性和安全性方面的优点也比其他计算机语言(如C++语言)更为突出。而且,学习Java程序设计,应用Java语言实现算法也比较容易,从而节省编程时间。同时,编写出来的Java代码比较容易得到复用和移植。
最初Java程序设计教材是应选修我主讲的“Java程序设计”课程的同学要求而编写的。在2003—2004年期间,共有三百多名清华大学本科生选修该课程。其中很多同学通过清华大学的教学评估系统以及给我写E-mail等方式强烈要求我编写一本Java程序设计教材。为此,我编写了该教材(雍俊海. Java程序设计. 北京:清华大学出版社,2004)。
我希望该教材能够给读者带来尽可能多的益处。对于学习而言,首先最重要的应当是对学习方法的引导。学习每门课程都有其内在的学习规律。顺应其规律,采用正确的学习方法一般将会产生良好的学习效果。对于有些初学者而言,在最开始学习的时候,要把握学习规律常常有难度;要按学习规律进行学习,常常会有很多来自自身的阻力。如果能够克服上述不利因素并加以坚持,相信会有事半功倍的效果。希望教材能够为适应这些学习规律添加一些辅助的约束力,从而帮助初学者克服阻力。
学习首先应当是“学以致用”。为此,我常常利用各种机会调研软件公司对Java程序设计的实际需求。如果能够从应用出发进行学习,那么应当会提高学习的效率。另外,学习过程的关键应当是实践。教材是实践的一种辅助工具。为此,本教材比较详细地讲解了Java语言编程环境的建立过程。希望读者在开始学习Java语言的时候能够建立起Java语言编程环境。
在教材每章的后面都有习题。对教材中的习题,都没有提供答案,真诚希望这些习题能够给读者增加一些自主性思考和实践练习的机会,意味着应当通过自己的思考去理解Java语言并求解问题,而且同时应当不要拘泥于某一种答案,即可以采用多种不同的方法求解相同的问题。这似乎会增加学习时间和学习难度,但实际上一般都会迅速提高学习的效率。在刚开始的时候,有些读者可能会不太习惯,但是如果能坚持,那么会迅速降低后续学习的难度,而且会对Java语言的掌握变得更加牢固。另外,希望读者能够理解习题编写的初衷,即它的主要目的是加强具有自主性思考的实践,而不是习题答案本身。希望读者能够经常总结实践过程的收获,享受其中的成就感,即使无法最终求解问题。因为教材提供的习题偏少,所以我还整理了一本习题集《Java程序设计习题集(含参考答案)》。这本习题集对判断正误题、填空题和选择题基本上都给出了答案,但只给出少量编程题的答案。这本习题集应当是本教材的一个有益补充。如果读者需要阅读编程样例,那么教材已经提供了158个例程,而且在建立Java语言编程环境之后,在Java系统的安装目录中也包含了一些例程。
在进行编程实践的时候,常常应当查阅在线帮助文档,而不是各种教材或参考书。这对很多初学者来说有很大的难度,难度主要来自于自身的惰性。现在越来越多的在线帮助文档已经有了相应的中文版本。即使直接使用英文的在线帮助文档,它的词汇量也不大,而且语法结构比较简单。另外,理解这些词汇的关键是实践,即通过实践理解或加深理解各种中文或英文术语。为了强化读者对在线帮助文档的使用,在2004年出版的那本教材中,基本上未将在线帮助文档的内容写入,而希望读者对照在线帮助文档进行教材的阅读。当然,它的一个负面作用是阅读教材的速度会变慢。但这种“慢”属于“磨刀不误砍柴工”,会给以后的工作或学习带来较大的益处,实际上一般都会提高工作与学习的整体效率。在本教材中,应很多读者的要求,将这些本来应当属于在线帮助文档的内容添加到教材中,但是强烈希望读者不仅不要忽略在线帮助文档,而且应当将重视的程度提高到足够的高度。当然,本教材不是简单地去翻译在线帮助文档,而是在该文档的基础上增加编程原理、经验和技巧的介绍,而且在内容上与在线帮助文档相比力求准确、简洁、易于理解。
本教材是在2004年版本的基础上编写而成的,除了添加相关的在线帮助文档内容之外,还增加了泛型、枚举、向量、哈希表、二维表格、后台线程、安全网络程序设计和像素处理等内容,并对数据库程序设计等章节全部重新进行改写,使得教材内容更加全面,体现出一定的手册特点。另外,为了方便读者查找教材知识点和中心内容,通过加黑加粗加框的方式强调各个部分内容的中心词以及各个基本概念或定义的核心词,并在附录中添加了图、表、例程以及类和接口的页码索引。同时本教材继承了2004年版本的一些特点,例如考虑了如何方便读者自学,希望各章内容的相关性尽可能地小。所有例程都在Java 1.7版本(也称为7.0版本)上编译运行。
本书既可以作为计算机专业和非计算机专业的基础教材,也可以作为需要使用计算机的工程人员和科技工作者的自学参考书。本书在编写与出版的过程中得到了许多朋友的帮助,这里一并表示诚挚的谢意。其中,读者与选修我所负责课程的同学起到了非常重要的作用,他们的建议和批评意见是教材发生变化的最重要的外在因素,这里再次对他们表示诚挚的谢意。清华大学的研究生杜敏、范怀宇、高扬、高跃、李勇、林鸿维、刘倩欣、刘曙、刘永宾、卢新来、潘峰、宋征轩、孙学卫、佟强、汪亚君、王天兴、王维勃、王治中、夏雨、许嵩罡、余忠冕、喻晓峰、张佳、张楠、张怡文和赵宏星等同学参与了本书的校对工作。本书也凝聚了他们的劳动结晶。欢迎广大读者特别是讲授此课程的教师对本教材进行批评和指正。我真诚希望这本教材能够给读者带来轻松和快乐,而我也会不断为此努力。真诚欢迎各种建设性意见。
清华大学出版社的网站http://www.tup.tsinghua.edu.cn可以下载与本教材相关的一些资料:①在本教材中用到的所有例程;②本教材的课件,该课件可能会不断更新。
雍俊海于清华园
2013年8月
雍俊海:清华大学计算机科学与技术系学士、硕士和博士,美国肯塔基大学计算机系博士后。现为清华大学软件学院教授和博士生导师。主要研究方向为计算机辅助几何设计、计算机图形学和计算机动画。目前负责清华大学计算机动画精品课程。2004年入选教育部“新世纪优秀人才支持计划”,2005年获得教育部自然科学一等奖,2006年获得国家杰出青年科学基金、清华大学青年教师教学优秀奖,2007年被授予清华大学研究生“良师益友”称号,2008年获得霍英东教育基金会高等院校青年教师基金。
第1章 绪论
1.1 历史简介
1.2 特点
1.3 开发环境的建立
1.4 Java程序及其执行过程
1.4.1 开发Java程序的工作流程
1.4.2 Java程序的工作原理
1.5 本章小结
习题
第2章 结构化程序设计
2.1 标识符和关键字
2.2 基本数据类型、直接量和变量
2.2.1 基本数据类型
2.2.2 直接量
2.2.3 变量 第1章 绪论
1.1 历史简介
1.2 特点
1.3 开发环境的建立
1.4 Java程序及其执行过程
1.4.1 开发Java程序的工作流程
1.4.2 Java程序的工作原理
1.5 本章小结
习题
第2章 结构化程序设计
2.1 标识符和关键字
2.2 基本数据类型、直接量和变量
2.2.1 基本数据类型
2.2.2 直接量
2.2.3 变量
2.3 运算符
2.3.1 算术运算符
2.3.2 关系运算符
2.3.3 布尔逻辑运算符
2.3.4 位运算符
2.3.5 赋值类运算符
2.3.6 条件运算符
2.3.7 其他运算符
2.4 控制结构
2.4.1 if语句和if-else语句
2.4.2 switch语句
2.4.3 for语句
2.4.4 while语句
2.4.5 do-while语句
2.4.6 break语句
2.4.7 continue语句
2.5 结构化程序设计
2.6 本章小结
习题
第3章 面向对象程序设计
3.1 类、域、方法和实例对象
3.2 继承性
3.3 多态性
3.3.1 静态多态性
3.3.2 动态多态性
3.4 包
3.5 封装性
3.6 修饰词abstract、static和final
3.6.1 修饰词abstract
3.6.2 修饰词static
3.6.3 修饰词final
3.7 接口
3.8 内部类
3.9 变量作用域范围与参数传递方式
3.9.1 变量作用域范围
3.9.2 方法调用的值传递方式
3.10 面向对象程序设计基本思想
3.11 本章小结
习题
第4章 数组、字符串、向量与哈希表
……
第5章 泛型、枚举与for语句的简化写法
第6章 异常处理、递归和单体程序设计方法
第7章 文件与数据流
第8章 Swing图形用户界面程序设计
第9章 小应用程序
第10章 编程规范和程序调试
第11章 多线程程序设计
第12章 网络程序设计
第13章 多媒体与图形学程序设计
第14章 数据库程序设计