break和continue

break、continue的相关规则如下,while和for同样适用:

  (1)一般的continue会退回最内层循环的开头(顶部),并继续执行

  (2)带标签的continue会到达标签的位置,并重新进入紧接在哪个标签后面的循环

  (3)一般的break会中断并跳出当前循环

  (4)带标签的break会中断并跳出标签所指的循环

代码示例:

public class LabeledFor {
    public static void main(String[] args){
        int i = 0;
        outer:
        for(;true;){
            inner:
            for(;i < 10;i++){
                System.out.println("i =" + i);
                if(i == 2){
                    System.out.println("continue");
                    continue;
                }
                if(i == 3){
                    System.out.println("break");
                    i++;
                    break;
                }
                if(i == 7){
                    System.out.println("continue outer");
                    i++;
                    continue outer;
                }
                if(i == 8){
                    System.out.println("break outer");
                    break outer;
                }
                for(int k= 0;k < 5;k++){
                    if(k == 3){
                        System.out.println("continue inner");
                        continue inner;
                    }
                }
            }
        }
    }
}

执行结果:

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

注意:

  (1)break、continue只能中断最内层的循环;在抵达for循环体末尾之前,递增表达式不会执行。break,continue会跳过递增表达式,故上面示例代码中都有单独自增一次的处理。

  (2)在Java中需要使用标签的唯一理由就是因为有嵌套循环的存在,而且想从嵌套中break或者continue。

  (3)在上篇博文中提及的Dijkstra《Goto有害》论文中,他其实最反对的是标签,而非goto,因为标签和goto的滥用,使得程序难以控制和理解。但是Java中的标签不会,因为他们的应用场合收到了限制(嵌套循环)。由此引出了一个有趣的现象,通过限制语句的能力,反而能使一项语言特性更加有用。

原文地址:https://www.cnblogs.com/promiseslc/p/8633564.html