java 中的break语句和continue语句

本文深入探讨Java中break和continue语句的高级用法,包括如何通过标记控制多重循环的退出和继续,帮助读者理解复杂的循环控制逻辑。

最普通的break语句和continue语句,我想大家在学习c与c++的时候已经很熟悉了,这里也就不多说了,现在主要就是说下java里边的新加的集中重要的用法:

这里,我插一句,其实我想大家都很熟悉c里边有一个见过几次面,但是又不是经常使用的一个语句,那就是goto语句,这个语句,我想老师已经讲过了,而且应该只是只言片语就带过了,因为在很多的老师的眼里,这种语句是个大混蛋,他可以完全打乱一个程序的可读性,和一定的逻辑性。在计算机的发展史上,在19世纪汇编语言刚刚现世的时候,很多的程序员大量的使用这种语句,但是经过一场风波之后,具体的我也不大清楚,请读者咨询百度,导致了这种语句的大量减少使用,导致最后的禁用。。。

现在我就冒天下之大不韪,来为这个沉睡在计算机的发展史上的语句平反陈冤,让他再重见天日!!!

废话不多说,直接进入今天的主题,

package outPak1;
import java.util.*;

public class outCls1 {
		  public static void main(String[] args) {
		    int i = 0;
		    outer: // Can't have statements here
		    for(; true ;) { // infinite loop
		      inner: // Can't have statements here
		      for(; i < 10; i++) {
		        prt("i = " + i);
		        if(i == 2) {
		          prt("continue");
		          continue;
		        }
		        if(i == 3) {
		          prt("break");
		          i++; // Otherwise i never
		               // gets incremented.
		          break;
		        }
		        if(i == 7) {
		          prt("continue outer");
		          i++; // Otherwise i never
		               // gets incremented.
		          continue outer;
		        }
		        if(i == 8) {
		          prt("break outer");
		          break outer;
		        }
		        for(int k = 0; k < 5; k++) {
		          if(k == 3) {
		            prt("continue inner");
		            continue inner;
		          }
		        }
		      }
		    }
		    // Can't break or continue
		    // to labels here
		  }
		  static void prt(String s) {
		    System.out.println(s);
		  }
		} ///:~
这个代码的运行结果是

i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer
说明一下,这里有个很重要的一点,那就是如果使用Break  outer语句的时候需要注意,你使用这个语句是为了调出当前循环,那么也就是说这个“outer:”这样的语句应该写在哪里呢?应该是写在该循环的上边,当然如果当前循环的外边还有一个循环,如果你写在了外边循环的里边,当前循环的前边,那么只是调出当前循环,如果你直接写在了外边循环的前边,那么就是不仅仅跳出了里边的循环,而且直接跳出了外边的循环,continue outer语句也是有着相似的含义;请谨慎使用哦!!!

package outPak1;
import java.util.*;

public class outCls1 {
		  public static void main(String[] args) {
		    int i = 0,time=0;
		    outer: // Can't have statements here
		    for(; true ;) {
		    	// infinite loop
		    	if(time==3) {
		    		break;
		    	}
		    	time++;
		      inner: // Can't have statements here
		      for(i=0; i < 10; i++) {
		        prt("i = " + i);
		        if(i == 2) {
		          prt("continue");
		          continue;
		        }
		        if(i == 3) {
		          prt("break");
		          i++; // Otherwise i never
		               // gets incremented.
		          break;
		        }
		        if(i == 7) {
		          prt("continue outer");
		          i++; // Otherwise i never
		               // gets incremented.
		          continue outer;
		        }
		        if(i == 8) {
		          prt("break outer");
		          break outer;
		        }
		        for(int k = 0; k < 5; k++) {
		          if(k == 3) {
		            prt("continue inner");
		            continue inner;
		          }
		        }
		      }
		    }
		    // Can't break or continue
		    // to labels here
		  }
		  static void prt(String s) {
		    System.out.println(s);
		  }
		} ///:~



输出结果是:

i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break

注意看下哦,这里还需要读者自己仔细体会哦。

当然这里还有一点值得提醒,break [logal]或者continue[logal],这个logal只能是出现在某一个循环的前边,当然如果出现在某一个非循环的前边,或者一个循环的前边出现了一个另外的语句,再然后这个语句的前边出现这个logal,这样是编译错误的。

大家来看个栗子:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		z:
			o+=2;
	for(int i=3;i<8;i++) {
		if(i==4)break;
		if(i==6)break z;
		o+=i;
	}
	System.out.println(o);
	}
这里的break z是编译错误的,应该把加在z:后边的o+=2删了,或者换一个地方。


Java编程语言中,`break` `continue` 是两种用于控制程序流程的跳转语句,它们主要用于循环结构 `switch` 语句中,但其行为用途存在显著差异。 ### `break` 语句 `break` 语句的主要功能是立即退出当前所在的最内层循环(如 `for`、`while`、`do-while`)或 `switch` 语句。一旦执行了 `break`,程序将继续执行紧跟在该循环或 `switch` 结构之后的下一条语句。如果 `break` 出现在嵌套循环中,则它仅影响它所在的最内层循环,而不会直接退出外层循环[^2]。 例如,在一个简单的 `for` 循环中使用 `break` 可以提前终止循环: ```java for (int i = 0; i < 10; i++) { if (i == 5) { break; // 当i等于5时退出循环 } System.out.println(i); } ``` 在 `switch` 语句中,每个 `case` 分支通常以 `break` 结尾,以防止代码从一个 `case` 流入到下一个 `case` 中,这种现象称为“贯穿”(fall-through)。[^4] ### `continue` 语句 与 `break` 不同,`continue` 语句不会完全终止循环,而是跳过当前迭代,直接进入下一次循环的条件判断。这意味着在 `for` 或 `while` 循环中,当 `continue` 被执行时,当前循环体中剩余的代码将被跳过,然后重新评估循环条件以决定是否继续执行下一次迭代。 以下是一个使用 `continue` 的示例,其中跳过了所有偶数的打印: ```java for (int i = 0; i < 10; i++) { if (i % 2 == 0) { continue; // 如果i是偶数,则跳过本次循环的剩余部分 } System.out.println(i); // 只打印奇数 } ``` ### 区别总结 | 特性 | `break` | `continue` | |------|---------|------------| | **作用** | 终止整个循环或 `switch` 语句 | 跳过当前循环的一次迭代 | | **适用范围** | 循环(`for`、`while`、`do-while`) `switch` 语句 | 仅限于循环(`for`、`while`、`do-while`) | | **效果** | 程序控制转移到循环或 `switch` 之后的语句 | 程序控制转移到循环的条件判断部分,准备下一次迭代 | 在多层嵌套的情况下,`break` `continue` 都只能影响它们所在的最内层循环。如果需要从多层嵌套中跳出,可以考虑使用标签(labeled)语句或者重构代码逻辑[^3]。 ### 使用场景 - **`break`**:当你需要根据某个条件提前结束循环时使用。例如,当你在一个搜索操作中找到了目标项后,就可以使用 `break` 来停止进一步的搜索。 - **`continue`**:当你希望跳过某些特定条件下的循环体执行时使用。例如,在处理数据时忽略某些无效或不需要处理的数据点。 ### 示例代码 以下是一个结合 `break` `continue` 的示例,展示了如何在同一个循环中使用它们来控制流程: ```java outerLoop: // 标签定义 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (i == 2 && j == 2) { break outerLoop; // 退出整个外层循环 } if (j % 2 == 0) { continue; // 跳过偶数列 } System.out.println("i=" + i + ", j=" + j); } } ``` 在这个例子中,`break` 带有标签 `outerLoop`,这使得它可以跳出多层嵌套的循环结构,而不仅仅是当前的内层循环。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值