好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java的“Goto”与标签及使用详解

goto在java中是一个保留字,但在语言中并没有用到它;java没有goto。但是,java也能完成一些类似于跳转的操作,主要是依靠:标签。

为什么要使用标签

在迭代语句中,我们可以使用break和continue来中断当前循环。但如果出现循环嵌套的情况,使用break和continue只能中断内层循环,无法控制到外层的循环。这时,我们就可以使用标签结合break和continue,中断内层循环,跳转到标签所在的地方。

标签声明

标签的声明很简单,加个冒号就行,就像下面这样:

label1:

标签使用

在java中,标签起作用的唯一地方是在迭代语句之前,注意[唯一],也就是说不能在其它地方单独使用,只能结合迭代语句共同使用。

下面这个例子展示了带标签的break以及continue语句在while循环中的用法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

/**

  * @author zouqingfeng

  */

public class gotolabeltest {

   public static void main(string[] args) {

     int i = 0 ;

     label1: while ( true ) {

       system.out.println( "----------------外层循环开始----------------" );

       while ( true ) {

         i++;

         system.out.println( "i=" + i);

         if (i == 1 ) {

           system.out.println( "continue" );

           continue ;

         }

         if (i == 3 ) {

           system.out.println( "continue label1" );

           continue label1;

         }

         if (i == 5 ) {

           system.out.println( "break" );

           break ;

         }

         if (i == 7 ) {

           system.out.println( "break label1" );

           break label1;

         }

         system.out.println( "----------------内层循环结束----------------" );

       }

       system.out.println( "----------------外层循环结束----------------" );

     }

     system.out.println( "end" );

     /* output:

       ----------------外层循环开始----------------

       i=1

       continue

       i=2

       ----------------内层循环结束----------------

       i=3

       continue label1

       ----------------外层循环开始----------------

       i=4

       ----------------内层循环结束----------------

       i=5

       break

       ----------------外层循环结束----------------

       ----------------外层循环开始----------------

       i=6

       ----------------内层循环结束----------------

       i=7

       break label1

       end

      */    

   }

}

 从打印的结果可以看出

当i==1时,执行continue后,没有执行[内层循环结束]打印语句,而是打印了[i=2],说明continue使执行点回到内层循环起始处,并继续下一次迭代。

当i==3时,执行continue label1后,没有执行[内层循环结束]打印语句,也没有执行[外层循环结束],而是打印了[外层循环开始],说明带标签的continue,对内外层循环都起作用,continue label1同时中断内外层循环,直接跳转到label1标签处,随后,从外部循环开始下一次的迭代。

当i==5时,执行break后,没有执行[内层循环结束],但执行了[外层循环结束],说明break只中断并跳出内层循环,回到了外层循环中。

当i==7时,执行break label1后,直接打印了[end],说明带标签的break,对内外层循环都起作用,break label1同时中断内外层循环,直接跳转到label1标签处,但并不重新进入迭代。也就是说,break label1完全终止了两个循环。

总结

1.一般的continue只会对其所在的循环起作用,退回循环的开头,并继续执行。
2.带标签的continue会使执行点到达标签的位置,并重新进入紧接在标签后的循环。
3.一般的break会中断并跳出当前循环。
4.带标签的break会中断并跳出标签所指的循环。
5.在java中,标签起作用的唯一地方是在迭代语句之前。
6.在java中,使用标签的唯一理由是有嵌套循环存在,并且想从多层嵌套中break或continue。

原文链接:https://HdhCmsTestcnblogs测试数据/zouqf/p/9881968.html

查看更多关于Java的“Goto”与标签及使用详解的详细内容...

  阅读:23次