zoukankan      html  css  js  c++  java
  • java中break,continue,标签实现goto效果(编程思想)

    goto
    编程语言中一开始就有goto关键词了。事实上,goto起源于汇编语言的程序控制:“若条件A成立,则调到这里;否则跳到那里”。
    goto语句时在源码级别上的跳转,这导致了其不好的名誉。于是goto开始保留使用。
    尽管goto仍然是Java中的一个保留字,但在语句中并未使用它:Java没有goto。然而Java也能完成一些类似跳转的操作,这与break和continue这两个关键词有关。它们起始不是一个跳转,而是中断迭代语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使用了相同的机制:标签。
    标签是后面跟有冒号的标识符,就像下面这样:
    label1:
    在Java中,标签其作用的唯一的地方刚好是在迭代语句之前。“刚好之前”的意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键字通常只能中断当前循环,但若索通标签一起使用,它们就会中断循环,知道标签所在的地方。
    label1:
    outer-ieration {
    inner-iteration{
    //...
    break; //(1)
    //...
    continue;//(2)
    //...
    continue label1;//(3)
    //...
    break label1; //(4)
    }
    }
    在(1)中,break中断内部迭代,回到外部迭代。在(2)中,continue使执行点移回内部迭代的起始处。在(3)中,continue label1同时中断内部迭代以及外部迭代,直接转到label1处;随后它实际上时继续迭代过程,但却从外部迭代开始。在(4)中,break label1也会中断所有迭代,并回到label1处,但并不重新进入迭代。也就是说,它实际上是完全终止了两个迭代
    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
    注意,break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行。由于break跳过了递增表达式,所以在i==3的情况下直接对i执行递增操作。在i==7的情况下,continue outer语句会调到循环顶部,而且也会跳过递增,所以这里也对i进行递增。
    如果没有break outer语句,就没办法从内部循环里跳出外部循环。这是由于break本身只能中断最内层的循环(continue亦是如此)
    当然,如果想在中断循环的同时推出,简单地使用一个return即可。
    public static void main(String[] args){
    int i = 0;
    outer:
    while(true){
    System.out.println("Outer while loop");
    while(true){
    i++;
    System.out.println("i = " + i);
    if(i == 1) {
    System.out.println("continue");
    continue;
    }
    if(i == 3) {
    System.out.println("continue outer");
    continue outer;
    }
    if(i == 5){
    System.out.println("break");
    break;
    }
    if(i == 7){
    System.out.println("break outer");
    break outer;
    }
    }
    }
    }
    输出信息:
    Outer while loop
    i = 1
    continue
    i = 2
    i = 3
    continue outer
    Outer while loop
    i = 4
    i = 5
    break
    Outer while loop
    i = 6
    i = 7
    break outer
    同样的规则亦适用于while:
    1、一般的continue会退回最内层循环的开头,并继续执行
    2、带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环
    3、一般的break会中断并跳出当前循环
    4、带比起噢爱按的break会中断并跳出标签所指的循环
    要注意的要点是:在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue。

  • 相关阅读:
    HAVING 和 WHERE 的使用
    Input and Output
    python数据分析知识点
    正则化
    ol 接入百度地图
    高德室内地图解析
    mapbox 接入高德矢量地图实战
    4、微信小程序和weui
    3、YishaAdmin开源框架搭建
    2、微信小程序开发注册、配置介绍说明
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/7200689.html
Copyright © 2011-2022 走看看