很多程序设计语言中有goto语句,goto语句的使用,使的程序变得难以读懂,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子。它并不属于一次跳转,而是中断循环语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使用了相同的机制:标签。
标签是后面跟有冒号的标识符,就像下面这样:
label1:
需要记住的重点是:在Java中需要使用标签的唯一理由就是因为有循环嵌套的存在,而且想从多层嵌套中break或者continue。
label1://can't have statements here
outer-iteration{
inner-iteration{
//...
break;//(1)
//...
continue;//(2)
//...
continue label1;//(3)
//...
break label1;//(4)
}
}
(1)break会中断并跳出当前循环,回到外部迭代。
(2)continue会退回到最内层循环的开头(顶部),并且继续执行。
(3)带标签的continue会到达标签的位置,并重新进入紧接在标签后面位置的循环。
(4)带标签的break会中断并跳出标签所指的循环,break label1会回到label1处,但是不重新进入迭代,也就是说,它实际是完全中止了两个迭代。