Java for循环标签跳转到指定位置的示例详解
作者:xfcoding 发布时间:2022-10-04 17:52:31
Java for循环标签跳转到指定位置
大家是否见过这种for循环,在for循环前加了个标记的:
outerLoop:
for (; ; ) {
for (; ; ) {
break outerLoop;
}
}
我之前有一次在公司业务代码中见过有这种写法的,没在意,今天在看JDK线程池的代码时,又看到ThreadPoolExecutor
的addWorker
方法中有这种写法。于是就查了相关资料,也比较简单。
总结下它的用法吧:
上面代码中的
outerLoop
是一个标记外层for
循环的标签,它可以随便命名。该标签主要用于for循环嵌套的情况,结合
break
和continue
跳转到外层for循环;
我们知道,break
的作用是跳出当前循环,continue
的作用是结束本次循环,继续下次循环。如果有双层for循环,在内层的for循环中,想直接跳出所有循环,使用break outerLoop
就可以实现;而continue outerLoop
的作用是结束外层的本次循环,继续外层的下一次循环。
举个例子:
public static void main(String[] args) {
String[] strings = {"1", "2", "3"};
outerLoop:
for (String str : strings) {
for (; ; ) {
if (str.equals("1")) {
break;
}
if (str.equals("2")) {
continue outerLoop;
}
if (str.equals("3")) {
break outerLoop;
}
}
System.out.println("str.equals(1)");
}
System.out.println("str.equals(3)");
}
上面代码中双重for循环,执行逻辑为:
第一个
if
跳出当前内层循环,会打印str.equals(1)
;第二个
if
执行外层for循环的下一次循环;最后一次循环,
str
的值为3,跳出外层循环,结束整个循环,然后打印str.equals(3)
。
这种for加标签的写法确实很少见,学Java的时候都没学这个东西,实际写业务代码的时候能避免就避免,内层循环能抽就抽个方法。如果业务太复杂抽不了,这种写法也不失为一种策略。
补充:java for 循环continue 跳转到外层
for (int i = 0; i < cardRecordsList.size(); i++) {
BomCardRecords bomCardRecords = cardRecordsList.get(i);
String recordsContent = bomCardRecords.getRecordsContent();
if (i == 0){
recordsContent += "$$$状态";
}
String[] contentArr = recordsContent.split("\\$\\$\\$", -1);
List<String> needData = new ArrayList<>();
for (int j = 0; j < contentArr.length; j++) {
String contentColumn = contentArr[contentArr.length - 1];
if (StringUtils.isBlank(state)) {
clearUpData(columns, partList, contentArr, columnArr, needData);
continue;
} else {
String[] stateArr = state.split(" ");
List<String> stateList = Arrays.asList(stateArr);
contentColumn = contentColumn.split(",")[0];
if (contentColumn.equals("状态") || stateList.contains(contentColumn)) {
clearUpData(columns, partList, contentArr, columnArr, needData);
continue;
}
}
}
}
continue 跳出循环
如上代码我们是嵌套循环 , 当我们循环完毕时需要跳出最外层循环 , 我们只需要在跳转的的地方这么来写
my:
for (int i = 0; i < cardRecordsList.size(); i++) {
BomCardRecords bomCardRecords = cardRecordsList.get(i);
String recordsContent = bomCardRecords.getRecordsContent();
if (i == 0){
recordsContent += "$$$状态";
}
String[] contentArr = recordsContent.split("\\$\\$\\$", -1);
List<String> needData = new ArrayList<>();
for (int j = 0; j < contentArr.length; j++) {
String contentColumn = contentArr[contentArr.length - 1];
if (StringUtils.isBlank(state)) {
clearUpData(columns, partList, contentArr, columnArr, needData);
continue my;
} else {
String[] stateArr = state.split(" ");
List<String> stateList = Arrays.asList(stateArr);
contentColumn = contentColumn.split(",")[0];
if (contentColumn.equals("状态") || stateList.contains(contentColumn)) {
clearUpData(columns, partList, contentArr, columnArr, needData);
continue my;
}
}
}
}
这样我们就可continue到最外层循环了
来源:https://www.cnblogs.com/cloudrich/archive/2023/05/10/17389613.html


猜你喜欢
- 本文实例为大家分享了java实现简单的猜数字的具体代码,供大家参考,具体内容如下题目描述:猜数字(又称 Bulls and Cows )是一
- 本文实例为大家分享了java实现银行家算法的具体代码,供大家参考,具体内容如下题目:初始时,Allocate[i,j]=0,表示初始时没有进
- 文章来源:aspcn 作者:孙雯服务器Sockets列表9.2是一个服务器应用程序的一部分.列表9.2 一个简单的服务器程序 /** &n
- GZip是常用的无损压缩算法实现,在Linux中较为常见,像我们在Linux安装软件时,基本都是.tar.gz格式。.tar.gz格式文
- 本文实例讲述了C#实现char字符数组与字符串相互转换的方法。分享给大家供大家参考,具体如下:一、字符串转换为字符数组char[] temp
- spring Session 提供了一套用于管理用户 session 信息的API和实现。Spring Session为企业级Java应用的
- 在说明映射文件规则之前,先来回顾一下ORM相关概念。1.ORM概念ORM(Object Relationship Mapping)对象关系映
- RecyclerView目前来说对大家可能不陌生了。由于在公司的项目中,我们一直用的listview和gridview。某天产品设计仿照美团
- 在使用C#进行桌面应用开发中,经常会有对文件进行操作的情况,这时可能会需要对文件夹进行文件扫描,获取所有文件做法如下/// <summ
- <?xml version="1.0" encoding="UTF-8" ?> <
- 以前的Android(4.1之前的版本)中,SDcard路径通过“/sdcard”或者“/mnt/sdcard”来表示,而在JellyBea
- 上传临时文件被删除引起报错的解决1.前言在项目中使用到了SpringBoot的上传实现了一个excel导入功能,上线后稳得一批,但突然有一天
- 这篇文章主要介绍了spring boot 全局异常处理方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 介绍:%是求余运算符,也叫模除运算符,用于求余数。%要求两个操作数均为整数(或可以隐式转换成整数的类型)。标准规定:如果%左边的操作数为负数
- idea 鼠标悬浮显示详情2020 版 idea 之前file -> settings设置如下 2020 版 idea 之后
- 这篇文章主要介绍了如何使用Jenkins编译并打包SpringCloud微服务目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有
- 上一小节简单分析了directArena内存分配大概流程 ,知道其先命中缓存, 如果命中不到, 则区分配一款连续内存, 这一小节带
- 目录二维码生成原理(即工作原理)效果图如下:前提:源码如下:总结二维码生成原理(即工作原理)二维码官方叫版本Version。Version
- Android UI中TextView的使用方法一、TextView不同区域设置颜色,大小、点击事件String msg = getReso
- 在使用ListView组件来显示列表数据时,有的时候我们需要改变列表中的数据,有以下方法:1、重新给ListView组件设置适配器这种方法重