• break和continue


    break、continue的相关规则如下,while和for同样适用:

      (1)一般的continue会退回最内层循环的开头(顶部),并继续执行

      (2)带标签的continue会到达标签的位置,并重新进入紧接在哪个标签后面的循环

      (3)一般的break会中断并跳出当前循环

      (4)带标签的break会中断并跳出标签所指的循环

    代码示例:

    public class LabeledFor {
        public static void main(String[] args){
            int i = 0;
            outer:
            for(;true;){
                inner:
                for(;i < 10;i++){
                    System.out.println("i =" + i);
                    if(i == 2){
                        System.out.println("continue");
                        continue;
                    }
                    if(i == 3){
                        System.out.println("break");
                        i++;
                        break;
                    }
                    if(i == 7){
                        System.out.println("continue outer");
                        i++;
                        continue outer;
                    }
                    if(i == 8){
                        System.out.println("break outer");
                        break outer;
                    }
                    for(int k= 0;k < 5;k++){
                        if(k == 3){
                            System.out.println("continue inner");
                            continue inner;
                        }
                    }
                }
            }
        }
    }
    

    执行结果:

    i =0
    continue inner
    i =1
    continue inner
    i =2
    continue
    i =3
    break
    i =4
    continue inner
    i =5
    continue inner
    i =6
    continue inner
    i =7
    continue outer
    i =8
    break outer
    

    注意:

      (1)break、continue只能中断最内层的循环;在抵达for循环体末尾之前,递增表达式不会执行。break,continue会跳过递增表达式,故上面示例代码中都有单独自增一次的处理。

      (2)在Java中需要使用标签的唯一理由就是因为有嵌套循环的存在,而且想从嵌套中break或者continue。

      (3)在上篇博文中提及的Dijkstra《Goto有害》论文中,他其实最反对的是标签,而非goto,因为标签和goto的滥用,使得程序难以控制和理解。但是Java中的标签不会,因为他们的应用场合收到了限制(嵌套循环)。由此引出了一个有趣的现象,通过限制语句的能力,反而能使一项语言特性更加有用。

  • 相关阅读:
    DevExpress v17.2新版亮点—ASP.NET篇(一)
    使用MyEclipse将HTML5移动项目迁移到PhoneGap(一)
    DevExpress v17.2新版亮点—WPF篇(七)
    什么是SpringBoot?
    application.yml中常用参数设置
    什么是MyBatis?
    什么是Spring?
    项目访问路径去掉默认的项目名
    StringUtils常用方法介绍
    Spring学习----自动装配@Resource、@Autowired、@Qualifier
  • 原文地址:https://www.cnblogs.com/promiseslc/p/8633564.html
Copyright © 2020-2023  润新知