java中 label 配合 break continue 使用方法
转 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 使用方法的更多相关文章
- JavaScript中label与break配合使用
语法 label: statement 说明 label语句可以在代码中添加标签,以便将来使用.定义的标签可以在将来由break或continue语句引用.加标签的语句一般都要与for语句等循环语句配 ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- js中退出语句break,continue和return 比较
js中退出语句break,continue和return 比较 在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是 ...
- js中退出语句break,continue和return 比较(转)
原链接:http://blog.163.com/ued_er/blog/static/199703159201210283107315/ js中退出语句break,continue和return 比较 ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
- java中常用的字符串的截取方法
java中常用的字符串的截取方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int l ...
- 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 ...
- 谈谈java中遍历Map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- Java中产生随机数的两个方法
Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...
随机推荐
- [LeetCode] 206. Reverse Linked List ☆(反转链表)
Reverse Linked List 描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3-> ...
- dubbo线程池作用于接口而不是方法
记一次线上dubbo服务超时和线程池满问题排查 可能调用的接口没问题,但是该服务中的其他接口占用完了线程池,导致调用超时被拒绝处理.
- 【Zookeeper】应用场景概述
一.数据发布与订阅(配置中心) 二.负载均衡 三.命名服务(Naming Service) 四.分布式通知/协调 五.集群管理与Master选举 六.分布式锁 七.分布式事务 一.数据发布与订阅(配置 ...
- Windows下计算md5值
目录 Windows下计算md5值 1.linux 下计算md5值 2.Windows下计算md5值 Windows下计算md5值 1.linux 下计算md5值 [root@master yl]# ...
- 初级文件IO——IO过程、open、close、write、read、lseek、dup、dup2、errno、perror
先要回答的问题 文件IO指的是什么? 本文主要讲述如何调用Linux OS所提供的相关的OS API,实现文件的读写. 如何理解文件IO? IO就是input output的意思,文件io就是文件输入 ...
- 个人作业-Alpha项目测试—luomei1547
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...
- Tomcat 启动闪退解决
直接使用cmd进入tomcat 目录下进行启动,直接使用Catalina.bat run运行,查看报啥错.进一步进行解决
- 单播、广播和多播IP地址
除地址类别外,还可根据传输的消息特征将IP地址分为单播.广播或多播.主机使用IP地址进行一对一(单播).一对多(多播)或一对所有(广播)的通信. 1.单播 单播地址是IP网络中最常见的.包含单播目标地 ...
- 大数据之路week02 List集合的子类
1:List集合的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. Vector: 底层数据结构是数组,查询快,增删慢. 线程安 ...
- Codeforces Round #584 A. Paint the Numbers
链接: https://codeforces.com/contest/1209/problem/A 题意: You are given a sequence of integers a1,a2,-,a ...