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. LeetCode 870.优势洗牌(C++)

    给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 1: 输入: ...

  2. Js获取移动设备分辨率

    在<head>中引入  <meta name="viewport" content="width=device-width, initial-scale ...

  3. POJ 3164——Command Network——————【最小树形图、固定根】

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 15080   Accepted: 4331 ...

  4. WPF的组成架构

    Windows呈现基础(Windows Presentation foundation,WPF)是微软新一代图形系统,运行,NET Framework3.0架构下,为用户界面.2D/3D图形.文档和媒 ...

  5. apache安装 windows

    进入cmd cd apache目录 httppd.exe ?显示全部命令 httppd.exe -k install 安装apache httppd.exe -k start 启动 检测是否运行 浏览 ...

  6. NoSQL(Not Only SQL)

    Everything has its properties and has relation with each other. All in world can be related to each ...

  7. Shader学习笔记整理

    1.常用矩阵 UNITY_MATRIX_V 视口矩阵 UNITY_MATRIX_P 投影矩阵 UNITY_MATRIX_MV 模型矩阵 * 视口矩阵 UNITY_MATRIX_MVP 模型矩阵 * 视 ...

  8. 仿真DDR3 Controller IP

    一.Creat a new project,generate a new DDR3 IP,Close Project. 二.打开工程文件下的 X_example_design-->simulat ...

  9. jquery.dad.js实现table的垂直拖拽(并取到当前拖拽对象)

    http://sc.chinaz.com/jiaoben/161202572210.htm 1.首先官网实例,实现的都是div为容器的元素拖拽,示例如下: 2.最近的项目,要实现tbody的每一行tr ...

  10. Linux安装中文字体包

    进入rhel5.5安装盘/Server路径找到字体安装包: fonts-chinese-3.02-12.el5.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.no ...