实现类似goto的操作

goto

尽管goto仍是Java中的一个保留字,但在语言中并未使用它。然而,Java也能完成一些类似跳转的操作。break与continue使用了标签机制。

标签是后面跟有冒号的标识符

label1

在Java中,标签起作用的唯一的地方刚好是在迭代语句之前。标签与迭代语句之间不建议置入任何语句。

在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。break和continue关键词通常只中断当前循环,但若随标签一起使用,它们就会中断循环,直到标签所在的地方。

label1:
outer-iteration{
    inner-iteration{
        //...
        break; //(1)
        //...
        continue; //(2)
        //...
        continue label1;//(3)
        //...
        break label1; //(4)
    }
}

在(1)中,break中断内部迭代,回到外部迭代。在(2)中,continue使执行点移回内部迭代的起始处。在(3)中,continue label1同时中断内部迭代以及外部迭代,直接转到label1处;随后,它实际上是继续迭代过程,但却从外部迭代开始。在(4)中,break label1也会中断所有迭代,并回到label1处,但并不重新进入迭代。也就是说,它实际是完全中止了两个迭代。

注意

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

Last updated