注意以下代码第15,20行与第11行的不同
1 public class LabeledFor { 2 public static void main(String[] args) { 3 int i = 0; 4 outer: 5 for(; true ;) { 6 inner: 7 for(; i < 10; i++) { 8 prt("i = " + i); 9 if(i == 2) { 10 prt("continue"); 11 continue; 12 } 13 if(i == 3) { 14 prt("break"); 15 i++; 16 break; 17 } 18 if(i == 7) { 19 prt("continue outer"); 20 i++; 21 continue outer; 22 } 23 if(i == 8) { 24 prt("break outer"); 25 break outer; 26 } 27 for(int k = 0; k < 5; k++) { 28 if(k == 3) { 29 prt("continue inner"); 30 continue inner; 31 } 32 } 33 } 34 } 35 } 36 static void prt(String s) { System.out.println(s); } }
注意break 会中断 for 循环,而且在抵达 for 循环的末尾之前,递增表达式不会执行。由于 break 跳过了递 增表达式,所以递增会在i==3 的情况下直接执行。在 i==7 的情况下,continue outer 语句也会到达循环顶 部,而且也会跳过递增,所以它也是直接递增的。
java语言规定:for,while,do循环中的重复执行语句不能是一条单独的局部变量定义语句;如果程序要使用循环来重复定义局部变量,这条局部变量定义语句必须放在花括号内才有效。
如:
for(int k = 0; k < 5; k++) { Cat cat = new Cat(); }
而不能是
for(int k = 0; k < 5; k++) Cat cat = new Cat();