大家是否见过这种for循环,在for循环前加了个标记的:

outerLoop:
for (; ; ) {
for (; ; ) {
break outerLoop;
}
}

我之前有一次在公司业务代码中见过有这种写法的,没在意,今天在看JDK线程池的代码时,又看到ThreadPoolExecutoraddWorker方法中有这种写法。于是就查了相关资料,也比较简单。

总结下它的用法吧:

  1. 上面代码中的outerLoop是一个标记外层for循环的标签,它可以随便命名。
  2. 该标签主要用于循环嵌套的情况,使得breakcontinue可直接跳转到标签标记的位置;

我们知道,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循环,执行逻辑为:

  1. 第一个if跳出当前内层循环,会打印str.equals(1);
  2. 第二个if执行外层for循环的下一次循环;
  3. 最后一次循环,str的值为3,跳出外层循环,结束整个循环,然后打印str.equals(3)

这种for加标签的写法确实很少见,学Java的时候都没学这个东西,实际写业务代码的时候能避免就避免,内层循环能抽就抽个方法。如果业务太复杂抽不了,这种写法也不失为一种策略。

这种写法同样适用于whiledo while循环。

Java循环标签的更多相关文章

  1. java基础-循环标签

    outer: for innter: for break outer//跳出整个循环: continue outer//结束本次外循环的循环 break inner; continute inner; ...

  2. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

    前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...

  3. Java ---自定义标签

         本篇文章介绍自定义标签,可能在工作中很少涉及到自己来定义一个标签库,因为我们基本上都是使用的大神写的标签库,基本上直接使用即可,但是从自身的发展来看,通往高级程序员的道路上,开发框架就需要大 ...

  4. Java-Runoob-高级教程-实例-方法:10. Java 实例 – 标签(Label)

    ylbtech-Java-Runoob-高级教程-实例-方法:10. Java 实例 – 标签(Label) 1.返回顶部 1. Java 实例 - 标签(Label)  Java 实例 Java 中 ...

  5. struts2 循环标签使用

    struts2 counter循环标签的使用: struts2随提供了循环控制标签<s:iterator/>,,使用起来也比较方便,但在具体的应用中,也有不方便之处,他没有像struts1 ...

  6. Jsp2.0自定义标签(第二天)——自定义循环标签

    今天是学习自定义标签的第二天,主要是写一个自定义的循环标签. 先看效果图: 前台页面Jsp代码 <%@ page language="java" contentType=&q ...

  7. java jstl标签

    转自:http://blog.csdn.net/liushuijinger/article/details/9143793 JSTL(JSP Standard Tag Library ,JSP标准标签 ...

  8. 杂项-Java:标签库

    ylbtech-杂项-Java:标签库 1.返回顶部 1. JSP标签库,也称自定义标签库,可看成是一种通过JavaBean生成基于XML的脚本的方法.从概念上讲,标签就是很简单而且可重用的代码结构. ...

  9. 失去循环标签的Python,我这样实现跳出外层循环

    不完美的Python 自从各类Python大火,感觉天上地下哪儿都有Python的一席之地,Python功夫好啊-但python有些细节上缺少其他语言的便利.今天我们就来举几个例子. 跳出外层循环 大 ...

  10. Java循环和条件

    下列程序的输出结果是什么? 1.Java循环和条件 /** * @Title:IuputData.java * @Package:com.you.data * @Description:TODO * ...

随机推荐

  1. ElasticSearch-Mapping类型映射-增删改查

    https://www.elastic.co/guide/en/elasticsearch/reference/6.8/mapping.html 7.x版本后默认都是_doc类型 增加Mapping映 ...

  2. [CSP-S 2023] 密码锁

    题目描述 小 Y 有一把五个拨圈的密码锁.如图所示,每个拨圈上是从 \(0\) 到 \(9\) 的数字.每个拨圈都是从 \(0\) 到 \(9\) 的循环,即 \(9\) 拨动一个位置后可以变成 \( ...

  3. MD5加密算法工具类创建

    直接上代码 /** * 通用方法工具类 */ public class CrowdUtil { /** * 对明文字符串进行MD5加密 * @param source * @return */ pub ...

  4. 火爆全网的Log4j 漏洞复现GetShell

    目录: 一.搭建环境 1. 首先拉一个docker镜像 2. 然后启动环境 二.获取shell 首先,试验一下DNSLog 1. 准备JNDI注入工具 下载 进入目录打包成jar包 2. 利用 生成p ...

  5. docker的基本命令使用

    docker image/images docker image与images 的区别在于docker images可以直接使用,docker image不可以直接使用,看例子 [root@docke ...

  6. 降低node版本,怎么降低node版本

    降低node版本,怎么降低node版本? 部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果. ...

  7. 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇)

    前言 书接上回,上回我们了解了 castle 代理的一些缺点,本文将开始操作整合 Microsoft.Extension.Dependency和Castle,以让默认的容器可以支持拦截器 我们将以进阶 ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

    五.使用如下思想为最大子数组问题设计一个非递归的.线性时间的算法.从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组.若已知 A[1..j]门的最大子数组,基于如下性质将解扩展为 ...

  9. FusionInsight MRS Flink DataStream API读写Hudi实践

    摘要:目前Hudi只支持FlinkSQL进行数据读写,但是在实际项目开发中一些客户存在使用Flink DataStream API读写Hudi的诉求. 本文分享自华为云社区<FusionInsi ...

  10. Scrum Master需要具备哪些能力和经验

    摘要:ScrumMaster对于产品负责人和开发团队来说,履行的是教练的职责,帮助团队和组织其他成员发展具有组织特色的.高效的Scrum方法,贯彻执行敏捷思想,激励团队持续提升,并不懈追求卓越的表现. ...