带标签的continue、break不带标签的和continue、break之间的区别?

标签:

在JAVA中,标签是后面带有冒号的标识符(来源于java编程思想),就像下面这样:

Outer:

 在JAVA中,标签起作用的唯一的地方刚好是迭代语句之前。“刚好之前”的意思是,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键词通常只中断当前循环,但若随同标签一起使用,它们就会中断循环,直到标签所在的地方:

label1:
外循环入口
{
  内循环入口
    {
    break;  //(1)
    continue; //(2)
    continue label; //(3)
    continue label; //(4)
    }
}

  (1)break中断内部迭代,回到外部迭代。

(2)continue使执行点移回内部迭代的起始处。
(3)continue label同时中断内部迭代及外部迭代,直接转到label处,随后,它实际上是继续迭代过程,但却从外部迭代开始。
(4)break label也会中断所有迭代,回到label处,但并不从新进入循环,即实际上是完全中止了两个迭代。

下面是标签用于for循环的例子:

public class LabeledFor {
  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++) {
        System.out.println("i = " + i);
        if(i == 2) {
          System.out.println("continue");
          continue;
        }
        if(i == 3) {
          System.out.println("break");
          i++; // Otherwise i never
               // gets incremented.
               //执行i++语句,break中断了当前的循环体,导致for中的i++没有被执行
          break;
        }
        if(i == 7) {
          System.out.println("continue outer");
          i++; // Otherwise i never
               // gets incremented.
               //也会执行i++语句,continue outer 中断了所有的循环体,并返回到outer标签处,但是             
               //中,会再次进入循环体  
          continue outer;
        }
        if(i == 8) {
          System.out.println("break outer");
                //break outer 中断了所有的循环体,并返回到outer标签处,但是不会再进入循环体中
          break outer;

        }
        for(int k = 0; k < 5; k++) {
          if(k == 3) {
            System.out.println("continue inner");
            continue inner;
          }
        }
      }
    }
    // Can't break or continue to labels here
  }
} 

 

/* Output:
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和continue:

  1. 一般的continue会退到最内层循环的开头,并继续执行。
  2. 带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环。
  3. 一般的break会中断并跳出当前循环。
  4. 带标签的break会中断并跳出标签所指的循环。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值