java 嵌套循环“标签“使用详解

最近在复习线程相关的知识,阅读源码时看到有使用以下语法:
线程池类内某方法
此处的retry 及 break retry 和 continue retry 到底起到了什么作用?

首先自己先写一段代码验证下

public static void main(String[] args) {
        int j = 0;
        outer:
        for (;;) {
            System.out.println("outer");
            inner:
            for (; ; j++) {
                System.out.println("inner");
                System.out.println("j = " + j);
                if (j == 3){
                    continue ;
                }
                if (j == 4){
                    j++;
                    break  ;
                }
                if (j==5){
                    System.out.println("continue inner");
                    continue inner;
                }
                if (j==6){
                    j++;
                    System.out.println("break inner");
                    break inner;
                }
                if (j==8){
                    System.out.println("continue outer");
                    j++; //此处不会执行for条件的i++,所以须自己+1,否则会无限循环
                    continue outer;
                }
                if (j==9){
                    System.out.println("break outer");
                    break outer;
                }
            }
        }
        System.out.println("over");
    }

运行结果如下:

outer
inner
j = 0
inner
j = 1
inner
j = 2
inner
j = 3
inner
j = 4
outer
inner
j = 5
continue inner
inner
j = 6
break inner
outer
inner
j = 7
inner
j = 8
continue outer
outer
inner
j = 9
break outer
over

一步步分析下执行流程:
1.首先进入外层循环,打印outer
2.进入里层循环,打印inner
3.此时j的值为0,且打印j的值
4.里循环以此打印j为1,2的值
5.当j=3时,继续里层循环,(不执行当前循环代码块中剩余的逻辑)
6.当j=4时,自行将j+1,此处不自行+1的话,会导致死循环,且跳出内循环
7.外层循环开始,打印outer
8.里层循环开始,打印inner及j值(此时j的值为5)
9.打印continue inner且继续里层循环,其实此处与直接写continue作用一致
10,打印break inner且跳出内循环,与break作用一致
11.继续循环打印j值
12.当j的值为8时,继续外层循环,(不执行外循环代码块中剩余的逻辑)
13.当为9时,直接结束外层循环

在此处,有明显使用意义的是对外层循环的操作,即continue outer和break outer
只有在有嵌套循环的地方才有使用循环标签的意义
其次在内循环的break 和 continue outer有点相,如果在外层循环中的内循环代码块结束之后无其他执行代码,作用一致,否则有极大区别

在内循环结束后加上其他执行代码

 for (;;) {
            for (; ; j++) {
                ...
                ...
            }
            System.out.println("outer others");
        }

当j为4和8时执行结果

//j=4
j = 4
outer others
outer
inner
//j=8
j = 8
continue outer
outer
inner

总结
之前在代码中写嵌套循环,对于外层循环的操作都是加标志位进行标识,当了解了循环中标签的使用后,将极大简化代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值