一、 Java中的goto关键字

在C/C++中,goto常被用于跳出多重循环。但goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。实际上,自从“goto有害论”提出后,软件开发就不建议使用goto了,但是Java中依然保留了goto这个关键字留作备用,但这个关键字没有任何作用,只是为了将来可能的扩展,防止使用goto作为程序中的标识符。
  类似地,Java中的const也只是一个不起作用的保留关键字(不具备C语言中定义常量的作用,Java中要想定义常量使用final关键字),与goto一样防止作为程序中的标识符。

二、Java中的标签

虽然Java中的goto不起作用,但Java 中同样可以定义标签(当然Java中标签的设计不是为了goto),使用标识符加冒号的形式,如“mylabel:”。
  Java 中的标签是为循环设计的,是为了在多重循环中方便的使用 break 和 coutinue 而设计的。(这也是Java中唯一用到标签的地方!)正是由于这个原因,Java 的标签只能定义在三种循环 (for() {}, do{} while(), while() {}) 的开始位置,否则编译器会报告说找不到标签。
  在循环前面加上标签,就好像给循环起了个名字。而后在循环中使用 break 或者 continue 语句的时候,就可以带上这个标签做为参数,指明跳出 (break) 或者继续 (continue)标签对应的哪个循环,如“break mylabel;”、“continue mylabel;”。

三、示例

package check;public class retryLearn {static void retryContinue() {System.out.println("执行retryContinue:");int i = 0, j = 0;retry:for (i = 0; i < 2; i++) {for (j = 0; j < 5; j++) {System.out.println(j);if (j == 3) {continue retry;}}}System.out.printf("after loop, i = %d, j=%d", i, j);}static void retryBreak() {System.out.println("执行retryBreak:");int i = 0, j = 0;retry1:for (i = 0; i < 2; i++) {for (j = 0; j < 5; j++) {System.out.println(j);if (j == 3) break retry1;}}System.out.printf("after loop, i = %d, j=%d\n", i, j);}static void whileLabel() {System.out.println("执行whileLabel:");int i = 0;int j = 0;whileLabel:while (i++ < 10) {while (j < 10) {System.out.println(j);if (j == 6) break whileLabel;++j;}}System.out.printf("after loop, i = %d, j=%d\n", i, j);}public static void main(String[] args) {retryContinue();System.out.println("***********************");retryBreak();System.out.println("***********************");whileLabel();}
}

break/continue+标签都是紧跟在循环的前面使用,以retryBreak函数举例,当第二层for循环中j的值是3的时候,执行”break retry1"语句,而retry1这个标签标记的是第一层循环,也就是说对最外层循环执行break,所以当在i的值为0,j的值为3的时候跳转两层嵌套的for循环!

四、应用

虽然break/continue+标签的用法平时很少见到,但在Java的源码中不时会看到,如在ThreadPoolExecutor类中的addWorker方法就使用了"continue 标签"。因此这也是Java程序设计的一种技巧,需要加以掌握。

Java中的goto相关推荐

  1. Java中的goto实现

    Java语言中goto是保留关键字,没有goto语句,也没有任何使用goto关键字的地方. Java中也可在特定情况下,通过特定的手段,来实现goto的功能.显然Java不愿意开发者随意跳转程序.下面 ...

  2. 在java中goto是意思,关于Java中的goto语句

    自学Java遇到的问题1 goto语句的问题 1.1 背景 2.1 尝试 3.1 总结 goto语句的问题 今天是我自学Java第4天,开始写博客记录学习中遇到的问题.给后来者一些借鉴,也给自己以后回 ...

  3. java类似goto_原来java中也有类似goto语句的标签啊--java label标签

    goto语句的危害: goto语句是在源码级上的跳转,这使其招致了不好的声誉.若一个程序总是从一个地方跳到另一个地方,还有什么办法来控制程序的流程. java中的"goto": 虽 ...

  4. java中goto用法源代码,java中goto语句解析12

    hi, 今天无意中看到有个兄弟在java程序中多次用到了goto语句,感觉很是怪异,copy来编译下发现有很多错误! 为此,我付出了一下午时间去研究这个块被人遗忘了的可怕的"魔鬼" ...

  5. c语言常用转向的语句,java中类似于C语言的goto无条件转向语句的语法是什么?...

    满意答案 Java不存在goto语句,但是已经用"类名.方法"的形式进行方法调用. 解释:goto语句作为java的保留字段,但是没有实际的应用的.goto语句实际上是C语言的范畴 ...

  6. java的goto语句_语法 - Java中是否有goto语句?

    语法 - Java中是否有goto语句? 我对此感到困惑. 我们大多数人都被告知Java中没有任何goto语句. 但我发现它是Java中的关键词之一. 哪里可以使用? 如果它不能使用,那么为什么它作为 ...

  7. java中循环语句_Java语法基础之循环结构语句详解

    一.循环结构 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循 ...

  8. Java中带标签的break,continue

    首先不带标签的break,continue 就不介绍了.大家平时用的最多的也就是这样的情况了. 首先Java中没有goto,但是可以利用带标签的break, continue来实现类似的跳转. 首先来 ...

  9. 在Java中如何从一个多层嵌套循环中直接跳出?

    一.问题描述 最近发现一个有趣的问题,在Java中如何从一个多层嵌套循环中退出呢? 例如下面,有两层循环,break只能退出第一个for循环,不能直接跳出第二个for循环外面. public stat ...

最新文章

  1. Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件...
  2. Activity之间的信息传递方式
  3. [《孔雀》观后]聪明的孩子提着易碎的灯笼
  4. 【学术相关】11 个好用的科研工具推荐!工作效率提升 max!
  5. 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句
  6. HTML DOM学习
  7. win10系统下使用大漠插件后台截图卡住的解决方法
  8. k8s 部署spring cloud项目
  9. STM32F407——SYN6288语音播报模块串口一修改为串口三
  10. SNN系列|神经元模型篇(2) Izhikevich
  11. 苹果呼叫转移设置不了_0广告,支持苹果,甜美小姐姐or磁性小哥哥做助理!
  12. 郑立:一个80后神话的倒掉
  13. 进程与线程的一个简单解释---阮一峰的网络日志
  14. csgo查询服务器延迟,《csgo》网络延迟怎么查看 网络延迟ping查看方法分享
  15. css横排文字光影效果_css实现发光文字,以及一点点js特效
  16. git版本管理工具用法介绍
  17. 链接如何生成二维码?怎样创建一个网址二维码?
  18. 新型肺炎疫情导致华为手机遭受重大挫折,排名滑落两名
  19. 模拟计算 |“五重解读”带你玩转CO2RR描述符-科学指南针
  20. 千秋华夏 壮丽河山 国庆节快乐~

热门文章

  1. 三维重建工具001-——正确安装kaolin库并在SMR上运行
  2. 下了31个markdown编辑器,我就不信选不出一个好用的
  3. vant weapp 多选上传图片_使用vant组件upLoad上传视频或图片
  4. 百度前端技术学院github地址
  5. PackagesNotFoundError: The following packages are not available from current channels解决办法
  6. 用计算机千本樱,B 千本樱整理版
  7. matlab飞机高度控制系统,基于MatlabSimulink的旋翼飞机高度复合控制系统仿真作业.doc...
  8. mkmf.rb can‘t find header files for ruby at /System/Library/Frameworks/Ruby.framework/... ...
  9. Django admin 管理工具
  10. Merkle Tree 概念