java循环控制中break、continue、return的区别

1 使用break 语句在Java 中,break语句有3种作用。
            第一,你已经看到,在switch语句中,它被用来终止一个语句序列。
            第二,它能被用来退出一个循环。
            第三,它能作为一种“先进”goto 语句来使用。
    下面对最后 2种用法进行解释。 
    使用break 退出循环 可以使用break 语句直接强行退出循环,忽略循环体中任何其他语句和循环条件测试。在循环中遇到break语句时,循环被终止,程序控制在循环后面语句重新开始。
    下面是一个简单例子:

 // Using break to exit a loop. 
class BreakLoop {
 public static void main(String args[]) {
 for(int i=0; i<100; i++) { 
if(i == 10) break; // terminate loop if i is 10
 System.out.println("i: " + i);
 } 
System.out.println("Loop complete."); 
} 
} 


    该程序产生如下输出:
     i: 0 i: 1 i: 2 i: 3 i: 4 i: 5 i: 6 i: 7 i: 8 i: 9 Loop complete. 
    正如你看到那样,尽管for 循环被设计为从 0执行到99,但是当i等于10时,break语句终止程序。break语句能用于任何 Java 循环中,包括人们有意设置无限循环。例如,将上一个程序用while 循环改写如下。该程序输出和刚才看到输出一样。

    
 // Using break to exit a while loop. 
class BreakLoop2 { 
public static void main(String args[]) {
 int i = 0; while(i < 100) {
 if(i == 10)
 break; // terminate loop if i is 10 
System.out.println("i: " + i);
 i++;
 } 
System.out.println("Loop complete."); 
} 
} 


    在一系列嵌套循环中使用break 语句时,它将仅仅终止最里面循环。
    例如: 

   
 // Using break with nested loops. 
class BreakLoop3 {
 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 ,在这里要记住两点。首先,一个循环中可以有一个以上break 语句。但要小心,太多break 语句会破坏你代码结构。其次,switch语句中break仅仅影响该switch 语句,而不会影响其中任何循环。 
    注意:break 不是被设计来提供一种正常循环终止方法。循环条件语句是专门用来终止循环。只有在某类特殊情况下,才用break 语句来取消一个循环。
    把break 当作goto 一种形式来用 break语句除在switch语句和循环中使用之外,它还能作为goto 语句一种“文明”形式来使用。Java 中没有 goto 语句,因为goto 语句提供一种改变程序运行流程非结构化方式。这通常使程序难以理解和难于维护。它也阻止某些编译器优化。但是,有些地方goto 语句对于构造流程控制是有用而且是合法。
    例如,从嵌套很深循环中退出时, goto 语句就很有帮助。因此,Java 定义break 语句一种扩展形式来处理这种情况。通过使用这种形式break,你可以终止一个或者几个代码块。这些代码块不必是一个循环或一个switch语句一部分,它们可以是任何块。而且,由于这种形式break 语句带有标签,你可以明确指定执行从何处重新开始。你将看到,break带给你是goto 益处,并舍弃goto 语句带来麻烦。 
    标签break 语句通用格式如下所示: break label; 这里,标签label 是标识代码块标签。当这种形式break执行时,控制被传递出指定代码块。被加标签代码块必须包围break 语句,但是它不需要是直接包围break块。这意味着你可以使用一个加标签break 语句退出一系列嵌套块。但是你不能使用break 语句将控制传递到不包含break 语句代码块。 要指定一个代码块,在其开头加一个标签即可。标签(label )可以是任何合法有效Java 标识符后跟一个冒号。一旦你给一个块加上标签后,你就可以使用这个标签作为break 语句对象。这样做会使执行在加标签块结尾重新开始。
    例如,下面程序示例 3 个嵌套块,每一个都有它自己标签。
    break语句使执行向前跳,调过定义为标签second 代码块结尾,跳过2个println ( ) 语句。

 

 // Using break as a civilized form of goto. 
class Break { 
public static void main(String args[]) { 
boolean t = true;
 first: { 
second: {
 third: {
System.out.println("Before the break.");
if(t) break second; // break out of second block
System.out.println("This won't execute"); 
}
 System.out.println("This won't execute");
}
System.out.println("This is after second block.");
 } 
} 
} 

 

运行该程序,产生如下输出: Before the break. This is after second block. 标签break 语句一个最普遍用法是退出循环嵌套。例如,下面程序中,外层循环只执行一次: 

 

// Using break to exit from nested loops
 class BreakLoop4 {
 public static void main(String args[]) {
 outer: for(int i=0; i<3; i++) { 
System.out.print("Pass " + i + ": "); 
for(int j=0; j<100; j++) { 
if(j == 10) break outer; // exit both loops 
System.out.print(j + " ");
 }
 System.out.println("This will not print"); 
}
 System.out.println("Loops complete.");
 }
 } 


    该程序产生如下输出: Pass 0: 0 1 2 3 4 5 6 7 8 9 Loops complete. 你可以看到,当内部循环退到外部循环时,两个循环都被终止。记住如果一个标签不在包围break块中定义,你就不能break 到该标签。
    例如,下面程序就是非法,且不会被编译: 

 

 

// This program contains an error. 
class BreakErr { 
public static void main(String args[]) { 
one: for(int i=0; i<3; i++) {
 System.out.print("Pass " + i + ": "); 
} 
for(int j=0; j<100; j++) {
 if(j == 10) break one; // WRONG
 System.out.print(j + " "); 
} 
} 
} 

 

 

因为标签为one循环没有包围break 语句,所以不能将控制传递到该块。 

 

 2 使用continue 语句有时强迫一个循环提早反复是有用。

也就是,你可能想要继续运行循环,但是要忽略这次重复剩余循环体语句。实际上,goto 只不过是跳过循环体,到达循环尾部。continue 语句是break语句补充。在while 和do while 循环中,continue 语句使控制直接转移给控制循环条件表达式,然后继续循环过程。在for 循环中,循环反复表达式被求值,然后执行条件表达式,循环继续执行。对于这3种循环,任何中间代码将被旁路。
    下例使用continue 语句,使每行打印2个数字: 

 

// Demonstrate continue. 
class Continue {
 public static void main(String args[]) {
 for(int i=0; i<10; i++) {
 System.out.print(i + " ");
 if (i%2 == 0) 
   continue; 
System.out.println(""); 
} 
} 
} 

 

该程序使用%(模)运算符来检验变量i是否为偶数,如果是,循环继续执行而不输出一个新行。
    该程序结果如下: 0 1 2 3 4 5 6 7 8 9 对于break语句,continue 可以指定一个标签来说明继续哪个包围循环。下面例子运用continue 语句来打印0到9三角形乘法表:

 

 // Using continue with a label. 
class ContinueLabel {
 public static void main(String args[]) { 
outer: for (int i=0; i<10; i++) {
 for(int j=0; j<10; j++) {
 if(j > i) { 
System.out.println(); 
continue outer; 
} 
System.out.print(" " + (i * j)); 
}
} System.out.println();
 } 
} 

 

在本例中continue 语句终止计数j循环而继续计数i下一次循环反复。该程序输出如下: 0 0 1 0 2 4 0 3 6 9 0 4 8 12 16 0 5 10 15 20 25 0 6 12 18 24 30 36 0 7 14 21 28 35 42 49 0 8 16 24 32 40 48 56 64 0 9 18 27 36 45 54 63 72 81 很好利用continue 语句情况很少,一个原因是Java 提供一系列丰富循环语句,可以适用于绝大多数应用程序。但是,对于那些需要提早反复特殊情形,continue 语句提供一个结构化方法来实现。 
   


3 使用return语句最后一个控制语句是return。
    return语句用来明确地从一个方法返回。也就是,return 语句使程序控制返回到调用它方法。因此,将它分类为跳转语句。尽管对return 语句详细讨论在第 7 章开始,这里对其作简要地介绍。 在一个方法任何时间,return 语句可被用来使正在执行分支程序返回到调用它方法。下面例子说明这一点。下例中,由于是Java 运行系统调用main() ,因此,return语句使程序执行返回到Java 运行系统。

 

 // Demonstrate return. 
class Return { 
public static void main(String args[]) {
 boolean t = true; 
System.out.println("Before the return.");
 if(t) return; // return to caller
 System.out.println("This won't execute."); 
} 
} 

 

 

该程序结果如下: Before the return. 正如你看到一样,最后println( ) 语句没有被执行。一旦return语句被执行,程序控制传递到它调用者。 最后一点:在上面程序中,if(t)语句是必要。没有它,Java 编译器将标记“执行不到代码”(unreachable code )错误,因为编译器知道最后println ()语句将永远不会被执行。为阻止这个错误,为这个例子能够执行,在这里使用if语句来“蒙骗”编译器。

转载于:https://www.cnblogs.com/lffsonic/archive/2010/09/17/1829130.html

Javabreakcontinuereturn控制流程的关键字,用于改变程序的执行顺序或跳出循环下面我将分别解释它们的用途和用法。 - break关键字用于在循环提前终止循环或跳出特定的代码块。在给定的第一个引用,我们可以看到break的应用。在第一个for循环的内部,当i等于0时,使用break语句终止了第一个for循环,并跳到了标有first的位置。同样地,在第二个for循环,当j等于0时,使用break语句终止了第二个for循环。这是break的常见用法,用于跳出循环继续执行后续的代码。 - continue关键字也用于在循环控制流程,但与break不同,它会跳过当前迭代并继续到下一次迭代。给定的第三个引用展示了continue的应用。在嵌套的两个for循环,当x等于2时,使用continue语句跳过当前迭代,并进入下一次迭代。这意味着在这种情况下,内部循环的语句不会执行,而外部循环继续执行。 - return关键字用于从方法返回值,并终止方法的执行。在给定的第二个引用,我们可以看到return的应用。在testFinally4方法,无论try块的代码是否出现异常,finally块的语句都会执行。在这种情况下,finally块return语句将覆盖try块return语句,并返回"return in finally"作为方法的返回值。 综上所述,在Javabreak用于终止循环或跳出特定代码块,continue用于跳过当前迭代并继续到下一次迭代,而return用于从方法返回值并终止方法的执行。这些关键字在控制流程和代码执行方面起着重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值