continue和break可以改变循环的执行流程,但在多重循环中,这两条语句无法直接从内层循环跳转到外层循环。在C语言中,可以通过goto语句实现多重循环的跳转,但在非循环结构中使用goto语句会使程序的结构紊乱,可读性变差。因此Java就发明了一种带标签的continue和break语句,实际上它是一种带限制的专门用于循环的goto语句。
通常情况下我们使用的continue(或break)语句不带标签,这时也就是默认在当前的循环中执行continue(或break)语句。带标签的循环实际上就是给这个循环起了个名字,当使用“continue(或break)+标签”语句时实际上就是在标签所在的循环执行continue(或break)语句。
现在我们用三个例子来说明带标签的循环。
1. 不带标签的二重循环
@Testpublic void testFor(){for(int i = 0; i < 10; i++){for(int j = 0; j < 10; j++){System.out.print("("+i+","+j+") ");}System.out.println();}}
2. 带标签的二重循环,“break+标签”语句
在这个例子中是个二重for循环,我们给外层循起始处加了标签(也就是说给外层循环起了个名字)“outerCycle”,在内层循环使用“break outerCycle”时,就相当于在outerCycle这个循环中直接使用break语句。
@Testpublic void testBreak() {outerCycle:for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if (j == 5) {break outerCycle;}System.out.print("(" + i + "," + j + ") ");}System.out.println();}}
3. 带标签的二重循环,“continue+标签”语句
在这个例子中是个二重for循环,我们给外层循起始处加了标签(也就是说给外层循环起了个名字)“outerCycle”,在内层循环使用“continue outerCycle”时,就相当于在outerCycle这个循环中直接使用continue语句。
@Testpublic void testContinue() {outerCycle:for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if (j == 5) {continue outerCycle;}System.out.print("(" + i + "," + j + ") ");}System.out.println();}}
}