Java程序设计大学教程
作者 : 刘艺 等
出版日期 : 2006-02-24
ISBN : 7-111-18279-0
定价 : 29.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 310
开本 : 16开
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书以Java语言为载体,通过讨论Java程序设计的一般过程和方法,重点讲述了程序设计基础、面向对象程序设计、算法与数据结构、GUI程序设计和Web程序设计的知识,并涉及计算机科学基础、数据和控制、程序设计理论、软件工程等四大知识领域。本书同时详细分析了Java作为通用程序设计语言的本质特征和语法规则,并以大量Java程序实例演示说明有关应用程序的设计过程,介绍主流的程序设计思想方法,培养读者的代码编写能力。
  本书内容深入浅出,覆盖面广,图文并茂,独具特色。全书采用案例教学法,既有丰富的理论知识,也有大量的实战范例,更提供了精心设计的课后练习。


本书特点
●面向Java初学者的程序设计入门和实践读物
●汇集一线教师教学经验的大学计算机程序设计课程教材
●结合国内计算机教学改革成果,与世界一流计算机课程体系CC2004 接轨
●本教材采用Java 2 Platform Standard Edition 5.0与SUN公司开源IDE工具NetBeans 4.1
●本教材配有PPT课件、网站在线支持,以及教辅书《Java程序设计大学教程习题解答与课程设计》

图书特色

图书前言

欢迎进入Java的世界学习计算机程序设计课程。这将是一次美妙和激动人心的探索,可能会为你今后从事充满挑战和令人兴奋的职业奠定软件编程的基础。众所周知,计算机在我们的日常生活中扮演着一个重要的角色,而且在未来仍将继续扮演这一重要角色。
  计算机科学是一个充满挑战和发展机遇的年轻学科,而计算机程序设计则是这门学科的重要基础。随着计算机在各行各业的广泛应用,很多非计算机专业也把计算机程序设计列为公共基础课之一。
  既然是作为基础课的教材,那么本书所假定的读者可以既不具有程序设计经验,也没有面向对象技术的概念和Web程序设计知识,甚至没有太多的计算机知识。即使是一个对计算机一无所知的人,也能通过本书而获取所有有关的基本知识,了解和掌握程序设计。如果读者是一位很有经验的程序员,已在其他程序设计语言中掌握了一定的开发技能,也能在本书中发现很多有用的信息。

本书与程序设计课程
  计算机程序设计既是一门概念复杂、知识面广的理论课,也是一门面向实战、需要动手的实践课。几乎所有的编程初学者都梦想着有朝一日能在计算机上驰骋,让一行行程序在自己敲击键盘的手下源源不断地流出,真正成为驾驭计算机的主人。然而,学完程序设计课程后,实际开始编写程序时,却往往会觉得难以下手、无所适从。尽管自己刻苦学习,高分通过考试,但并不能体会到所学知识给实际编程带来的便利和优势。
  为什么会这样 一方面原因是我们的学生在学习时没有掌握程序设计的一般过程,没有深入了解通用程序设计语言的本质规律。另一方面是我们的教学体制僵化、教材陈旧,教学思想和内容跟不上时代的发展,与软件开发实际情况脱节。
  计算机程序设计语言是一种实现对计算机操作和控制的人造语言,与人类的自然语言有一定差距。程序设计语言仅仅是程序设计的手段和途径而并不是程序设计全部。因此,掌握程序设计语言并不意味着就精通程序设计,就能写出优秀的程序。实际上,程序设计所涉及的领域、知识和技能要远远超出我们的想象。因此本教材对于程序设计课程在一些方面有着自己独特的理解。

程序设计首先是一个过程
  程序设计过程通常分为问题建模、算法设计、编写代码和编译调试4个阶段。不同阶段的任务是相对独立的,不能混为一谈。即使是一个比较简单的程序,我们也应该养成先分析,再下手,最后调试的习惯,严格遵循程序设计过程。因为在缺乏对问题深入、全面分析的情况下,就匆匆动手编写程序,将会增加失败的风险,带来后期修改、维护的麻烦。因此,要学习程序设计,不但不能回避程序设计过程,更要从软件开发过程和软件生命周期的高度来了解和掌握程序设计过程,从一开始就要养成遵从程序设计准则的良好习惯。有别于其他程序设计教材,本书强调程序设计过程和软件开发过程的重要性,为读者介绍了有关软件建模与测试的基本原理和技术。特别考虑到现代软件开发依赖于集体合作和项目管理,是汇集了很多程序设计过程的更大的过程。因此,除了在书中增加有关软件过程实施和管理的介绍外,还把如何编写规范的程序代码作为重要一节,使得读者在学习程序设计之初就了解程序设计的规范,注重编写程序的规范性、正确性和可靠性,对于培养将来参与大型软件开发所需要的分工合作团队成员十分重要。

程序设计还是一种解决问题的方法和能力
  程序设计课程主要是学习用计算机解决问题的思考方法,培养编程应用能力,而不是仅仅学会某个程序设计语言的语法规则。很多学生能弄清楚循环、if-else结构以及算术表达式,但很难把一个编程问题分解成结构良好的Java程序。还有误人子弟的教材,不用面向对象的思想、方法去讲Java,而是用变量、过程、函数等老概念来硬套Java语法,使学生不会利用面向对象语言的优势来解决问题。这些都暴露了程序设计教学中偏重语法细节,忽略总体思想方法和整体过程实现的问题。
  尽管程序设计理论的发展为解决问题提供了很多有效方法,但对于初学者而言,学习Java的捷径应该是抓住最核心的思想方法:面向对象方法。为实现这个目的,我们把面向对象分析和设计作为重点,围绕面向对象的抽象性、继承性、多态性和封装性这4个本质特点阐述面向对象程序设计的基本方法。通过强调基本概念、基本方法、基本应用,并结合案例教学,为初学者奠定扎实的程序设计基础,树立良好的编程思想。通过大量的实例分析和范例程序设计过程演示,我们力图给初学者建立完整印象,培养其从整体上思考问题和解决问题的编程能力。

程序设计最终是对程序设计语言的应用
  程序设计和程序设计语言存在着有趣的辩证关系。程序设计可以用不同的程序设计语言来实现,但是不同的程序设计语言又决定着能使用怎样的程序设计思想方法和技术技巧,制约着程序设计的实现能力和效率。本书使用Java作为学习程序设计的语言,是因为Java不但继承了C语言简洁优美的风格,而且还具有面向对象语言的真正优势。更可喜的是Java还在继续发展,不断吸取现代编程语言的精华。这一切使得Java具备现代通用程序设计语言的主流特征,特别适合跨平台的编程使用。因此学习Java语言,掌握Java程序设计方法是本课程的另一个重要任务。
  本书虽然以Java语言为背景介绍程序设计语言的相关知识,但是重点强调的是一些通用的思想方法,而不是对Java语言及其类库的全面介绍。读者应该注意到,不同的程序设计语言其语法和风格可能迥异,但无论哪一种语言,都是以数据(类型)、操作(运算)、控制(逻辑流程)为基本内容。更进一步讲,学习一门程序设计语言,应该超越语言的具体表述格式,不拘泥于繁芜的语法现象,而是站在抽象的高度,掌握程序设计的基本概念,深入了解程序设计语言的本质规律。这样将会为深入学习其他程序设计语言带来便利。

本书的结构
  本书是为计算机程序设计课程编写的。该课程是理工科类大学的公共基础课,它通过讲授一门具体的计算机语言,来帮助学生掌握程序设计的基础知识和基本应用。同时,对于未接触过计算机科学的学生,本书还涉及和介绍了与程序设计相关的计算机科学知识。全书由程序设计基础、面向对象程序设计、算法与数据结构、Java应用程序与applet程序设计、程序设计高级话题等5个部分组成本书的核心知识,并涉及计算机基础、数据和控制、程序设计理论、软件工程知识等四大知识领域,汇集18个相关知识点。虽然在本书中讨论的内容有一定的理论性,但这些理论都是用实际程序问题表达的,是为了帮助读者建立完整的程序设计知识体系结构。
  本书的组织结构如图1所示,其中有些知识点是通过各章节的迭代,循序渐进,不断深入的。
图1  本书组织结构与知识点

  本书分为10章,各章的主要内容如下:
  * 第1章 绪论  介绍程序设计的基本概念,初步认识Java。重点帮助读者搞清计算机程序、程序设计、程序设计语言等基本概念。同时介绍Java程序的编写、编译和运行,以及相关的环境设置和工具使用。
  * 第2章 程序设计基础  这一章首先通过一个简单的Java程序来了解程序的组成结构、语言要素和编写规范,建立程序的基本概念,然后以数据和运算作为程序设计的基础,通过讲解数据和数据类型、变量和常量、表达式和运算符以及流程控制,开始Java程序设计语言的探索之旅。
  * 第3章 面向对象与对象模型  介绍面向对象的概念和对象建模的方法,讲解Java对象模型中的核心部分:类及类的成员。使读者学会如何创建和使用Java对象。
  * 第4章 面向对象程序设计  本章将站在面向对象程序设计原则和方法的高度,围绕抽象性、继承性、多态性和封装性4个特点讲解面向对象程序设计的基本方法。重点讨论继承、多态和接口的编程。
  * 第5章 算法与数据结构  介绍算法的概念及常用算法,并通过数组、链表、栈、队列等数据结构以及Java对象容器,讨论算法的应用及算法的Java程序实现。
  * 第6章 图形用户界面  讲解Java图形界面应用程序的一般设计方法,包括如何创建窗体、设计界面、管理布局、绘制图形、使用组件、事件编程等。通过这一章的学习可以掌握图形用户界面应用程序的设计方法和编程技巧。
  * 第7章 程序设计案例分析  通过剖析和研究一个典型的Java应用程序设计案例,读者不仅可以对窗体、菜单、组件、事件、布局等的设计有一个感性的综合了解,还可以进一步理解Java应用程序的基本架构和完整设计过程,掌握使用开发工具(NetBeans IDE)完成程序设计项目的一般过程和方法,积累实际编程经验。同时还可学会利用NetBeans IDE的可视化设计功能提高程序设计效率。
  * 第8章 applet与Web编程  本章详细讲述applet的原理、特性、安全机制以及编程方法,并讨论applet在Web编程中的应用。同时还介绍了Web编程的一些有用知识。
  * 第9章 开发过程与程序质量保证 介绍软件的开发过程及过程的实施管理,从程序质量保证的高度讨论了程序的调试与测试,重点讲述了Java程序的调试方法、程序中的异常处理以及单元测试方法。
  * 第10章 线程、文件与串行化  本章将讨论有关线程及输入/输出的一些高级话题。通过本章的学习,读者可以了解多任务、进程和线程、线程模型、流、文件、输入/输出、对象串行化等诸多概念和编程方法,为Java的高级应用打下基础。
  尽管本书包含了以上章节内容,但实际的教学进度和授课内容可以灵活确定,因为这要取决于课堂教学的安排或读者实际技能及对所讨论问题的熟悉程度。教学课时建议安排在50~80课时之间。

本书的读者对象
  * 程序设计入门学生,选用本书作为程序设计基础教材,希望掌握一门优秀、实用、主流的程序设计语言,为深入学习其他计算机课程奠定基础。显然Java作为一种跨平台的面向对象编程语言能胜任教学的需要,从而为学习程序设计提供更全面的知识结构体系。
  * 因工作或科研需要希望迅速掌握Java编程以完成不太复杂的编程任务的非专业编程人员。
  * 非计算机专业的编程爱好者,改行从事程序员工作,有一些实际的Java编程经验,但没有系统学习过相关专业知识。希望通过本书重温程序设计知识,补习相关概念和理论。
  * 有一定经验的程序员,已在其他编程语言及软件环境中掌握了一定的开发技能,但没有使用过Java语言或对Java语言一知半解,希望在本书中系统学习Java程序设计,发现Java与其所熟悉语言的不同点,并由此掌握Java语言。

本书的特色
  本书的一些特色不仅使得本书与众不同,同时也特别有助于入门者的学习。

概念和知识面
  贯穿本书,我们始终强调概念要比数学模型更重要,我们认为对概念的理解必然左右对模型的理解,概念与模型的结合可以帮助读者更好地掌握所学内容。同时,我们还特别注意开阔读者的知识面,使读者能够站在现代软件开发和软件工程这个比较开阔的层面上了解程序设计,而不是局限于繁琐的程序设计语言规则。为此,我们在全书中贯穿了软件工程的思想,使用了诸如UML建模、单元测试等与程序设计相关的软件工程实用方法。

代码编写和工具使用能力并重
  初学Java程序设计的人,大多数会被Java强大的功能所吸引,同时也会被Java的代码编写难度所吓倒。传统的教材让学生使用记事本那样的简单文本编辑器编写Java程序,并在控制台中通过命令行编译和调试程序,无形之中增加了初学者学习的难度,这种方法在本教材中并不提倡。选用优秀的Java集成开发环境(IDE)作为教学平台,一方面可以帮助初学者发现代码错误(包括难以察觉的拼写错误),方便程序的调试和编译;另一方面可以让学生了解软件的实际开发环境,学会利用工具来提高学习和编程的效率。
  鉴于快速应用开发(RAD)的思想正在改变程序设计的方法,而高效率的可视化程序设计实际上已经重造了开发者的工作平台。以前编写Java程序是通过基于字符的编辑器键入一条条语句的方法,现在某些优秀的Java IDE也能像Delphi、VB那样支持我们交互式地在窗体上单击和拖放(click-and-drop)组件,并使用短小精悍的代码段连接它们。过去,即使是开发很小的Java 图形界面应用程序,也需要很多细心而且繁杂的基础工作,先写出非常长的源代码文件,然后才可编译和测试其结果。Java IDE工具的出现和不断发展改变了这种模式。本教材中,我们采用SUN公司的开源IDE工具NetBeans,在强调编程能力的同时,我们鼓励学生使用IDE工具来提高程序设计的效率和质量。
  鼓励学生使用IDE工具并不是削弱他们编写代码的能力,更不是宣扬那种无须写任何程序就可以用控件组装应用程序的神话,而是为了让学生把精力用于学习程序设计上,而不是浪费在繁琐的配置、设置、调试和重复输入字符上。其实这也是IDE工具进化的目标之一,即让程序员面对真正的程序设计任务,而不是浪费在窗口的几个GUI组件上或繁琐的手工调试上,程序员的创造力应该体现在结构优良,性能出众,稳定可靠,易于扩展的程序设计上。
  真正的程序设计需要很多知识、技能和创造力。基于IDE工具的可视化程序设计只是手段,不是重点。即使是在GUI界面的设计中,我们也同时采用了可视化程序设计和非可视化程序设计两种实践,以便读者学习、比较。因为本书的重点仍然是学习程序设计语言的本质,培养代码的编写能力。这与强调代码编写和工具使用能力并重并不矛盾。

图文并茂
  阅读本书后将会发现本书图文并茂。全书有100多幅精心设计的图片,这些图片可以帮助读者增进对文字的理解。

示例程序
  本书尽可能地运用示例程序来表述概念和模型,同时尽量提供完整的范例程序和程序设计过程。本书所有示例程序和习题中的程序都已在JDK 1.5中编译运行通过,建议读者在学习时选择Java 2标准版JDK 1.5的版本。

习题
  每一章的结尾都包括本章习题。习题包括了三部分内容:复习题、测试题和练习题。
  * 复习题:测试本章中所有的要点和概念,帮助学生复习巩固重点内容。
  * 测试题:通过选择题客观地测试学生对所学知识的理解和掌握程度。
  * 练习题:通过课后练习题,检查学生能否运用掌握的概念和知识独立思考,解决问题。
  本教材配有专用的习题解答及课程设计教辅书籍《Java程序设计大学教程习题解答与课程设计》。

CC 2004课程体系
  从1990年开始,美国电气和电子工程师协会计算机社团(the Computer Society of the Institute for Electrical and Electronic Engineers,简称IEEE-CS)和计算机学会(Association for Computing Machinery,简称ACM)就着手开发新的本科生计算机课程体系。1991年联合推出了Computing Curricula 1991(简称CC 1991),当时仅限于Computer Science(计算机科学)和Computer Engineering(计算机工程)两个专业的课程。1998年秋季开始,IEEE-CS和ACM联合投入新的力量更新该课程体系,并在2001年开发出Computing Curricula 2001(简称CC 2001),并将该计算机课程体系扩大到Computer Science(计算机科学)、Computer Engineering(计算机工程)、Software Engineering(软件工程)、Information Systems(信息系统)等多个专业。在CC 2001的实施中,专家们发现,计算机课程所涉及的学科专业和教学范围正在不断扩大,而且在内容和教学方面的变化也日新月异。IEEE-CS和ACM意识到10年一次的Computing Curricula修订已经难以满足要求,于是联合国际信息处理联合会(International Federation for Information Processing,简称IFIP)、英国计算机协会(British Computer Society,简称BCS)等更多的组织开发了Computing Curricula 2004(简称CC 2004),使之成为开放的、可扩充的、适合多专业的、整合了计算机教学相关原则体系观点的课程体系指南。其结构参见图2。
图2  CC 2004结构图
  为了进一步反映当代计算机科学技术的发展水平,与国际主流计算机教育思想接轨,并通过多年来对IEEE-CS和ACM的Computing Curricula课程体系的跟踪研究,我们在本教材的编写中,借鉴了CC 2004课程体系的最新研究成果,同时吸取了国外同类教材的优秀经验,目的是进一步推动教材和课程改革,培养有竞争力的人才。

致谢
  本书是在作者多年科研和教学基础上编写的,主要参考了作者已发表的文章和著作以及教学中积累的资料。书中还参阅了其他中外文教材、资料,由于无法在此一一列举,现谨对这些教材和资料的作者表示衷心的感谢。
  参与本教材编写工作的人员还有昆明理工大学的刘迎春,海军工程大学的王永斌、周安栋、段立、罗兵、李启元、杜军、吴苗、曹旭峰,南京航空航天大学无人机研究所的吴英,太原师范学院计算机中心的刘星,以及杨德刚、刘藩、吴永逸、洪蕾等。
  一本书的出版离不开许多人的支持,尤其是这本书。为此感谢我们的家人和朋友。我们在忍受写作之苦的同时,牺牲了与他们共享天伦之乐的宝贵时光。
  由于作者水平有限,本书中难免有疏漏和不妥之处,恳请各位专家、同仁和读者不吝赐教,并在此表示特别感谢!


刘艺
http://www.liu-yi.net

封底文字

推荐序

图书目录

第1章  绪论 1
1.1  什么是程序设计 1
1.1.1  程序与计算机 1
1.1.2  算法与数据结构 4
1.1.3  程序设计过程 6
1.2  程序设计语言 7
1.2.1  发展历史 8
1.2.2  语言的类型 8
1.2.3  高级语言的分类 9
1.3  Java语言介绍 10
1.3.1  Java发展的历史 10
1.3.2  Java是什么,Java不是什么 11
1.3.3  下载JDK搭建Java平台 13
1.4  Java程序的编写、编译和运行 15
1.4.1  使用命令行工具 15
1.4.2  使用Java编辑器TextPad 16
1.4.3  使用集成开发环境NetBeans IDE 17
1.4.4  优秀Java开发工具介绍 23
1.5  本章习题 25
第2章  程序设计基础 27
2.1  程序 27
2.1.1  初识Java程序 27
2.1.2  标识符和关键字 30
2.1.3  编写规范的程序代码 31
2.2  数据和数据类型 34
2.2.1  数据 34
2.2.2  常量和变量 36
2.2.3  数据类型 37
2.3  表达式与运算符 45
2.3.1  表达式 45
2.3.2  运算符 45
2.3.3  运算符的优先级 49
2.4  流程控制 49
2.4.1  顺序结构 50
2.4.2  选择结构 50
2.4.3  循环结构 55
2.5  本章习题 61
第3章  面向对象与对象模型 67
3.1  面向对象的概念 67
3.1.1  面向对象基本原理 67
3.1.2  建立面向对象的思维 69
3.1.3  UML和对象建模 70
3.2  类 73
3.2.1  什么是Java类 73
3.2.2  类成员 74
3.2.3  类成员的可访问性 74
3.3  方法 76
3.3.1  什么是方法 76
3.3.2  方法参数 78
3.3.3  静态字段和静态方法 79
3.4  对象 82
3.4.1  理解对象 82
3.4.2  使用对象 83
3.4.3  对象之间的关系 90
3.5  本章习题 91
第4章  面向对象程序设计 96
4.1  原则和方法 96
4.2  继承 98
4.2.1  使用继承 98
4.2.2  继承与合成 108
4.3  多态 110
4.3.1  多态与动态绑定 110
4.3.2  方法的绑定 113
4.4  接口 115
4.4.1  接口的概念 115
4.4.2  Java接口 116
4.4.3  接口应用实例 120
4.5  本章习题 125
第5章  算法与数据结构 129
5.1  算法 129
5.1.1  算法的描述 130
5.1.2  常用算法 132
5.2  数组 136
5.2.1  数组的创建和使用 136
5.2.2  多维数组和不规则数组 139
5.2.3  排序 142
5.2.4  查找 144
5.3  对象容器 146
5.3.1  Java容器框架 146
5.3.2  Collection与Iterator 148
5.3.3  List及ListIterator 150
5.4  抽象数据类型 154
5.4.1  链表 154
5.4.2  栈 156
5.4.3  队列 158
5.5  本章习题 159
第6章  图形用户界面 162
6.1  GUI编程基础 162
6.1.1  概述 162
6.1.2  Swing和AWT 164
6.1.3  窗体容器 166
6.2  图形与绘图 170
6.2.1  坐标系统 171
6.2.2  颜色 171
6.2.3  绘图 172
6.3  事件处理模型 175
6.3.1  事件和Java事件模型 175
6.3.2  事件处理实例分析 176
6.3.3  内部类 180
6.3.4  常用组件的事件 181
6.4  使用Swing组件 183
6.4.1  MVC模型 183
6.4.2  布局管理 185
6.4.3  Swing组件编程 187
6.5  本章习题 192
第7章  程序设计案例分析 196
7.1  可视化程序设计与NetBeans IDE 196
7.2  设计窗体 198
7.2.1  创建主窗体和主面板 198
7.2.2  组件与布局设计 201
7.2.3  添加事件 206
7.3  设计菜单和对话框 209
7.3.1  设计菜单 209
7.3.2  设计对话框 213
7.4  设计算法 220
7.5  完成和部署应用程序 223
7.6  本章习题 229
第8章  applet与Web编程 233
8.1  Java applet基础 233
8.1.1  什么是applet 233
8.1.2  编写applet程序 234
8.1.3  applet的生命周期 236
8.2  applet在Web中的应用 237
8.2.1  HTML与Web编程 237
8.2.2  applet Web编程技巧 238
8.2.3  applet的安全机制 241
8.3  把Java应用程序转换为applet 242
8.3.1  转换方法 242
8.3.2  转换示例 242
8.4  本章习题 244
第9章  开发过程与程序质量保证 249
9.1  软件开发过程概述 249
9.1.1  软件生命周期 249
9.1.2  软件开发过程 250
9.1.3  软件质量与测试 254
9.2  程序调试 256
9.2.1  程序调试的概念 256
9.2.2  使用断点 258
9.2.3  监视和检查数据的值 259
9.2.4  调试过程 260
9.3  单元测试 260
9.3.1  单元测试与JUnit 261
9.3.2  在NetBeans IDE中使用单元测试 261
9.3.3  单元测试的应用举例 262
9.4  异常与异常处理 265
9.4.1  异常与异常类 266
9.4.2  异常处理机制 269
9.4.3  利用异常处理编程 273
9.5  本章习题 276
第10章  线程、文件与串行化 280
10.1  多线程程序设计 280
10.1.1  多任务、进程和线程 280
10.1.2  Java线程模型 281
10.1.3  设计多线程的应用程序 288
10.2  流和文件 292
10.2.1  基本概念 292
10.2.2  基于文本文件的应用 293
10.2.3  I/O流与文件 298
10.3  对象串行化 302
10.3.1  串行化的目的 302
10.3.2  串行化的方法 302
10.4  本章习题 307
参考文献 311

教学资源推荐
作者: (美)Daniel M. Bikel, Imed Zitouni 编
作者: (美)Y. Daniel Liang 著 阿姆斯特朗亚特兰大州立大学
作者: 辛运帏 饶一梅
作者: 刘海燕 荆涛 主编 王子强 武卉明 杨健康 周睿 编著
参考读物推荐
作者: Rogers Cadenhead
作者: (美)雷蒙德·泰(Raymond Tay)著
作者: 赵建领 薛园园 等编著