JAVA大学基础教程-第六版.docx

上传人:太** 文档编号:63259806 上传时间:2022-11-24 格式:DOCX 页数:158 大小:3.29MB
返回 下载 相关 举报
JAVA大学基础教程-第六版.docx_第1页
第1页 / 共158页
JAVA大学基础教程-第六版.docx_第2页
第2页 / 共158页
点击查看更多>>
资源描述

《JAVA大学基础教程-第六版.docx》由会员分享,可在线阅读,更多相关《JAVA大学基础教程-第六版.docx(158页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计算机、Internet和万维网概述Our life is frittered away by detail. Simplify, simplify.The chief merit of language is clearness.Henry David ThoreauGalenMy object all sublime I shall achieve in time.W. S. GilbertHe had a wonderful talent for packing thought close, and rendering it portable.Thomas B. MacaulayEgad

2、. I think the interpreter is the hardest to be understood of the two!”Richard Brinsley SheridanMan is still the most extraordinary computer of all.John F. Kennedy学习目标在本章中,读者将学习以下内容: 了解硬件与软件的基本概念 熟悉对象技术的基本概念,例如类、对象、属性、行为、封装、继承和多态等 了解编程语言的不同类型 了解最常用的编程语言类型 熟悉典型的Java语言开发环境 理解Java语言在开发基于Internet和Web的分布式

3、客户/服务器应用程序中所起的作用 了解作为工业标准的面向对象设计语言UML的发展史 了解Internet和万维网的发展史 试运行Java应用程序提纲1.2 什么是计算机1.4 操作系统的沿革1.6 Internet与万维网1.8 C语言和C+语言的发展史1.1 简介1.3 计算机的构成1.5 个人计算、分布式计算和客户/服务器计算1.7 机器语言、汇编语言和高级语言10Java大学基础教程(第六版)所设计的分析引擎(Analytical Engine)机械计算设备。Ada语言的一项重要功能是提供了所渭的 多任务(multitasking)特性,使程序员可以指定多个并发执行的事件。而Java语言

4、,通过所谓的多 线程特性,同样可以使程序员编写具有并发事件的程序。1.12 BASIC, Visual Basic, Visual C+, C# 和.NET作为一种编写简单程序的语言,BASIC ( Beginners All-Purpose Symbolic Instruction Code )编 程语言是20世纪60年代中期在Dartmouth学院开发的。它的主要设计目的是帮助初学者尽快熟悉 编程技术。微软的Visual Basic语言是20世纪90年代初推出的,它的目的是简化微软Windows应用程序 的开发过程,目前它已成为世界上最流行的编程语言之微软正试图将Internet和Web集

5、成到计算机应用程序中,它最新的开发工具正是其一体化策略 的组成部分之一。该策略是在微软的.NET平台(.NETplatform)上实现的,为开发者提供了创建 和运行计算机应用程序所需的功能,使得这些程序可以在分布于Internet各个角落的计算机上执行。 微软的三大主流编程语言是Visual Basic .NET (基于最初的BASIC语言),Visual C+ .NET (基于 C+语言)和C#语言(一种基于C+和Java,专门为.NET平台开发的新型语言)。使用.NET语言 的开发人员,可以先采用其最熟悉的语言编写软件组件,然后再将这些构件与用其他任何.NET语 言编写的构件组合在一起,最

6、终构成完整的应用程序1.13 典型的Java开发环境接下来将介绍在Java开发环境中创建和执行Java应用程序所需的典型步骤(见图1.1 %执行Java程序通常需要经过5个阶段,即编辑、编译、加载、验证和执行。本书对这5个阶段 的讨论将基于Sun Microsystems公司的J2SE开发工具包(JDK ) 5。版,本书附赠光盘中包括了该 软件的最新版。也可以从网址java. 档。有关卜载的帮助文档,可以访问网站servlet. java.sun.c6m/help/downloado要严格 遵照光盘中JDK的安装指示(或者访问java. sun . com/j2se/5.0/install.h

7、tml),以确保 将其正确安装到计算机上,能够正常地编译和执行Java程序。完整的安装指南可以从Sun公司的Java网站获得:注意,上述网站提供的安装指南只针对Windows, UNIX/Linux和MacOSX操作系统。如果读者 使用的操作系统并不是上述系统,则应该参阅相应操作系统所提供的关于Java环境的手册,或者向 指导教师咨询如何针对具体机器的操作系统完成安装任务。同时需要提醒的是,网站的链接偶尔会 因公司对网站进行升级而不得不中断。当遇到关于上述网络链接或者本书中任何其他链接的问题时, 可随时查询网站www. deitel. com进行更正,或者发送电子邮件至deiteldeitel

8、. com,我们 将及时给予答复。第1阶段:创建程序在第1阶段,要利用编辑器程序(editor program )编辑文件,该程序又可简称为编辑器(editor )。 在编辑器中键入一个通常称为源代码(source code )的为丫2程序,在对它进行任何必要的修改之后, 将该程序保存在诸如硬盘之类的辅助存储设备中。Java源代码文件通常以.java扩展名(.java extension )为文件名的结尾,表示该文件包含了Java源代码。本书假定读者已了解如何编辑一个文件。100Java大学基础教程(第六版)活动图顶部的实心圆(solidcircle)代表活动的初始状态(initial sta

9、te),即程序执行建模了的动作之前的工作流开端。框图底部出现的外带空心的实心圆(solid circle surrounded by a hollowcircle )代表最终状态(final state ),即程序执行动作之后的工作流末端。图4.1中还有右上角折起的矩形,它们是UML注释(note),类似于Java中的注释,以解释性 的评论描述了框图中符号的目的。图4使用UML注释来展示与活动图中的每个动作关联的Java 代码。虚线(dotted line)将每个注释和该注释所描述的元素连接起来。一般情况下,活动图并不给出实现活动的Java代码。这里将注释用于此目的主要是为了展示框图与Java

10、代码如何联系在一 起。关于UML的更多信息,可以访问www.uml.org。Java中的选择语句Java有3种选择语句(分别在本章和第5章中探讨对于if语句,如果一个条件为真,就执 行(选择)一个动作,如果该条件为假,则忽略这个动作。对于if. . .else语句,如果一个条件 为真,就执行一个动作,如果该条件为假,则会执行另一个不同的动作q对于switch语句(见 第5章),根据一个表达式的值,只执行许多不同动作中的某一个。if语句是个单选语句(single-selection statement),因为它只选择或忽略一个单一的动作(不 久将会看到,也可能是单组动作)o if.else语句称

11、为双选语句(double-selection statement),因 为它在两个不同动作(或两组不同动作)之间进行选择。switch语句称为多选语句(multipleselection statement),因为它在多个不同动作(或多组不同动作)之间进行选择。Java中的循环语句Java提供了 3种循环语句(looping statement),使程序在条件,又称循环继续条件(loop-con- timiation condition )为真的情况下能重复执行语句。循环语句包括while, do.while和for语 句(第5章讲解do. . .while和for语句)o while和for

12、语句可使主体内的动作(或一组动作) 执行零次或多次如果循环继续条件最初就为假,则不执行动作(或动作组)。do. while语 句使主体内的动作(或一组动作)执行一次或多次。if, else, switch, while, do和for是Java关键字。这些关键字用于实现各种Java特 性,如控制语句。关键字不能用来作为变量名之类的标识符。附录C中列出了 Java的所有关键字。Java中的控制语句小结Java只有3种类型的控制结构,也就是前面所称的控制语句,分别是顺序语句、选择语句(有 3种类型)和循环语句(有3种类型)。由许多顺序、选择和循环语句按照实现程序的适当算法组合在一起,就形成了每个程

13、序。与图4.1中给出的顺序语句一样,我们可以把每种控制语句用活动 进行建模。每个活动图包含一个初始状态和一个最终状态,分别代表一个控制语句的入口点和出口 点。使川单入口/单出口控制语句(singleeitry/singleexilcontrol statement),很容易构造程序,因 为通过将一个语句的出口点与下一个语句的入口点连接起来,就能将多个控制语句联系在一起。这 个过程类似儿童搭积木的方式,因此我们称之为控制语句堆叠(control.statement stack)。我们将会 看到,另外只有一种方式能够连接控制语句,即控制语句嵌套(controLstatement nest),通过这

14、种 方式,一个控制语句可以出现在另一个控制语句内。因此,从本质上讲,仅用3种控制语句和两种 组合方式,就能够构造Java程序算法。4.5 if单选语句程序使用选择语句在多组可选动作之间进行选择。例如,假设考试的及格成绩为60,则下面 的伪码语句第4章控制语句(第I部分)101If student s grade is greater than or equal to 60 如果学生的成绩大于或等于 60Print Passed则打印Passed”可判断“如果学生的成绩大于或等于60”这个条件是真还是假。如果这个条件为真,则打印叩assed”, 接下来执行的伪码语句是“performed”。记住

15、,伪码并不是真正的编程语言如果这个条件为假,则 忽略Print语句,接着执行下面的伪码语句。在这个选择语句中,第二行的缩进是可选的,但一般 建议保留这个缩进,以强调结构化程序的内在结构。前述if伪码语句可以写成如下Java语句:if ( studentGrade = 60 ) System.out.printIn( Passed);注意,Java代码和伪码是密切相关的。这是伪码成为有用的程序开发工具所必备的特性之一。图4.2示例了单选if语句“这个活动图包含了此类图中最重要的符号:菱形,或称判断符 (decision symbol ),表明要进行一个判断。工作流将继续沿着由该符号的相关监控条件

16、(guard condilion)所决定的路径流动,这个条件可以为真,也可以为假。从判断符产生的每个转移箭头都 有一个监控条件(在转移箭头旁边的方括号中给出)。如果监控条件为真.则工作流进入转移箭头 所指向的动作状态。在图4.2中,如果成绩大于或等于60,则程序打印Passed”,然后转移到这个 活动的最终状态。如果成绩小于60,则程序立即转移到最终状态,不显示任何信息。if语句是个单入口/单出口控制语句。我们将看到,其他控制语句的活动图也包含初始状态、 转移箭头、指示要执行的动作的动作状态、指示要进行的判断的判断符(和相关的监控条件)以及 最终状态。这和我们一直重点强调的编程的动作/判断模型

17、(action/decision model of programming ) 是一致的。想像一下,有7个箱子,每个都只包含一种类型的Java控制语句。控制语句都是空的。你的任 务是将许多种不同类型的控制语句作为算法命令,仅以可能的两种方式(堆叠或嵌套)将这些控制 语句组合起来,然后在动作状态和判断符中填入适合该算法的动作表达式和监控条件,最终装配成 一个程序。我们将讨论编写动作和判断语句的各种方式。4.6 if . .else双选语句if单选语句仅在条件为真时才执行指明的特定动作,否则就忽略这个动作。if.else双选语句 使程序员可以在条件为真时执行一个动作,而在条件为假时执行另一个动作。

18、例如,下面的伪码语句If students grade is greater than or equal to 60如果学生的成绩大于或等于 60Print “Passed则打印Passed”102Java大学基础教程(第六版)Else否则Print “Failed”打印“Failed”在成绩大于或等于60时会打印“Passed”,而在成绩小于60时会打印“Failed”。在这两种情况下,打 印完毕后,序列中的下一条伪码语句都是“performed”。前述i.- else伪码语句可以写成如下Java语句:if ( grade = 60 )System.out.printIn( Passed )

19、; elseSystem.out.printIn( Failed” );注意,else的主体也是缩进的。无论选择哪种缩进约定,都应该在程序中始终一致地应用这种约 定。不遵循一致的留空白约定,程序的可读性就会非常差。友好编程习惯4.1if.else语句的两个主体部分都应该是缩进的设好编程习惯4.2如果有几级缩进,每一级都应该缩进同样数量的空格)图4.3示例了 if.else语句中的控制流。UML活动图中的符号(除了初始状态、转移箭头和最终状态)仍然表示动作状态和判断。我们继续重点关注这种动作/判断计算模型。再次设想一 个很深的箱子,其中包含构造任何Java程序所需的足够多的空if.else语句。

20、要做的工作是将 这些if. . .else语句(通过堆登和嵌套)与算法所需的其他所有控制语句装配起来。在动作状态 和判断符中填入适合该算法的动作表达式和监控条件。grade = 60pant “Failed”!_print Passed图4.3 if.else双选语句的UML活动图条件运算符(?:)Java提供了条件运算符(conditional operator ) (?:),可用于替换if. . .else语句。这是Java 的唯个三元运算符(ternary operator ),它带有3个操作数这3个操作数与?:符号一起构成一(可求值为布尔值true个条件表达式(conditional

21、expression )o第一个操作数(位于?左侧)是个布尔(boolean )表达式或false的一个条件),第二个操作数(位于?和:之间)是当布尔表达式为true时条件表达式的值,第三个操作数(位于:右侧)是当布尔表达式为false时条件表达式的 值Q例如,下列语句:System.out.printIn( studentGrade = 60 ? Passed : Failed);会打印printin的条件表达式参数的值。如果布尔表达式studentGrade = 60为真,则这 个语句中的条件表达式求值为字符串” Passed”,如果这个布尔表达式为假,则求值为字符串 1Failed%因此

22、,这个带有条件运算符的语句的执行效果从本质上讲与前述if.-else语句是第4章控制语句(第I部分)103一样的。条件运算符的优先级低,因此整个条件表达式一般会放在圆括号里。我们将会看到,条件表达式还可以用在一些无法使用if . .else语句的场合。最好编程习惯4.3条件表达式比if.else语句的可读性差,因此应该仅用于替代在两个值之间进行选择的简单 if. . .else 语句 嵌套的i1s语句通过在if. .else语句中放置其他if. .else语句,形成嵌套的if. .else语句,程序 员就可以测试多个选择条件。例如,下面的伪码表示一个嵌套的if.else结构,对于大于或等 于9

23、0的考试成绩打印“ A“,对于80-89范围内的成绩打印“B”,对于70-79范围内的成绩打印“C”, 对于60Y9范围内的成绩打印“D”,对于其他的所有成绩打印“F%如下所示:If student1 s grade is greater than or equal to 90Print A”如果学生的成绩大于或等于90 打印“A”else否则If student s grade is greater than or equal to 80如果学生的成绩大于或等于 80Print打印else否则If student s grade is greater than or equal to 70P

24、rint C”elseIf student s grade is greater than or equal to 60PrintelsePrint “尸如果学生的成绩大于或等于70打印y否则如果学生的成绩大于或等于60打印否则打印F这段伪码可写成如下Java代码:if ( studentGrade = 90 ) System.out.printin( A);elseif ( studentGrade = 80 ) System.out.printin( B);elseif ( studentGrade = 70 ) System.out.printIn(;elseif ( studentGr

25、ade = 60 ) System.out.printin( D);else System.out.printIn( F);如果studentGrade大于或等于90,则前4个条件都成立,但只执行第一个if.else语句的if部分中的语句。执行完这个语句之后,最外层的if .else语句的else部分被忽略。大多数程序员更喜欢将前述ifelse语句写为104Java大学基础教程(第六版)if ( studentGrade = 90 )System.out.printIn( else if ( studentGradeSystem.out.printin( else if ( studentGr

26、adeSystem.out.printIn( else if ( studentGradeSystem.out.printin( elseSystem.out.printIn(HAM);80 );=70 ) C );=60 ) D);这两种形式除了空格和缩进方式不同(编译器将会忽略这些不同)以外,是完全相同的。后一种形式更流行,因为不用将代码过分地向右缩进。前一种形式往往使一行中没有多少地方可以写代码了,代码分成两行会使其可读性变差。else悬挂问题Java编译器总是将else与距离它最近的if配对,除非在程序中加上花括号(和),要求它 与其他if配对。编译器的这种行为会导致。工se悬挂问题(

27、danglingelse problem ),例如,if ( x 5 ) if ( y 5 )System.out.printIn( x and y are 5n ); elseSystem.out.printin( x is 5。否则如果x不大于5, ifelse结构的else部分将输出字符串 11 x is 5 ) if ( y 5 ) System.out.printIn ( Hx and y are 5n ); elseSystem.out.printin( nx is 5% 但是,如果第二个条件为假,则显示字符串”x is 5 ) (if ( y 5 )System, out .pr

28、intIn ( ,fx and y are 5f ); elseSystem, out print In ( ,fx is = 60 )System.out.printin( Passed); else (System.out.printIn( Failed);System.out.printIn( You must take this course again.n ); )在这个例子中,如果grade小于60,程序将会执行else主体中的两条语句,并打印Failed.You must take this course again.注意else子句中将两条语句括起来的花括号。这些括号很重要,如

29、果没有它们,语句System.out.printIn( You must take this course again.将位于if . .else语句的else主体之外,,并且无论成绩是否小于60都会执行这条语句。编译器会捕捉到语法错误(例如,当程序中的块缺少一个花括号时)。逻辑错误(logic error), 例如程序中的块的两个花括号都缺少了,会在程序执行时表现出其效果。致命逻辑错误(fatal logic error)将导致程序运行失败并提前终止。非致命逻辑错误(nonfatal logic error)将允许程序继续执 行,但该程序会产生错误的结果。f 才见编程错误4.1:在程序中遗漏

30、用于界定块的一个或两个花括号,会导致程序出现语法错误或逻辑错误。麦好编在习惯4.4总是在if else (或其他)语句中使用配对的花括号,有助于避免意外地遗漏括号,尤其是在以 后为if部分或else部分添加语句时。为了避免遗漏一个或两个花括号,一些程序员在键入块中的每条话句之前,先输入代表块的起始和结束的两个花括号o正如块可以放在单个语句可以放置的任何位置,块中也可以没有任何语句。回顾2.8节中的情 况,通过在语句通常出现的位置放置一个分号(;),就可以表示空语句。去见偏我错误4.2在if单选语句中,在if语句的条件后加一个分号会导致逻辑错误;在if-.else双选语句中,在 if.else语

31、句的条件后加一个分号会导致语法错误(当if部分包含实际的主体语句时)。4.7 while循环语句循环语句(repetition statement或looping statement)又称为循环(loop ),使程序员可以指定当 某个条件保持为真时,程序应该重复执行一个动作。下面的伪码语句106Java大学基础教程(第六版)While there are more items on my shopping list当附物清单中有多件物品时Purchase next item and cross it offmy list购买下一件商品并将其从清单中划掉描述了一次购物过程中的重复动作。条件the

32、re are more items on my shopping list可能为真,也 可能为假。如果该条件为真,则执行“Purchase next ilem and cross il off my list”动作。只要条件 保持为真,就会一直反复执行这个动作。while循环语句中包含的一条(或多条次吾句组成了while 循环语句的主体,既可以是单独一条语句,也可以是一个块。最终.条件会变成假(当购买了清单 中的最后一项物品并将其从清单中划掉以后),此刻循环终止,并执行循环语句之后的第一条语句。作为Java的while循环语句的一个例子,考虑下面的程序段,它将找出3的制次运算结果中 的第一个大

33、于100的数。假设int类型变量product初始化为3。当如下while语句执行结束时. 结果保存在result中:int product = 3 ;while ( product = 100 ) product = 3 * product;当这个while语句开始执行时,变量product的值为3。while语句每次迭代时都将变量product 乘以3,因此product的值将逐次变为9, 27, 81和243。当变量product变成243时,while 语句的条件product 100变为真。然后, while语句退出(到达最终状态),控制权交给程序执行顺序中的下一条语句。4.8 算法

34、设计:计数器控制循环为了说明如何开发算法,我们修改了第3章中GradeBook类,以解决求学生平均成绩的两个 稍加变化的问题。考虑如下问题声明:一个有10名学生的班级进行了一次测验。已知每个学生这次测验的成绩(在0T00范围内的整数),求这次测验的班级平均成绩。班级平均成绩等于总成绩除以学生数。在计算机上求解这个问题的算法必须能够输入每项成 绩,跟踪记录输入的所有成绩的总和,计算平均成绩并打印结果。计数器控制循环的伪码算法我们用伪码列出要执行的动作,并指定其执行顺序。我们使用计数器控制循环(coimter-controlled repetition ), 一次输入一个成绩。这种技术使用了一个称

35、为计数器(counter )或控制变 (control variable )的变量,控制一组语句的执行次数。计数器控制循环通常称为确定循环(definite repetition ),因为在循环开始执行之前已经知道了循环的次数)在这个例子中,循环在计数器超过 10时终止。本节给出了一个完整的伪码算法(见图4.5)和GradeBook类(见图4.6),在这个类 中将该算法实现为一个Java方法本节然后给出了具体展示该算法的一个应用程序(见图4.7 )。在4.9 节里将展示如何使用伪码开发这样的算法。ISet total to zero2 Set grade counter to one34 Wh

36、ile grade counter is less than or equal to ten5 Prompt the user to enter the next grade6 Input the next grade7 Add the grade into the total8 Add one to the grade counter910 Set the class average to the total divided by ten11 Print thr class average图4.5使用计数器控制循环来计算班级平均成绩的伪码算法欷件上程视点4.1经验表明,在计算机上求解问题的最

37、困难的部分是为解决方案开发算法。一旦指定了正确的算法,根 据该算法将到可运行的Java程序的过程一般会非常直观。注意图4.5所示的算法中对total和counter的引用。total是一个用于计算多个值的累加和的变 量。counier是一个用于计数的变量,在这个例子中,成绩计数器表明了用户将输入的是10个成绩 中的哪一个。对于保存总数的变最,在程序中使用之前一般要初始化为0。在GradeBook类中实现计数器控制循环GradeBook类(见图4.6 )包含了一个构造函数(见第11行至第14行),将一个值赋给类的 实例变属courseName (在第8行中声明)。第17行至第20行、第23行至第

38、26行以及第29行至6 78910 1112 131418 1920212223242526272829303132333435363738394041424344454647484950515253108Java大学基础教程(第六版)第 34 行分别声明: setCourseName, getCourseName 和 displayMessage 方法。第 37 行至 第66行声明了determineClassAverage方法,该方法实现图4.5中的伪码所描述的计算班级平 均成绩算法。/ Fig. 4.6: GradeBook.java/ CradeBook class that solv

39、es class-average problem using / counter-control1ed repetition.import java.util.Scanner; / program uses class Scannerpublic class GradeBook private String courseName; / name of course this GradeBook represents/ constructor initializes courseNamepublic CradeBook( String name ) courseName name; / init

40、ializes courseName / end constructor/ method to set the course name public void setCourseName( String name )( courseName = name; / store the course name / end method setCourseName/ method to retrieve the course name public String getCourseNameO return courseName; / end method getCourseName/ display

41、a welcome message to the GradeBook user public void displayMessage() (/ getCourseName gets the name of the courseSystem.out.printf( Welcome to the grade book forn%s!nnMf getCourseNameO ); / end method displayMessage/ determine class average based on 10 grades entered by user public void determineClassAverage() / create Scanner to obtain input from command window Scanner input = new Scanner( System.in );int total; / sum of grades entered by userint gradeCounter; / number of the grade to be entered nextint grade; / grade value entered by user int average; / average of gra

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁