• Java的“Goto”与标签


    goto在Java中是一个保留字,但在语言中并没有用到它;Java没有goto。但是,Java也能完成一些类似于跳转的操作,主要是依靠:标签

    为什么要使用标签

    在迭代语句中,我们可以使用break和continue来中断当前循环。但如果出现循环嵌套的情况,使用break和continue只能中断内层循环,无法控制到外层的循环。这时,我们就可以使用标签结合break和continue,中断内层循环,跳转到标签所在的地方。

    标签声明

    标签的声明很简单,加个冒号就行,就像下面这样:

    label1:

    标签使用

    在Java中,标签起作用的唯一地方是在迭代语句之前,注意“唯一”,也就是说不能在其它地方单独使用,只能结合迭代语句共同使用。

    下面这个例子展示了带标签的break以及continue语句在while循环中的用法:

    /**
     * @author zouqingfeng
     */
    public class GotoLabelTest {
        public static void main(String[] args) {
            int i = 0;
            label1: while (true) {
                System.out.println("----------------外层循环开始----------------");
                while (true) {
                    i++;
                    System.out.println("i=" + i);
                    if (i == 1) {
                        System.out.println("continue");
                        continue;
                    }
                    if (i == 3) {
                        System.out.println("continue label1");
                        continue label1;
                    }
                    if (i == 5) {
                        System.out.println("break");
                        break;
                    }
                    if (i == 7) {
                        System.out.println("break label1");
                        break label1;
                    }
                    System.out.println("----------------内层循环结束----------------");
                }
                System.out.println("----------------外层循环结束----------------");
            }
            System.out.println("End");
            /* Output:
                ----------------外层循环开始----------------
                i=1
                continue
                i=2
                ----------------内层循环结束----------------
                i=3
                continue label1
                ----------------外层循环开始----------------
                i=4
                ----------------内层循环结束----------------
                i=5
                break
                ----------------外层循环结束----------------
                ----------------外层循环开始----------------
                i=6
                ----------------内层循环结束----------------
                i=7
                break label1
                End
    
             */        
        }
    }

     从打印的结果可以看出

    当i==1时,执行continue后,没有执行“内层循环结束”打印语句,而是打印了“i=2”,说明continue使执行点回到内层循环起始处,并继续下一次迭代。

    当i==3时,执行continue label1后,没有执行“内层循环结束”打印语句,也没有执行“外层循环结束”,而是打印了“外层循环开始”,说明带标签的continue,对内外层循环都起作用,continue label1同时中断内外层循环,直接跳转到label1标签处,随后,从外部循环开始下一次的迭代。

    当i==5时,执行break后,没有执行“内层循环结束”,但执行了“外层循环结束”,说明break只中断并跳出内层循环,回到了外层循环中。

    当i==7时,执行break label1后,直接打印了“End”,说明带标签的break,对内外层循环都起作用,break label1同时中断内外层循环,直接跳转到label1标签处,但并不重新进入迭代。也就是说,break label1完全终止了两个循环。

    总结

    1. 一般的continue只会对其所在的循环起作用,退回循环的开头,并继续执行。
    2. 带标签的continue会使执行点到达标签的位置,并重新进入紧接在标签后的循环。
    3. 一般的break会中断并跳出当前循环。
    4. 带标签的break会中断并跳出标签所指的循环。
    5. 在Java中,标签起作用的唯一地方是在迭代语句之前。
    6. 在Java中,使用标签的唯一理由是有嵌套循环存在,并且想从多层嵌套中break或continue。
  • 相关阅读:
    Android基站定位
    删除远程分支
    docker的相关使用
    [整理]-端口的概念、常用端口及其对应服务
    [转]-nohup-真正的Shell后台运行
    转- 在ubuntu下安装Nginx
    转: 命名关键字参数
    远程SCP报错,报22号口错误
    vim保存时提示: 无法打开并写入文件
    如何处理导出的csv无法查看身份证后三位的情况?
  • 原文地址:https://www.cnblogs.com/zouqf/p/9881968.html
Copyright © 2020-2023  润新知