博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的“Goto”与标签
阅读量:4913 次
发布时间:2019-06-11

本文共 2703 字,大约阅读时间需要 9 分钟。

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。

 

转载于:https://www.cnblogs.com/zouqf/p/9881968.html

你可能感兴趣的文章
C - Jungle Roads
查看>>
HTML
查看>>
python之猜年纪
查看>>
Github个人主页不显示提交记录的问题
查看>>
java两个栈实现一个队列&&两个队列实现一个栈
查看>>
entityFramework 中decimal精度缺失问题
查看>>
获取webconfig配置文件内容
查看>>
C# 字符串替换第一次或者最后一次出现的匹配项
查看>>
Linux终端查看端口号command
查看>>
《攻城Online》开发前期:UML设计架构
查看>>
HBase简介及集群安装
查看>>
springboot部署到tomcat
查看>>
jquery-ajax之4:无刷新 select 数据源及事件绑定(2)
查看>>
(六)Hive的高级操作
查看>>
java并发阻塞队列
查看>>
poj 2449 Remmarguts' Date 求第k短路 Astar算法
查看>>
lightoj1063【求割点】
查看>>
C#是怎么获取窗口标题的
查看>>
LeetCode 24 Swap Nodes in Pairs
查看>>
JavaScript Boolean(布尔) 对象
查看>>