$break: 只能用在switch语句或者循环语句当中,除此之外不能单独应用,否则编译的时 候会报错;
$continue: 它的应用范围要比break小一层,有且只能用在循环语句当中,continue跳回到循环的顶部。
举个thingking in java 的例子:
<pre>
public class LabeledFor {public static void main(String[] args) {
int i = 0;outer: // Can't have statements herefor(; true ;) { // infinite loop
inner: // Can't have statements herefor(; 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);}
}
</pre>
这里用到了在其他例子中已经定义的 prt()方法。注意break会中断for循环,而且在<strong>抵达for循环的末尾之前,递增表达式不会执行</strong>。由于break跳过了递增表达式,所以递增会在i==3 的情况下直接执行。在 i==7 的情况下,continue outer 语句也会到达循环顶部,而且也会跳过递增,所以它也是直接递增的。
<pre><strong>备注:</strong> 关于带标签的break和continue
Java 中的标签是为循环设计的,是为了在多重循环中方便的使用 break 和 coutinue 而设计的。正是由于这个原因,Java 的标签只能定义在三种循环 (for() {}, do{} while(), while() {}) 的开始位置,否则编译器会报告说找不到标签。
在循环前面加上标签,就好像给循环起了个名字。而后在循环中使用 break 或者 continue 语句的时候,就可以带上这个标签做为参数,指明跳出 (break) 或者继续 (continue) 哪一个循环,如“break mylabel;”、“continue mylabel;”。</pre>
如果没有break outer语句,就没有办法在一个内部循环里找到出外部循环的路径。这是由于break本身只能中断最内层的循环(对于continue 同样如此)。当然,若想在中断循环的同时退出方法,简单地用一个return 即可。下面这个例子向大家展示了带标签的break以及continue语句在while循环中的用法:
<pre>
public class LabeledWhile {public static void main(String[] args) {
int i = 0;outer:while(true) {
prt("Outer while loop");while(true) {
i++;prt("i = " + i);if(i == 1) {
prt("continue");
continue;}
if(i == 3) {prt("continue outer");continue outer;
}if(i == 5) {
prt("break");
break;}
if(i == 7) {prt("break outer");
90
break outer;}
}}
}static void prt(String s) {
System.out.println(s);}
}
</pre>
同样的规则亦适用于while:(1) 简单的一个 continue 会退回最内层循环的开头(顶部),并继续执行。(2) 带有标签的 continue 会到达标签的位置,并重新进入紧接在那个标签后面的循环。(3) break 会中断当前循环,并移离当前标签的末尾。(4) 带标签的break会中断当前循环,并移离由那个标签指示的循环的末尾。这个方法的输出结果是一目了然的:
大家要记住的<strong>重点</strong>是:在Java 里唯一需要用到标签的地方就是拥有嵌套循环,而且想中断或继续多个嵌套级别的时候。在Dijkstra的“Goto有害”论中,他最反对的就是标签,而非goto。随着标签在一个程序里数量的增多,他发现产生错误的机会也越来越多。标签和goto 使我们难于对程序作静态分析。这是由于它们在程序的执行流程中引入了许多“怪圈”。但幸运的是,Java 标签不会造成这方面的问题,因为它们的活动场所已被限死,不可通过特别的方式到处传递程序的控制权。由此也引出了一个有趣的问题:通过限制语句的能力,反而能使一项语言特性更加有用。