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。

Java的“Goto”与标签的更多相关文章

  1. JAVA中的break[标签]continue[标签]用法

    原文:JAVA中的break[标签]continue[标签]用法 注意:JAVA中的标签必须放在循环之前,且中间不能有其他语句.例如:tag:for或while或do--while; 1.使用brea ...

  2. Java中goto和break、continue实现区别

    goto 关键字很早就在程序设计语言中出现.事实上,goto 是汇编语言的程序控制结构的始祖:“若条件 A,则跳到这里:否则跳到那里”.若阅读由几乎所有编译器生成的汇编代码,就会发现程序控制里包含了许 ...

  3. Java中替换HTML标签的方法代码

    这篇文章主要介绍了Java中替换HTML标签的方法代码,需要的朋友可以参考下 replaceAll("\\&[a-zA-Z]{0,9};", "").r ...

  4. Java中goto标签的使用

    编写此文仅为以后可以复习. 最近在自学Java核心技术(很好的书,推荐!!),也是第一次从上面了解了goto,或许只是浅层了解. 错误之处希望大佬们给予批评与建议!!谢谢!!! Java核心技术中就提 ...

  5. JAVA文档注释标签

    1 常用Java注释标签(Java comment tags) @author  作者 @param  输入参数的名称  说明 @return 输出参数说明 @since JDK版本 @version ...

  6. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  7. java替换包含html标签

    说明一下,该文档内容抄自开源中国里的谋篇文章,由于抄袭时间过于久远,已经找不到博主了!暂不能说明出处,源码博主看见勿气,皆可联系本人! 我的博客,文章属于个人收藏,以解日后需要之急! package ...

  8. [刘阳Java]_MyBatis_动态SQL标签用法_第7讲

    1.MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 2.MyBatis中用于实现动态SQL的元素主要有 if choose(when,otherwi ...

  9. java中的@Override标签,小细节大作用

    转载:http://www.cnblogs.com/octobershiner/archive/2012/03/09/2388370.html 一般用途                         ...

随机推荐

  1. (转)Nagios 配置及监控

    Nagios 配置及监控 原文:http://blog.csdn.net/linuxlsq/article/details/52606824 Nagios 监控 在互联网日益发展的今天,监控的重要性已 ...

  2. Deferred跟promise跟js同步问题记录

    之前的时候,碰到过几次同事问我,说js的同步怎么处理,就是我想先执行这段代码(耗时相对较长的一行,多数是异步的一些api调用),执行完了之后我再执行下边这句,每次我都很无奈的说不晓得,如果是ajax的 ...

  3. anaular js loadding效果

    以前用的jquery的时候,用ajax实现,比较好弄,下面是angularjs的方式: //body下面增加div <div data-loading></div> //dir ...

  4. 常用CSS样式设置

    文字 我们以div标签举例,来设置常见的文字样式 <div>今天天气真晴朗!</div> div { /* 文字大小为14像素 */ font-size: 14px; /* 文 ...

  5. Python列表类型及常用操作

    Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...

  6. lunix重启service network restart错误Job for network.service failed. See 'system 或Failed to start LSB: Bring

    1.mac地址不对 通过ip addr查看mac地址,然后修改cd /etc/sysconfig/network-scripts/目录下的文件里面的mac地址 2.通过以下方法 systemctl s ...

  7. ansible使用2-命令

    并发与shell # bruce用户身份,-m指定模块名称,默认模块名command,all所有目标主机,也可以指定组名或者主机名 ansible all -m ping -u bruce # bru ...

  8. 用iSee图片专家制作淘宝店标教程

    普通的淘宝店铺都会有店标.店标都显示在店铺首页的显现位置,买家在逛淘宝店的时候,一眼都会瞄到店标.因此,如果可以制作一个专属于自己店铺的店标,可以吸引买家的眼光,也更好地宣传了店铺. 下面就用iSee ...

  9. LeetCode Path Sum 判断树的路径之和

    /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; ...

  10. leetcode:回溯——permutation-sequence,

    1. permutation-sequence 顺序排列第k个序列 The set[1,2,3,…,n]contains a total of n! unique permutations. By l ...