A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

        很多程序设计语言中有goto语句,goto语句的使用,使的程序变得难以读懂,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子。它并不属于一次跳转,而是中断循环语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使用了相同的机制:标签。

        下面是一个例子,介绍一下这种标签在java中的使用。
  1.     int i = 0;
  2.        System.out.println("label1");
  3.        label1: for (int k = 0; k < 5; k++) {
  4.            i++;
  5.            if (k == 2) {
  6.               break label1;
  7.            }
  8.            System.out.println(i);
  9.        }
复制代码
       输出结果是:
label1
1
2
        这说明当k=2时,执行了break语句,跳转到了label1标签处,但是并没有在进入这个for语句块。

  1.       int j = 0;
  2.        System.out.println("label2");
  3.        label2: for (int k = 0; k < 5; k++) {
  4.            j++;
  5.            if (k == 2) {
  6.               continue label2;
  7.            }
  8.            System.out.println(j);
  9.        }
复制代码
       输出结果是:
label2
1
2
4
5
        这说明当k=2时,执行了continue语句,跳出了循环没有执行println语句,然后从label2标签的地方再次进入for语句块。
        上面这两种情况的结果与不使用标签的,只使用break和continue的情况是相同的。因而体现不出标签的作用。

  1. <P>System.out.println("label3");
  2.        int h = 0;
  3.        label3: for (int k = 0; k < 5; k++) {
  4.            System.out.println("label3 第一层");
  5.            for (int m = 0; m < 5; m++) {
  6.               System.out.println("label3 第二层");
  7.               h++;
  8.               if (m == 2) {
  9.                   break label3;
  10.               }
  11.               System.out.println(h);
  12.            }
  13.        }</P>
复制代码
       输出结果是:
label3
label3 第一层
label3 第二层
1
label3 第二层
2
label3 第二层
        这说明当k=m时,执行了break语句,跳转到了label3标签处,但是并没有在进入这个for语句块。

  1. <P>System.out.println("label4");
  2.        int l = 0;
  3.        label4: for (int k = 0; k < 5; k++) {
  4.            System.out.println("label4 第一层");
  5.            for (int m = 0; m < 5; m++) {
  6.               System.out.println("label4 第二层");
  7.               l++;
  8.               if (m == 2) {
  9.                   continue label4;
  10.               }
  11.               System.out.println(l);
  12.            }
  13.        }</P>
复制代码
       输出结果是:
label4
label4 第一层
label4 第二层
1
label4 第二层
2
label4 第二层
label4 第一层
label4 第二层
4
label4 第二层
5
label4 第二层
label4 第一层
label4 第二层
7
label4 第二层
8
label4 第二层
label4 第一层
label4 第二层
10
label4 第二层
11
label4 第二层
label4 第一层
label4 第二层
13
label4 第二层
14
label4 第二层
        这说明当m=2时,执行了continue语句,跳出了循环没有执行println语句,然后从label3标签的地方再次进入for语句块。
        当有多从循环的时候,程序只想跳出内层循环,而不跳出外层循环的时候就可以使用这样的break和continue标签了。这种嵌套循环也是适合while语句的。
        当然你也可以写出这样的代码

  1.    label5:{
  2.            int b=0;
  3.            if(tag){
  4.               break label5;
  5.            }
  6.            ......
  7.        }
复制代码

        用以跳过下面省略了的代码,当然这样的写法完全可以使用if else代替。

        下面是对这个用法的总结:
        (1) 简单的一个continue会退回最内层循环的开头(顶部),并继续执行。
        (2) 带有标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环
        (3) break会中断当前循环,并移离当前标签的末尾。
        (4) 带标签的break会中断当前循环,并移离由那个标签指示的循环的末尾。

        客官慢走!客官再来!

2 个回复

倒序浏览
很有帮助的作用
回复 使用道具 举报
学习力,很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马