Java语言程序设计(自考)课件 第三章流程控制语句_第1页
Java语言程序设计(自考)课件 第三章流程控制语句_第2页
Java语言程序设计(自考)课件 第三章流程控制语句_第3页
Java语言程序设计(自考)课件 第三章流程控制语句_第4页
Java语言程序设计(自考)课件 第三章流程控制语句_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章流程控制语句

学习目标了解Java程序结构,理解包的概念,掌握package语句及import语句的用法掌握Java各主要语句的语法格式,能够指出简单程序的功能,给出运行结果,能够编写简单的Java程序,能够处理简单的输入输出了解Java中异常处理的概念及处理机制,掌握try、catch、finally、throw和throws的使用方法Java程序的结构12简单的输入输出3流程控制处理异常4本章主要内容第一节Java程序的结构整体来看,Java程序的结构如下:package语句:零个或1个,必须放在文件开始;import语句:零个或多个,必须放在所有类定义之前;公有的(public)类定义:零个或一个;类定义:零个或多个;接口定义:零个或多个;源文件命名时,若文件中含有public类,源文件必须与该类名字一致,注意区分大小写Java包的概念

包是类的容器,包的设计人员利用包来划分名字空间,用于分隔类名空间,以避免类名冲突.没有包定义的源代码文件成为未命名的包中的一部分,在未命名的包中的类不需要写包标识符

使用package指明源文件中的类属于哪个具体的包。包语句的格式为:

packagepkg1[.pkg2[.pkg3...]];Java包的概念package语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。一个文件中最多只能有一条package语句

包的名字有层次关系,各层之间以点分隔。包层次必须与Java开发系统的文件系统结构相同。通常包名中全部用小写字母

一个包可以包含若干个类文件,还可包含若干个包。一个包要放在指定目录下,通常用classpath指定搜寻包的路径。包名本身对应一个目录(用一个目录表示)Java包的概念packagejava.awt.image;在Windows系统下,此文件必须存放在java\awt\image目录下;如果在unix系统下,文件须放在java/awt/image目录下。此定义语句说明当前的编译单元是包java.awt.image的一部分,文件中的每一个类名前都有前缀java.awt.image,因此不再会有重名问题

引入语句使用MyClass类,或mypackage包中的其它public类,则需要使用使用全名

mypackage.MyClassm=newmypackage.MyClass();先使用import语句引入所需要的类,程序中无需再使用全名

importmypackage.*;//…MyClassm=newMyClass();

packagemypackage;publicclassMyClass{ //…}

引入语句import语句只用来将其他包中的类引入当前名字空间中,程序中不需再引用同一个包或该包的任何元素,而当前包总是处于当前名字空间中

引入语句的格式如下importpkg1[.pkg2[.pkg3...]].(类名|*)“*”表示引入所有类语句次序示例正确的语句序列:错误的语句顺序:packageTransportation;importjava.awt.Graphics;importjava.applet.Applet;importjava.awt.Graphics;importjava.applet.Applet;packageTransportation;该例中在包说明语句之前含有其他语句语句次序示例错误的语句顺序:packageTransportation;packageHouse;importjava.applet.Applet;该例中含有两个包说明语句第二节流程控制语句与表达式每个表达式都会得到一个值,即表达式的计算结果。语句也会有一个值,但这个值并不是语句的计算结果,而是执行结果语句是Java的最小执行单位,语句间以分号(;)作为分隔符。语句分为简单语句及复合语句简单语句就是通常意义下的一条语句,即单语句;而复合语句是一对花括号“{”和“}”括起来的语句组,也称为“块”,块后没有分号赋值语句表达式可当作一个值赋给某个变量,有的表达式也可当作语句方法调用通常返回一个值,一般用在表达式中。有的方法调用可直接当作语句System.out.println("HelloWorld!");customer1=newCustomer();point2=newPoint();x=12;x++;块块是一对花括号“{”和“}”括起来的语句组。例如:方法体是一个块。块还用在流控制的语句中,如if语句、switch语句及循环语句{}{ Pointpoint1=newPoint(); intx=point1.x;}分支语句分支语句共有两种:if语句和switch语句if语句是单重选择,最多只有两个分支。if语句的基本格式是:if(逻辑表达式)

语句1;[else

语句2;]分支语句if关键字之后的逻辑表达式必须得到一个逻辑值,不能象其他语言那样以数值来代替。因为Java不提供数值与逻辑值之间的转换intx=3;if(x){...}if(x!=0)if语句常见的形式形式一:形式二:if(逻辑表达式){ //逻辑表达式为true时要执行的语句;}if(逻辑表达式){ //逻辑表达式为true时要执行的语句;}else{ //逻辑表达式为false时要执行的语句;}if语句常见的形式三形式三(if语句的嵌套):if(逻辑表达式1){ //逻辑表达式1为true时要执行的语句;}elseif(逻辑表达式2){ //逻辑表达式1为false,但逻辑表达式2为true时要执行的语句;}…else{ //前面的逻辑表达式全为false时要执行的语句;}if语句1 if(firstVal==0)2 if(secondVal==1)3 firstVal++;4 else5 firstVal--;if语句else子句属于逻辑上离它最近的if语句

if(firstVal==0) if(secondVal==1) firstVal++; else firstVal--;这两个匹配if语句1 if(firstVal==0){2 if(secondVal==1)3 firstVal++;4 }5 else6 firstVal--;这两个匹配switch语句switch语句含义与嵌套的if语句是类似的switch(表达式){ casec1:

语句组1; break; …… caseck:

语句组k; break; [default:

语句组; break;]}switch语句表达式的计算结果必须是int型或字符型,即是int型赋值相容的。当用byte、short或char类型时,要进行提升。switch语句不允许使用浮点型或long型表达式。c1、c2、…、ck是int型或字符型常量。default子句是可选的,并且,最后一个break语句完全可以不写。switch语句例1 //colorNum是整型变量2 switch(colorNum){3 case0:4 setBackground(Color.red);5 break;6 case1:7 setBackground(Color.green);8 break;9 default:10 setBackground(Color.black);11 break;12 }switch语句switch语句和if语句可以互相代替前一个示例用if语句实现:if(colorum==0) setBackground(Color.red);elseif(colorNum==1) setBackground(Color.green); else setBackground(Color.black);例3.7使用if语句:staticintdaysInMonth(intmonth){ if(month<=0||month>12) return-1; //表示月份的数值不合理 if(month==2) return28; if((month==4)||(month==6)||(month==9)||(month==11)) return30; return31;}使用switch语句:staticintdaysInMonth(intmonth){ intdays; if(month<=0||month>12)return-1;//表示月份的数值不合理 switch(month){ case2: days=28;break; case4:case6:case9:case11: days=30;break; default: days=31; } returndays;}分支语句程序3.1当主程序执行时,如果第一个命令行参数的首字符分别是数字、小写字母及大写字母时,系统会显示这个首字符。如果输入的是非数字或字母,则显示不是数字或字母。输出如图所示分支语句如果上述方法中的最后一个break语句(第32行)不写的话,程序执行完第30、31行后将不停止,一直执行下去。程序的输出如图3-6所示:循环语句三种循环语句:for语句、while语句和do-while语句for语句语法格式:for语句的语义是先执行初始语句,判断逻辑表达式的值,当逻辑表达式为真时,执行循环体语句,执行迭代语句,然后再去判别逻辑表达式的值。直到逻辑表达式的值为假时,循环结束

for(初始语句;逻辑表达式;迭代语句) 语句;循环语句例3.8的程序共执行3次第2行的输出语句(i为0,1,2时)。当i等于3时,逻辑表达式的值为假,退出循环,执行第4行语句for(inti=0;i<3;i++){ System.out.println("Areyoufinishedyet?");}System.out.println("Finally!");Areyoufinishedyet?Areyoufinishedyet?Areyoufinishedyet?Finally!循环语句for(;;) System.out.println("Alwaysprint!");该语句等价于for(;true;) System.out.println("Alwaysprint!");这段循环不会停止循环语句下面是初始语句及迭代语句包含多个语句时的情况:例3.9intsumi=0,sumj=0;for(inti=0,j=0;j<10;i++,j++){ sumi+=i; sumj+=j;}增强for语句在Java的新版本中,提供了另一种形式的for语句,称为增强for语句,也称为for-each语句它对数组的所有元素提供顺序访问,而不能像基本的for语句那样可以提供多样化的处理程序中定义了一维整数数组 intmyTable[]={23,45,65,34,21,67,78};则for-each语句for(intelement:myTable)System.out.print(element+"");将输出数组中的全部7个元素,各元素之间以三个空格分隔while循环while循环for语句中常常用循环控制变量显式控制循环的执行次数。当程序中不能明确地指明循环的执行次数时,可以仅用逻辑表达式来决定循环的执行与否。这样的循环可用while语句来实现while循环的语法是:while(逻辑表达式)

语句;和if语句一样,while语句中的逻辑表达式亦不能用数值来代替循环语句while语句的语义:计算逻辑表达式,当逻辑表达式为真时,重复执行循环体语句,直到逻辑表达式为假时结束。如果第一次检查时逻辑表达式为假,则循环体语句一次也不执行。如果逻辑表达式始终为真,则循环不会终止循环语句for语句可以改写为while语句示例inti=0;while(i<3){ System.out.println("Areyoufinishedyet?"); i++;}System.out.println("Finally!");do-while循环do-while语句与while语句很相似。它把while语句中的逻辑表达式移到循环体之后。

do-while语句的语法格式是:do-while语句的语义是:首先执行循环体语句,然后判定逻辑表达式的值,当表达式为真时,重复执行循环体语句,直到表达式为假时结束。不论逻辑表达式的值是真是假,do循环中的循环体都至少执行一次do

语句;while(逻辑表达式);循环语句示例例3.111 //do-while语句

2 inti=0;3 do{4 System.out.println("Areyoufinishedyet?");5 i++;6 }while(i<3);7 System.out.println("Finally!");循环语句for、while及do-while语句可互相替代例如:do

语句1;while(逻辑表达式);等价于:语句1;while(逻辑表达式)

语句1;跳转语句Java语言不再提供对有争议的goto语句的支持,也就是程序中不能再写goto语句。Java提供了break和continue语句标号标号可以放在for、while或do-while语句之前,其语法格式为:

标号:语句;break语句break语句可用于三类语句中一类是switch语句中,一类是for、while及do-while等循环语句中,还有一类是块语句中在switch语句及循环语句中break的语义是跳过本块中余下的所有语句,转到块尾,执行其后的语句for(inti=0;i<100;i++){ if(i==5) break; System.out.println("i="+i);}break语句break语句的第三种使用方法是和标号结合使用,其语义是跳出标号所标记的语句块,继续执行其后的语句。多用于嵌套块中,控制从内层块跳到外层块之后。其语法格式为:break标号;intx=20;out:for(i=2;i<10;i++){ System.out.println("begini="+i); while(x<1000){ System.out.println("i="+i+",x="+x); if(i*x>=80)breakout; elsex+=5; }}System.out.println("afteroutblock");break与continue程序3.2continue语句在循环语句中,continue可以立即结束当次循环而执行下一次循环,当然执行前先判断循环条件是否满足continue语句也可以和标号一起使用,立即结束标号标记的那重循环的当次执行,开始下一次循环。多用于多重循环中。

其语法格式为:continue标号;例3.13例3.13添加必要的代码,执行结果:*******************************************************第三节简单的输入/输出Scanner类Scanner类属于java.util包。它提供了许多方法,可用来方便地读入不同类型的输入值。要调用Scanner类的方法,必须先创建一个对象。下面的说明创建了一个Scanner类对象,它读入键盘输入:Scannerscan=newScanner(System.in);程序3.3和3.4程序3.3程序3.3中的Echo程序,读入用户键入的一行文本,将它保存到字符串变量message中,并回显在屏幕上。第1行的import语句,表明程序中要使用Scanner类程序3.4简单的输入/输出NumberFormat类和DecimalFormat类用于格式化输出NumberFormat类提供对数值进行格式化操作的一般功能。不能使用new运算符实例化一个NumberFormat对象。DecimalFormat类按惯例使用new运算符来实例化对象。程序3.5和3.6程序3.5程序3.6第四节处理异常Java语言把程序运行中可能遇到的错误分为两类,一类是非致命性的,通过某种修正后程序还能继续执行。这类错误称作异常(Exception)。如打开一个文件时,发现文件不存在。又比如除零溢出、数组越界等。使用异常机制的情况当方法因为自身无法控制的原因而不能完成其任务文件不存在,网络连接无法建立等处理在方法、类库、类中抛出的异常如FileInputStream.read产生IOException;

在大的项目中采用统一的方式处理异常时编写文字处理器一类的程序等;不经常发生但却可能发生的故障

异常及其处理机制预定义了Exception类。在Exception类中定义了程序产生异常的条件简化了代码的编写。常见的异常也可以统一处理,提高了效率,代码重用率高允许程序员自己编写特殊的异常处理程序,以满足更独特的需要异常机制的优点把异常处理代码从常规代码中分离出来,增加了可读性,方便修改按异常类型和差别进行分组,即从预定义的类Exception中派生自己的子类,对无法预测的异常也可以进行捕获和处理,克服了传统方法中错误信息有限的问题异常的处理借助于调用堆栈按先近后远的原则进行抛出和捕获

方法的运行过程中,如果发生了异常,称程序产生了一个异常事件,相应地生成异常对象。生成异常对象并把它提交给运行时系统的这一过程称为抛出(throw)异常

异常发生时,Java运行时系统从生成对象的代码块开始进行回溯,找到包含相应异常处理的方法,并把异常对象交给该方法处理,这一过程称为捕获(catch)异常分类在Java中主要有三类异常。类java.lang.Throwable是使用异常处理机制可被抛出并捕获的所有异常对象的父类。它有三个基本子类,图示如下ExceptionErrorRuntimeExceptionThrowable每个类使用的目的

Error表示很难恢复的错误,如内存越界。交给系统处理为好RuntimeException用来表示设计或实现方面的问题,如数组越界等。因为设计和实现正确的程序不会引发这类异常,所以常常不处理它发生这类异常时,运行时环境会输出一条信息,提示用户修正错误其他异常表示运行时因环境的影响可能发生并可被处理的问题。如文件没找到或不完整的URL等。程序员处理它们异常分类异常分为以下三组:受检异常,必须被处理运行时异常,不需要处理错误,不需要处理异常分类受检异常受检异常(checkedexception)是程序执行期间发生的严重事件的后果运行时异常运行时异常(runtimeexception)通常是程序中逻辑错误的结果错误错误(error)是标准类Error或其后代类的一个对象异常传播方式method1method2method3method4探测抛出例外传递捕获处理例外调用异常处理

try,catch和finally语句

try{ //此处为抛出具体异常的代码}catch(ExceptionType1e){ //抛出ExceptionType1异常时要执行的代码}catch(ExceptionType2e){ //抛出ExceptionType2异常时要执行的代码...}catch(ExceptionTypeke){ //抛出ExceptionTypek异常时要执行的代码}finally{ //必须执行的代码}

公共异常ArithmeticException整数除法中,如果除数为0,则发生该类异常NullPointerException

访问没有实例化的对象或调用它的方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论