转 https://www.jianshu.com/p/7954b61bc6ee

java中 label 配合 break continue 使用的其实是比较少的.
这种做法在业务代码中比较少见.
在读其他库的代码时可能会遇到该语法的使用.
下面对该语法做简短解释.

break label

用来终止循环体的循环,使用break 可以终止的循环体包括三种, for,while,do-while

不带 label使用 break 时

执行 break ,会终止离 break 关键字最近的循环体的循环.
示例如下

for (int i = 0; i < 3; i++) {
System.out.println(String.format("start outer for loop index %d", i));
int j = 0;
while (true) {
System.out.println(String.format("inner loop with while index %d", j));
if (j == 2) {
//终止最近的for,while,do-while循环
break;
} else {
j++;
}
}
System.out.println(String.format("end outer for loop index %d", i));
}

结果为

start outer for loop index 0
inner loop with while index 0
inner loop with while index 1
inner loop with while index 2
end outer for loop index 0
start outer for loop index 1
inner loop with while index 0
inner loop with while index 1
inner loop with while index 2
end outer for loop index 1
start outer for loop index 2
inner loop with while index 0
inner loop with while index 1
inner loop with while index 2
end outer for loop index 2

通过打印可以看出,内部循环每次执行到2时就将当前 while 死循环停止.
而外部循环则会从0遍历到2,正常循环遍历.不受 break 的影响.

带 label 的break

会终止指定 label 所对应的循环体.
示例为从二维的student age 数组中,找第一个年纪为9岁的学生.

int students[][] = {{10, 12, 11}, {8, 9, 1}, {9, 15, 7}};
jumpOutHere:
for (int i = 0; i < 3; i++) {
System.out.println(String.format("start outer for loop index %d", i));
int j = 0;
while (j < 3) {
System.out.println(String.format("current retrieve value %d", students[i][j]));
if (students[i][j] == 9) {
break jumpOutHere;
} else {
j++;
}
}
System.out.println(String.format("end outer for loop index %d", i));
}

结果为

start outer for loop index 0
current retrieve value 10
current retrieve value 12
current retrieve value 11
end outer for loop index 0
start outer for loop index 1
current retrieve value 8
current retrieve value 9

当遍历到二维数组中第一个年纪为9的学生时,直接终止 label 对应的循环.此处为外层循环.

continue label

用来跳过循环体中本次执行的循环,使用continue 可以跳过的循环体包括三种, for,while,do-while

不带 label 的 continue

会跳过距离continue最近的循环体的本次执行,执行下一次循环

for (int i = 0; i < 3; i++) {
System.out.println(String.format("start outer for loop index %d", i));
for(int k = 0;k<3;k++){
if(k==1)
continue;
System.out.println(String.format("inner loop index %d",k));
}
System.out.println(String.format("end outer for loop index %d", i));
}

start outer for loop index 0
inner loop index 0
inner loop index 2
end outer for loop index 0
start outer for loop index 1
inner loop index 0
inner loop index 2
end outer for loop index 1
start outer for loop index 2
inner loop index 0
inner loop index 2
end outer for loop index 2

通过示例可以看出当 k=1时会跳过本次内部循环(也是离 continue 最近的循环),直接执行下一次内部循环.

带 label 的 continue

会跳过标记为 label 的循环体中的本次循环的执行,并执行, label 标记位置的下一个循环.

CONTINU_LABLE:
for (int i = 0; i < 3; i++) {
System.out.println(String.format("start outer for loop index %d", i));
for (int k = 0; k < 3; k++) {
if (k == 1)
continue CONTINU_LABLE;
System.out.println(String.format("inner loop index %d", k));
}
System.out.println(String.format("end outer for loop index %d", i));
}

start outer for loop index 0
inner loop index 0
start outer for loop index 1
inner loop index 0
start outer for loop index 2
inner loop index 0

通过结果可以看出,当 k=1时,直接就跳到CONTINU_LABLE标记的循环体的下一次循环了.

java中 label 配合 break continue 使用方法的更多相关文章

  1. JavaScript中label与break配合使用

    语法 label: statement 说明 label语句可以在代码中添加标签,以便将来使用.定义的标签可以在将来由break或continue语句引用.加标签的语句一般都要与for语句等循环语句配 ...

  2. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  3. js中退出语句break,continue和return 比较

    js中退出语句break,continue和return 比较 在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是 ...

  4. js中退出语句break,continue和return 比较(转)

    原链接:http://blog.163.com/ued_er/blog/static/199703159201210283107315/ js中退出语句break,continue和return 比较 ...

  5. java中遍历map对象的多种方法

    在Java中如何遍历Map对象   How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...

  6. java中常用的字符串的截取方法

    java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...

  7. Java中的五种单例模式实现方法

    [代码] Java中的五种单例模式实现方法   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...

  8. 谈谈java中遍历Map的几种方法

    java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...

  9. Java中产生随机数的两个方法

    Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...

随机推荐

  1. 新版mysql的配置文件my.ini位置

    在网上的博客上找了好久的my.ini,一直找不到.最后发现原来新版本的mysql已经不把my.ini放在原始的安装目录了.而是放在了C:/ProgramData下.

  2. IT 界那些朗朗上口的“名言”

    中国有很多古代警世名言,朗朗上口,凝聚了很多故事与哲理.硅谷的互联网公司里头也有一些这样的名言,凝聚了很多公司价值观和做事的方法,对于很多程序员来说,其影响潜移默化! Stay hungry Stay ...

  3. 使用yield处理文件

    写文件 # -*- coding:utf-8 -*- import random import threading import string import time t1 = time.time() ...

  4. 【转】SpringBoot自定义序列化的使用方式--WebMvcConfigurationSupport

    场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串. 例如:[     {         "id": 1,       ...

  5. MySQL进阶5--分组函数 / 分组排序和分组查询 group by(having) /order by

    MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数 ...

  6. [转]Linux 桌面玩家指南:20. 把 Linux 系统装入 U 盘打包带走

    原文:https://www.cnblogs.com/youxia/p/LinuxDesktop020.html ------------------------------------------- ...

  7. Entity Framework二、 模型优先 ,ObjectContext类

    https://www.cnblogs.com/ejiyuan/archive/2009/05/27/1490786.html 1.ObjectContext 封装.NET Framework和数据库 ...

  8. BZOJ 2145: 悄悄话 (打表)

    BZOJ 2145 题解 直接代词,所有格,常用副词,助动词,冠词,常用词打表 比较出现次数的多少来决定循环位移了几位. CODE #include <bits/stdc++.h> usi ...

  9. 27、AOP-AOP功能测试

    27.AOP-AOP功能测试 AOP : [动态代理]指程序运行期间动态的将某段代码切入到制定方法位置进行运行的编程方式. 导入AOP模块:Spring AOP(spring-aspects) 定义一 ...

  10. python自动华 (四)

    Python自动化 [第四篇]:Python基础-装饰器 生成器 迭代器 Json & pickle 目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结 ...