📄 java02_09.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java语言教程</title>
</head>
<body background="Bg.gif">
<p align="center"><b><font size="5">2.9 流程控制语句</font></b></p>
<p>任何一种高级语言都只需要三种流程控制语句:顺序、分支、循环。</p>
<p>与C、C++相同,Java程序通过流控制来执行程序流,完成一定的功能。语句可以是单一的一条语句( 如c=a+b; ),也可以是复合语句或块语句,用{}来表示。 <br>
<br>
最简单的是表达式语句,在表达式后加一个;就构成了表达式语句,如:a=b*2;</p>
<p>块语句是用{}将若干语句组合在一起形成的,它相当于一条语句。如:</p>
<p>{ a=b+c;</p>
<p> { i++;k--;}</p>
<p>}</p>
<p>下面我们分别来介绍Java中的流控制语句,包括<br>
<br>
1.分支语句: if-else, switch. <br>
<br>
2.循环语句:while, do-while, for. <br>
<br>
3.例外处理语句:try-catch-finally, throw <br>
<br>
最后我们将简单介绍一下注释语句。 <br>
<br>
<b>
一、分支语句</b> <br>
<br>
分支语句提供了一种控制机制,使得程序的执行可以跳过一些语句不执行,而转去执行特定的语句。 <br>
<br>
1.条件语句if-else <br>
<br>
if-else语句根据判定条件的真假来执行两种操作中的一种,
它的格式为: <br>
<br>
if (boolean-expression) <br>
statement1; <br>
[else <br>
statement2;]
//这里的[]表示里面的内容可以省略,下同<br>
① 布尔表达式boolean-expression是任意一个返回布尔型数据的达式(这比C、C++的限制<br>
要严格)。 <br>
② 每个单一的语句后都必须有分号。 <br>
③ 语句statement1,statement2可以为复合语句,这时要用大括号{}括起。建议对单一的语句<br>
也用大括号括起,这样程序的可读性强,而且有利于程序的扩充(可以在其中填加新的语句<br>
)。{}外面不加分号。 <br>
④ else子句是任选的。 <br>
⑤ 若布尔表达式的值为true,则程序执行statement1,否则执行statement2。 <br>
⑥ if-else语句的一种特殊形式为: <br>
if(expression1) <br>
statement1;<br>
else if (expression2) <br>
statement2;<br>
else if (expressionM)<br>
statementM ;<br>
else <br>
statementN;<br>
⑦ else子句不能单独作为语句使用,它必须和if配对使用。<b><font color="#FF00FF">else总是与离它最近的if配对。可以通过使用大括号{}来改变配对关系。</font></b><br>
<br>
例2.4 比较两个数的大小,并按从小到大的次序输出。<br>
public class CompareTwo{ <br>
public static void main( String args[] ){ <br>
double d1=23.4; <br>
double d2=35.1; <br>
if(d2>=d1) <br>
System.out.println(d2+" >= "+d1); <br>
else <br>
System.out.println(d1+" >= "+d2); <br>
} <br>
} <br>
运行结果为: <br>
C:\>java CompareTwo <br>
<br>
35.1 >= 23.4 <br>
<br>
例2.5 判断某一年是否为闰年。 <br>
闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除;②能被400整除。 <br>
public class LeapYear{ <br>
public static void main( String args[] ){ <br>
int year=1989;<br>
//=========method 1============<br>
if( (year%4==0 && year%100!=0) || (year%400==0) ) <br>
System.out.println(year+" is a leap year."); <br>
else <br>
System.out.println(year+" is not a leap year."); <br>
year=2000; <br>
//========method 2=============<br>
boolean leap; <br>
if( year%4!=0 ) <br>
leap=false; <br>
else if( year%100!=0 ) <br>
leap=true; <br>
else if( year%400!=0 ) <br>
leap=false; <br>
else <br>
leap=true; <br>
if( leap==true ) <br>
System.out.println(year+" is a leap year."); <br>
else <br>
System.out.println(year+" is not a leap year."); <br>
year=2050; <br>
//=======method3 ================<br>
if( year%4==0)<br>
{if( year%100==0 ) <br>
{if( year%400==0) <br>
leap=true; <br>
else <br>
leap=false; <br>
}<br>
else <br>
leap=true; <br>
}<br>
else <br>
leap=false; <br>
if( leap==true ) <br>
System.out.println(year+" is a leap year."); <br>
else <br>
System.out.println(year+" is not a leap year."); <br>
} <br>
} <br>
运行结果为<br>
C:\>java LeapYear <br>
1989 is not a leap year. <br>
2000 is a leap year. <br>
2050 is not a leap year. <br>
<br>
该例中,方法1用一个逻辑表达式包含了所有的闰年条件,方2使用了if-else语句的特殊形式,方法3则通过使用大括号{}对if-else进行匹配来实现闰年的判断。大家可以根据程序来对比这三种方法,体会其中的联系和区别,在不同的场合选用适当的方法。 <br>
<br>
2. 多路分支语句switch <br>
<br>
switch 语句根据表达式的值来执行多个操作中的一个,它的 <br>
般格式如下: <br>
<br>
switch (expression){ <br>
case value1 : [statement1;] <br>
[break;]<br>
case value2 : [statement2;]<br>
[break;]<br>
…………<br>
case valueN : [statemendN;]<br>
[break;]<br>
[default : defaultStatement; ] <br>
} <br>
<br>
(1)表达式expression可以返回简单类型的值(如整型、字符型),多路分支语句把表达式返回的值与每个case子句中的值相比。如果匹配成功,则执行该case子句后的语句序列。 <br>
(2)case子句中的值valueI必须是常量,而且所有case子句中的值是不同的。 <br>
(3)default子句是任选的。当表达式的值与任一case子句中的valueI都不匹配时,程序执行<br>
default后面的语句。如果表达式的值与任一case子句中的值都不匹配且没有default子句,则程<br>
序不作任何操作,而是直接跳出switch语句。 <br>
(4)break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。因为case子句只是起到一个标号的作用,用来查找匹配的入口,从此处开始执行,对后面<br>
的case子句不再进行匹配,而是直接执行其后的语句序列, 因此该在每个case分支后,要用break来终止后面的case分支语句的执行。 <br>
(5)在一些特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break。<br>
(6)case分支中包括多个执行语句时,可以不用大括号{}括起。 <br>
(7)switch语句的功能可以用if-else来实现,但在某些情况下,使用switch语句更简炼,可读性强,而且程序的执行效率提高。 <br>
<br>
例2.6 根据考试成绩的等级打印出百分制分数段。 <br>
<br>
public class GradeLevel{ <br>
public static void main( String args[] ){ <br>
System.out.println("\n** first situation **"); <br>
char grade='C'; //normal use <br>
switch( grade ){ <br>
case 'A' : System.out.println(grade+" is 85~100"); <br>
break; <br>
case 'B' : System.out.println(grade+" is 70~84"); <br>
break; <br>
case 'C' : System.out.println(grade+" is 60~69"); <br>
break; <br>
case 'D' : System.out.println(grade+" is <60"); <br>
break; <br>
default : System.out.println("input error"); <br>
} <br>
System.out.println("\n** second situation **"); <br>
grade='A'; ∥creat error without break statement <br>
switch( grade ){ <br>
case 'A' : System.out.println(grade+" is 85~100"); <br>
case 'B' : System.out.println(grade+" is 70~84"); <br>
case 'C' : System.out.println(grade+" is 60~69"); <br>
case 'D' : System.out.println(grade+" is <60"); <br>
default : System.out.println("input error"); <br>
} <br>
System.out.println("\n** third situation **"); <br>
grade='B'; ∥several case with same operation <br>
switch( grade ){ <br>
case 'A' : <br>
case 'B' : <br>
case 'C' : System.out.println(grade+" is >=60"); <br>
break; <br>
case 'D' : System.out.println(grade+" is <60"); <br>
break; <br>
default : System.out.println("input error"); <br>
} <br>
} <br>
} <br>
运行结果为<br>
C:\>java GradeLevel <br>
**** first situation **** <br>
C is 60~69 <br>
**** second situation **** <br>
A is 85~100 <br>
A is 70~84 <br>
A is 60~69 <br>
A is <60 <br>
input error <br>
**** third situation **** <br>
B is >=60 <br>
<br>
从该例中我们可以看到break语句的作用。 <br>
<br>
3. break语句 <br>
在switch语中,break语句用来终止switch语句的执行。使程序switch语句后的第一个语句<br>
开始执行。 <br>
在Java中,可以为每个代码块加一个括号,一个代码块通常用大括号{}括起来的一段代码。加标号的格式如下: BlockLabel: { codeBlock } <br>
break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行。其格式为: <br>
break [标号];<br>
例如: <br>
a:{…… //标记代码块a <br>
b: {…… //标记代码块b <br>
c: {…… //标记代码块c <br>
break a; <br>
…… //will not be executed <br>
} <br>
…… //will not be executed <br>
} <br>
…… //will not be executed <br>
} <br>
…… /execute from here <br>
} <br>
<br>
与C、C++不同,Java中没有goto语句来实现任意的跳转,因为goto语句破坏程序的可读性<br>
,而且影响编译的优化。但是从上例可以看出,Java用break来实现goto语句所特有的一些优点<br>
。如果break后所指定的标号不是一个代码块的标号,而是一个语句,则这时break完全实现goto的功能。不过应该避免这种方式的使用。如果没有标号,则跳出包含break语句的最内层的那个块语句。</p>
<p>4.返回语句return <br>
return语句从当前方法中退出,返回到调用该方法的语句处,继续程序的执行。(有关方法的内容,我们将在第三章详细讲)
。返回语句有两种格式: <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -