深入浅析Java 循环中标签的作用
continue和break可以改变循环的执行流程,但在多重循环中,这两条语句无法直接从内层循环跳转到外层循环。在C语言中,可以通过goto语句实现多重循环的跳转,但在非循环结构中使用goto语句会使程序的结构紊乱,可读性变差。因此Java就发明了一种带标签的continue和break语句,实际上它是一种带限制的专门用于循环的goto语句。
通常情况下我们使用的continue(或break)语句不带标签,这时也就是默认在当前的循环中执行continue(或break)语句。带标签的循环实际上就是给这个循环起了个名字,当使用“continue(或break)+标签”语句时实际上就是在标签所在的循环执行continue(或break)语句。
现在我们用三个例子来说明带标签的循环。
1.不带标签的二重循环
packagejavaleanning; publicclassLableTest{ publicstaticvoidmain(String[]args){ for(inti=0;i<10;i++){ for(intj=0;j<10;j++){ System.out.print("("+i+","+j+")"); } System.out.println(); } } }
运行结果
(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)(0,6)(0,7)(0,8)(0,9)
(1,0)(1,1)(1,2)(1,3)(1,4)(1,5)(1,6)(1,7)(1,8)(1,9)
(2,0)(2,1)(2,2)(2,3)(2,4)(2,5)(2,6)(2,7)(2,8)(2,9)
(3,0)(3,1)(3,2)(3,3)(3,4)(3,5)(3,6)(3,7)(3,8)(3,9)
(4,0)(4,1)(4,2)(4,3)(4,4)(4,5)(4,6)(4,7)(4,8)(4,9)
(5,0)(5,1)(5,2)(5,3)(5,4)(5,5)(5,6)(5,7)(5,8)(5,9)
(6,0)(6,1)(6,2)(6,3)(6,4)(6,5)(6,6)(6,7)(6,8)(6,9)
(7,0)(7,1)(7,2)(7,3)(7,4)(7,5)(7,6)(7,7)(7,8)(7,9)
(8,0)(8,1)(8,2)(8,3)(8,4)(8,5)(8,6)(8,7)(8,8)(8,9)
(9,0)(9,1)(9,2)(9,3)(9,4)(9,5)(9,6)(9,7)(9,8)(9,9)
2.带标签的二重循环,“break+标签”语句
在这个例子中是个二重for循环,我们给外层循起始处加了标签(也就是说给外层循环起了个名字)“outerCycle”,在内层循环使用“breakouterCycle”时,就相当于在outerCycle这个循环中直接使用break语句。
packagejavaleanning; publicclassLableTest{ publicstaticvoidmain(String[]args){ outerCycle: for(inti=0;i<10;i++){ for(intj=0;j<10;j++){ if(j==5){ breakouterCycle; } System.out.print("("+i+","+j+")"); } System.out.println(); } } }
运行结果
(0,0)(0,1)(0,2)(0,3)(0,4)
3.带标签的二重循环,“continue+标签”语句
在这个例子中是个二重for循环,我们给外层循起始处加了标签(也就是说给外层循环起了个名字)“outerCycle”,在内层循环使用“continueouterCycle”时,就相当于在outerCycle这个循环中直接使用continue语句。
packagejavaleanning; publicclassLableTest{ publicstaticvoidmain(String[]args){ outerCycle: for(inti=0;i<10;i++){ for(intj=0;j<10;j++){ if(j==5){ continueouterCycle; } System.out.print("("+i+","+j+")"); } System.out.println(); } } }
运行结果
(0,0)(0,1)(0,2)(0,3)(0,4)(1,0)(1,1)(1,2)(1,3)(1,4)(2,0)(2,1)(2,2)(2,3)(2,4)(3,0)(3,1)(3,2)(3,3)(3,4)(4,0)(4,1)(4,2)(4,3)(4,4)(5,0)(5,1)(5,2)(5,3)(5,4)(6,0)(6,1)(6,2)(6,3)(6,4)(7,0)(7,1)(7,2)(7,3)(7,4)(8,0)(8,1)(8,2)(8,3)(8,4)(9,0)(9,1)(9,2)(9,3)(9,4)
注意:实际运行结果全部在一行显示(即没有执行换行语句),现在这样的显示结果仅仅是出于排版的原因