代码改变世界

Java的标签--弱化的goto

2012-10-25 20:00  会被淹死的鱼  阅读(477)  评论(0编辑  收藏  举报

看到一道这样的java的选择题, 代码如下

 1     public static void main(String[] args) {
 2         int k = 10;
 3         for (int i = 0; i < 10; i++) {
 4             start:
 5                 System.out.print("s");
 6             if (i > 5) break;
 7             else System.out.print("g");
 8             while(k > 0) {
 9                 System.out.print("t");k--;
10                 if (i > 3) 
11                     break start;
12             }
13         }
14     }

给出代码输出.

上述这道题考察了java的break和continue的标签使用.

上述的代码是错误的, 会在编译期报错, java的label只可以用在迭代语句之前, 而且是刚好之前, 不可以插入任何语句, label只是用来控制嵌套迭代

java编程思想中的介绍

label1:

outter-iteration {

  inner-iteration {

    break; // 中断内部迭代, 回到外部迭代

    continue; // 回到内部迭代的起始处

    continue label1; // 中断内部外部迭代, 跳转到label1处, 继续迭代过程, 从外部迭代开始

    break label1; // 中断所有迭代, 回到label1处, 不会重新进入迭代

  }

}

下面写两个简单的例子

continue的例子

 1     public static void main(String[] args) {
 2         outter:for (int i = 0; i < 2; i++) {
 3             System.out.println("i = " + i);
 4             for (int j = 0; j < 5; j++) {
 5                 if (j > 3) {
 6                     System.out.println("continue outter");
 7                     continue outter;
 8                 }
 9                 System.out.println("j = " + j);
10             }
11         }
12     }

输出结果为

i = 0
j = 0
j = 1
j = 2
j = 3
continue outter
i = 1
j = 0
j = 1
j = 2
j = 3
continue outter

break的例子

 1     public static void main(String[] args) {
 2         outter:for (int i = 0; i < 2; i++) {
 3             System.out.println("i = " + i);
 4             for (int j = 0; j < 5; j++) {
 5                 if (j > 3) {
 6                     System.out.println("break outter");
 7                     break outter;
 8                 }
 9                 System.out.println("j = " + j);
10             }
11         }
12     }

输出结果为

i = 0
j = 0
j = 1
j = 2
j = 3
break outter

我们可以看到, break label之后就不会再执行外部迭代了.

 

 

参考:

  1. java中的标签: http://blog.sina.com.cn/s/blog_7d528cb70100qecf.html
  2. Java中带标签的break的用法: http://blog.csdn.net/moonwalkings/article/details/4631988
  3. <Java编程思想>