Java标签-break-continue
来源:互联网 发布:游戏养羊软件 编辑:程序博客网 时间:2024/05/27 10:44
很多程序设计语言中有goto语句,goto语句的使用,使的程序变得难以读懂,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子。它并不属于一次跳转,而是中断循环语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使用了相同的机制:标签。
下面是一个例子,介绍一下这种标签在java中的使用。
public static void testBreakLabel(){System.out.println("测试break+标签:");int i = 0;mylabel1: for (int k = 0; k < 5; k++){i++;if (k == 2){// 此时i=3break mylabel1;// 此时不加标签,也是这结果}System.out.println("i:" + i + ", k:" + k);}/* * 测试break+标签: i:1, k:0 i:2, k:1 */}这说明当k=2时,执行了break语句,跳转到了mylabel1标签处,但是并没有再进入这个for语句块
public static void testContinueLabel(){System.out.println("测试continue+标签:");int i = 0;mylabel2: for (int k = 0; k < 5; k++){i++;if (k == 2){// 此时i=3continue mylabel2;// 此时不加标签,也是这结果}System.out.println("i:" + i + ", k:" + k);}/* * 测试continue+标签: i:1, k:0 i:2, k:1 i:4, k:3 i:5, k:4 */}
这说明当k=m时,执行了break语句,跳转到了label3标签处,但是并没有在进入这个for语句块。
上面这两种情况的结果与不使用标签的,只使用break和continue的情况是相同的。因而体现不出标签的作用。
public static void testLabelFunctionBreak(){System.out.println("测试Label真正作用:利用break label退出二层循环");int h = 0;myLabel3: for (int k = 0; k < 5; k++){System.out.println("myLabel3 第一层:");for (int m = 0; m < 5; m++){System.out.print(" myLabel3 第二层,");h++;if (m == 2){break myLabel3;}System.out.println("k:"+k+", h:"+h+", m:"+m);}}/*测试Label真正作用:退出二层循环myLabel3 第一层: myLabel3 第二层,k:0, h:1, m:0 myLabel3 第二层,k:0, h:2, m:1 myLabel3 第二层,*/}
这说明当k=m时,执行了break语句,跳转到了mylabel3标签处,但是并没有在进入这个for语句块。
public static void testLabelFunctionContinue(){System.out.print("\n\n测试Label真正作用:continue双循环");int h = 0;myLabel4: for (int k = 0; k < 5; k++){System.out.print("\nmyLabel4 第一层:");for (int m = 0; m < 5; m++){System.out.print("\n myLabel4 第二层,");h++;if (m == 2){//作用后,由于myLabel4在外层循环,//所以从外层循环开始:直接k++,m从2又重新初始化0continue myLabel4;}System.out.print("k:"+k+", h:"+h+", m:"+m);}}/*测试Label真正作用:continue双循环myLabel4 第一层: myLabel4 第二层,k:0, h:1, m:0 myLabel4 第二层,k:0, h:2, m:1 myLabel4 第二层,//从外层循环开始,所以下面的结果顺利成章,不用记规则什么的myLabel4 第一层: myLabel4 第二层,k:1, h:4, m:0 myLabel4 第二层,k:1, h:5, m:1 myLabel4 第二层,myLabel4 第一层: myLabel4 第二层,k:2, h:7, m:0 myLabel4 第二层,k:2, h:8, m:1 myLabel4 第二层,myLabel4 第一层: myLabel4 第二层,k:3, h:10, m:0 myLabel4 第二层,k:3, h:11, m:1 myLabel4 第二层,myLabel4 第一层: myLabel4 第二层,k:4, h:13, m:0 myLabel4 第二层,k:4, h:14, m:1 myLabel4 第二层,*/}这说明当m=2时,执行了continue语句,跳出了循环没有执行println语句,然后从mylabel4标签的地方再次进入for语句块。当有多重循环的时候,程序只想跳出内层循环,而不跳出外层循环的时候就可以使用这样的break和continue标签了。这种嵌套循环也是适合while语句。
当然你也可以写出这样的代码
public static void testLabeltoSkip(){mylabel5:{int sikpNum=5;if(sikpNum==5){//此处执行可以跳过下面的内容,相当于省略elseSystem.out.println("\n\nif内容执行,跳过下面内容");break mylabel5;}System.out.println("else的内容");} /* if内容执行,跳过下面内容 */}用以跳过下面省略了的代码,当然这样的写法完全可以使用if else代替。
下面是对这个用法的总结:
(1) 简单的一个continue会退回最内层循环的开头(顶部),并继续执行。
(2) 带有标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环
(3) break会中断当前循环,并移离当前标签的末尾。
(4) 带标签的break会中断当前循环,并移离由那个标签指示的循环的末尾。
1 0
- Java标签-break-continue
- 带标签的 break 和 continue (Java)
- java/break,continue;循环的标签
- 带标签的 break 和 continue (Java)
- JAVA中break与continue跳出标签
- Java SE之break和continue标签
- Java带标签循环 break 和 continue
- Java中带标签的break、continue
- Java break&continue标签的使用
- Java的goto:标签+break/continue
- 标签+break/continue用法
- JScript----Break...Continue...标签
- Java中带标签的 break 和 continue
- Java中带标签的 break 和 continue
- Java中 break 和 continue 标签的使用
- Java新鲜东西,带有标签的continue和break
- 带标签的break和continue语句(Java、C++)
- java中带标签的break 和 continue
- java安全架构____DES加密解密
- 【6】汇编语言的一些些
- iOS中为什么非要用runtime才能在分类中扩展属性呢
- C# switch 语句的简单应用
- 学习spring boot
- Java标签-break-continue
- Linux 2.6 中的页面回收与反向映射
- MySQL数据库基础(一)(启动-停止、登录-退出、语法规范及最基础操作)(持续更新中)
- 不改变原图的大小但要增加周围空白
- 系统分析设计
- Android中的文件扫描
- iOS中assign与weak,retain与strong的区别
- JDNI是什么
- 欢迎使用CSDN-markdown编辑器