Java中的goto
一、 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相关推荐
- Java中的goto实现
Java语言中goto是保留关键字,没有goto语句,也没有任何使用goto关键字的地方. Java中也可在特定情况下,通过特定的手段,来实现goto的功能.显然Java不愿意开发者随意跳转程序.下面 ...
- 在java中goto是意思,关于Java中的goto语句
自学Java遇到的问题1 goto语句的问题 1.1 背景 2.1 尝试 3.1 总结 goto语句的问题 今天是我自学Java第4天,开始写博客记录学习中遇到的问题.给后来者一些借鉴,也给自己以后回 ...
- java类似goto_原来java中也有类似goto语句的标签啊--java label标签
goto语句的危害: goto语句是在源码级上的跳转,这使其招致了不好的声誉.若一个程序总是从一个地方跳到另一个地方,还有什么办法来控制程序的流程. java中的"goto": 虽 ...
- java中goto用法源代码,java中goto语句解析12
hi, 今天无意中看到有个兄弟在java程序中多次用到了goto语句,感觉很是怪异,copy来编译下发现有很多错误! 为此,我付出了一下午时间去研究这个块被人遗忘了的可怕的"魔鬼" ...
- c语言常用转向的语句,java中类似于C语言的goto无条件转向语句的语法是什么?...
满意答案 Java不存在goto语句,但是已经用"类名.方法"的形式进行方法调用. 解释:goto语句作为java的保留字段,但是没有实际的应用的.goto语句实际上是C语言的范畴 ...
- java的goto语句_语法 - Java中是否有goto语句?
语法 - Java中是否有goto语句? 我对此感到困惑. 我们大多数人都被告知Java中没有任何goto语句. 但我发现它是Java中的关键词之一. 哪里可以使用? 如果它不能使用,那么为什么它作为 ...
- java中循环语句_Java语法基础之循环结构语句详解
一.循环结构 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循 ...
- Java中带标签的break,continue
首先不带标签的break,continue 就不介绍了.大家平时用的最多的也就是这样的情况了. 首先Java中没有goto,但是可以利用带标签的break, continue来实现类似的跳转. 首先来 ...
- 在Java中如何从一个多层嵌套循环中直接跳出?
一.问题描述 最近发现一个有趣的问题,在Java中如何从一个多层嵌套循环中退出呢? 例如下面,有两层循环,break只能退出第一个for循环,不能直接跳出第二个for循环外面. public stat ...
最新文章
- Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件...
- Activity之间的信息传递方式
- [《孔雀》观后]聪明的孩子提着易碎的灯笼
- 【学术相关】11 个好用的科研工具推荐!工作效率提升 max!
- 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句
- HTML DOM学习
- win10系统下使用大漠插件后台截图卡住的解决方法
- k8s 部署spring cloud项目
- STM32F407——SYN6288语音播报模块串口一修改为串口三
- SNN系列|神经元模型篇(2) Izhikevich
- 苹果呼叫转移设置不了_0广告,支持苹果,甜美小姐姐or磁性小哥哥做助理!
- 郑立:一个80后神话的倒掉
- 进程与线程的一个简单解释---阮一峰的网络日志
- csgo查询服务器延迟,《csgo》网络延迟怎么查看 网络延迟ping查看方法分享
- css横排文字光影效果_css实现发光文字,以及一点点js特效
- git版本管理工具用法介绍
- 链接如何生成二维码?怎样创建一个网址二维码?
- 新型肺炎疫情导致华为手机遭受重大挫折,排名滑落两名
- 模拟计算 |“五重解读”带你玩转CO2RR描述符-科学指南针
- 千秋华夏 壮丽河山 国庆节快乐~
热门文章
- 三维重建工具001-——正确安装kaolin库并在SMR上运行
- 下了31个markdown编辑器,我就不信选不出一个好用的
- vant weapp 多选上传图片_使用vant组件upLoad上传视频或图片
- 百度前端技术学院github地址
- PackagesNotFoundError: The following packages are not available from current channels解决办法
- 用计算机千本樱,B 千本樱整理版
- matlab飞机高度控制系统,基于MatlabSimulink的旋翼飞机高度复合控制系统仿真作业.doc...
- mkmf.rb can‘t find header files for ruby at /System/Library/Frameworks/Ruby.framework/... ...
- Django admin 管理工具
- Merkle Tree 概念