java控制语句
Java程序通过控制语句来执行程序流,完成一定的任务。程序流是由若干个语句组成的,语句可以是单一的一条语句,如c=a+b,也可以是用大括号{}括起来的一个复合语句。Java中的控制语句有以下几类:
◇ 分支语句:if-else, switch
◇ 循环语句:while, do-while, for
◇ 与程序转移有关的跳转语句:break, continue, return
◇ 例外处理语句:try-catch-finally, throw
◇ 注释语句://,/* */, /** */
1 分支语句
分支语句提供了一种控制机制,使得程序的执行可以跳过某些语句不执行,而转去执行特定的语句。
1.条件语句 if-else
if(boolean-expression)
statement1;
[else statement2;]
(1)布尔表达式boolean-expression是任意一个返回布尔型数据的达式(这比C、C++的限制要严格)。
(2)每个单一的语句后都必须有分号。
(3)语句statement1,statement2可以为复合语句,这时要用大括号{}括起。建议对单一的语句也用大括号括起,这样程序的可读性强,而且有利于程序的扩充(可以在其中填加新的语句)。{}外面不加分号。
(4)else子句是任选的。
(5)若布尔表达式的值为true,则程序执行statement1,否则执行statement2。
(6)if-else语句的一种特殊形式为:
if(expression1){
statement1
}else if(expression2){
statement2
}......
}else if(expressionM){
statementM
}else{
statementN
}
else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用大括号{}来改变配对关系。
【例】最简单的分支结构实现Example1_5.java
public class Example1_5 {
public static void main(String[] args) {
int score = 56;
if(score>60)
数学及格了");
}
}
【例】简单的双分支结构实现Example1_6.java
public class Example1_6 {
public static void main(String[] args) {
int a = 4 , b = 5 ;
int max;
if(a>b)
max=a;
else
max=b;
System.out.println("max=",max);
}
}
【例】判断某一年是否为闰年。
闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除;②能被4整除,又能被100整除。
public class Example1_7{
public static void main(String args[]){
int year=1989;
if((year%4==0&&year%100!=0)||(year%400==0))
System.out.println(year+"isaleapyear.");
else
System.out.println(year+"isnotaleapyear.");
}
2.多分支语句 switch
switch语句根据表达式的值来执行多个操作中的一个,它的般格式如下:
switch (expression){
case value1:statement1;
break;
case value2:statement2;
break;
…………
case valueN:statemendN;
break;
[default:defaultStatement;]
}
(1)表达式expression可以返回任一简单类型的值(如整型、实型、字符型),多分支语句把表达式返回的值与每个case子句中的值相比。如果匹配成功,则执行该case子句后的语句序列。
(2)case子句中的值valueI必须是常量,而且所有case子句中的值是不同的。
(3)default子句是任选的。当表达式的值与任一case子句中的?都不匹配时,程序执行default后面的语句。如果表达式的值与任一case子句中的值都不?配且没有default子句,则程序不作任何操作,而是直接跳出switch语句。
(4)break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。因为case子句只是起到一个标号的作用,用来查找匹配的入口并从此处开始执行,对后面的case子句不再进行匹配,而是直接执行其后的语句序列,因此该在每个case分支后,要用break来终止后面的case分支语句的执行。在一些特殊情况下,多个不同的case值要执行一组相同的操,这时可以不用break。
(5)case分支中包括多个执行语句时,可以不用大括号{}括起。
(6)switch语句的功能可以用if-else来实现,但在某些情况下,使switch语句更简炼,可读性强,而且程序的执行效率提高。
【例】根据考试成绩的等级打印出百分制分数段。
public class Example1_8{
public static void main(String args[]){
System.out.println("\n**firstsituation**");
char grade='C';//normaluse
switch(grade){
case 'A':System.out.println(grade+" is 85~100"); break;
case 'B':System.out.println(grade+" is 70~84"); break;
case 'C':System.out.println(grade+" is 60~69"); break;
case 'D':System.out.println(grade+" is <60");
}
}
}
【例】根据百分制分数的考试成绩打印出等级段。
public class Example1_9 {
public static void main(String[] args) {
System.out.println("\n**firstsituation**");
float score=77f;
int grade;
grade = (int )score/10;
switch(grade){
case 10:
case 9: System.out.println(score +" is A"); break;
case 8: System.out.println(score+" is B"); break;
case 7:
case 6: System.out.println(score+" is C"); break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: System.out.println(score+" is D"); break;
default : System.out.println(" the score is valid\n");
}
}
}
2 循环语句
循环(loops)语句的作用是反复执行一段代码,直到满足终止循环的条件为止。Java语言中提供的循环语句有:
◇ while语句
◇ do-while语句
◇ for语句
1.while语句
while 语句是Java 最基本的循环语句。当它的控制表达式是真时,while 语句重复执行一个语句或语句块。它的通用格式如下:
while(condition) {
// body of loop
}
条件condition 可以是任何布尔表达式。只要条件表达式为真,循环体就被执行。当条件condition 为假时,程序控制就传递到循环后面紧跟的语句行。如果只有单个语句需要重复,大括号是不必要的。
【例】用while循环求1~100的和
public class Example1_10 {
public static void main(String[] args) {
int i = 1;
int result = 0;
while (i<=100){
result = result + i;
i++;
}
System.out.println(" the result is "+result);
}
}
因为while 语句在循环一开始就计算条件表达式,若开始时条件为假,则循环体一次也不会执行。例如,下面的程序代码中,对println( ) 的调用从未被执行过:
int a = 10, b = 20;
while(a > b)
System.out.println(This will not be displayed);
while 循环(或Java 的其他任何循环)的循环体可以为空。这是因为一个空语句(null statement) (仅由一个分号组成的语句)在Java 的语法上是合法的。
【例】分析下面的程序
public class Example1_11 {
public static void main(String[] args) {
int i, j;
i = 100;
j = 200;
// find midpoint between i and j
while( ++i < --j) ; // no body in this loop
System.out.println("Midpoint is "+i);
}
}
该程序找出变量i和变量j的中间点。它产生的输出如下:
Midpoint is 150
该程序中的while 循环是这样执行的。值i自增,而值j自减,然后比较这两个值。如果新的值i仍比新的值j小,则进行循环。如果i等于或大于j,则循环停止。在退出循环前,i 将保存原始i和j的中间值(当然,这个程序只有在开始时i比j小的情况下才执行)。正如你看到的,这里不需要循环体。所有的行为都出现在条件表达式自身内部。在专业化的Java 代码中,一些可以由控制表达式本身处理的短循环通常都没有循环体。
2.do-while语句
如果while 循环一开始条件表达式就是假的,那么循环体就根本不被执行。然而,有时需要在开始时条件表达式即使是假的情况下,while 循环至少也要执行一次。换句话说,有时需要在一次循环结束后再测试中止表达式,而不是在循环开始时。Java 就提供了这样的循环:do-while 循环。do-while 循环总是执行它的循环体至少一次,因为它的条件表达式在循环的结尾。它的通用格式如下:
do {
// body of loop
} while (condition);
do-while 循环总是先执行循环体,然后再计算条件表达式。如果表达式为真,则循环继续。否则,循环结束。对所有的Java 循环都一样,条件condition 必须是一个布尔表达式。
【例】用do…while循环求1~100的和
public class Example1_12 {
public static void main(String[] args) {
int i = 1;
int result = 0;
do {
result = result + i;
i++;
} while (i<=100);
System.out.println(" the result is "+result);
}
}
3.for语句
for 循环的通用格式:
for(initialization; condition; iteration) {
// body
}
for循环的执行过程如下。
第一步,当循环启动时,先执行其初始化部分(initialization)。通常,这是设置循环控制变量值的一个表达式,作为控制循环的计数器,初始化表达式仅被执行一次。
第二步,计算条件condition 的值。条件condition 必须是布尔表达式。它通常将循环控制变量与目标值相比较。如果这个表达式为真,则执行循环体;如果为假,则循环终止。
第三步,执行循环体的反复部分(iteration)。这部分通常是增加或减少循环控制变量的一个表达式。
重复循环,首先计算条件表达式的值,然后执行循环体,接着执行反复表达式。这个过程不断重复直到控制表达式变为假。
◇ 初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。
◇ 在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。
for( i=0, j=10; i<j; i++, j--){
……
}
【例】用for循环求1~100的和
public class Example1_13 {
public static void main(String[] args) {
int i, result = 0;
for( i = 0; i<=100; i++)
result = result + i;
System.out.println(" the result is "+result);
}
}
3 循环嵌套
和其他编程语言一样,Java 允许循环嵌套。也就是,一个循环在另一个循环之内。
【例】分析程序中的循环嵌套
// Loops may be nested.
public class Example1_14 {
public static void main(String args[]) {
int i, j;
for(i=0; i<5; i++ ) {
for(j=i; j<5 j++)
System.out.print("·");
System.out.println();
}
}
}
程序运行结果如下所示:
·····
····
···
··
·
4 跳转语句
Java 支持 3 种跳转语句:break,continue 和return 。这些语句把控制转移到程序的其他部分。
注意:除了这里讨论的跳转语句,Java 还支持另一种能改变程序执行流程的方法:异常处理。异常处理提供了一种结构化的方法,通过该方法可以使你的程序捕获并处理运行时刻错误。它由下列五个关键字来控制:try,catch,throw,throws,和 finally 。实质上,异常处理机制允许程序完成一个非局部的分支跳转。由于异常处理是一个大话题,将在第 10 章专门讨论。
1.break 语句
在Java 中,break语句可有一下作用。
l 在switch语句中,它被用来终止一个语句序列。
l 直接强行退出循环,忽略循环体中的任何其他语句和循环的条件测试。
【例】分析例子
// Using break to exit a loop.
public class Example1_15 {
public static void main(String[] args) {
for(int i=0; i<100; i++) {
if(i == 5) break; // terminate loop if i is 5
System.out.println("i: " + i);
}
System.out.println("Loop complete.");
}
}
该程序产生如下的输出:
i: 0
i: 1
i: 2
i: 3
i: 4
Loop complete.
尽管for 循环被设计为从 0执行到99,但是当i等于5时,break语句终止了程序。
在一系列嵌套循环中使用break 语句时,它将仅仅终止最里面的循环。
【例】分析例子
// Using break with nested loops.
public class Example1_16 {
public static void main(String args[]) {
for(int i=0; i<3; i++) {
System.out.print("Pass " + i + ": ");
for(int j=0; j<100; j++) {
if(j == 10) break; // terminate loop if j is 10
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Loops complete.");
}
}
该程序运行结果如下:
Pass 0: 0 1 2 3 4 5 6 7 8 9
Pass 1: 0 1 2 3 4 5 6 7 8 9
Pass 2: 0 1 2 3 4 5 6 7 8 9
Loops complete.
从中可以看出,在内部循环中的break语句仅仅终止了该循环,外部的循环不受影响。
关于break ,在这里要记住两点:
l 一个循环中可以有一个以上的break 语句。但要小心,太多的break 语句会破坏你的代码结构。
l switch语句中的break仅仅影响该switch 语句,而不会影响其中的任何循环。
break 不是被设计来提供一种正常的循环终止的方法。循环的条件语句是专门用来终止循环的。只有在某类特殊的情况下,才用break 语句来取消一个循环。
2.continue语句
continue语句只能使用在循环语句内部,功能是跳过该次循环,继续执行下一次循环结构。在while和do-while语句中continue语句跳转到循环条件处开始继续执行,而在for语句中continue语句跳转到迭代语句处开始继续执行。
【例】分析代码
int i = 0;
while(i < 4){
i++;
if(i == 2)
continue;
System.out.println(i);
}
该代码的执行结果是:
1
3
4
) Z; f8 C# }; X在变量i的值等于2时,执行continue语句,则后续未执行完成的循环体将被跳过,而直接进入下一次循环。
5 x* M7 `1 d& O% J在实际的代码中,可以使用continue语句跳过循环中的某些内容。
/ ?$ @) x8 c [2 K) B/ w和前面介绍的break语句类似,continue语句使用在循环嵌套的内部时,也只是跳过所在循环的结构,如果需要跳过外部的循环,则需要使用标签语句标识对应的循环结构。
【例】分析代码
lable1:
$ l2 T6 T) h4 A6 I' r7 @, Jfor(int i = 0; i < 10; i++){
for(int j = 0; j < 5; j++){
System.out.println(j);
if(j == 3)
* {$ e) y$ ?! a. @" Kcontinue label1;
, h# D* Q1 V/}
2 L+ v2 J2 M% ~" U}
这样在执行continue语句时,就不再是跳转到j++语句,而是直接跳转到i++语句
3.返回语句return
return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:
l return expression ;
l return;