程序1源代码如下:
public class BreakTest
{
public static void main(String[] args)
{
int a = 0;
outer:
System.out.println(a);
for(int i = 0; i < 6; i++)
{
if(i == a)
continue outer;
System.out.println(i);
}
}
}
图1
在编译时会报错,见图1所示,这是因为在Java中标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。
程序2源代码如下:
public class BreakTest
{
public static void main(String[] args)
{
System.out.println("============带标签循环不嵌套============");
System.out.println("continue标签");
outer1:
for(int i = 0; i < 10; i++)
{
if(i == 5)
continue outer1;
System.out.println("inner1->" + i);
}
System.out.println("break标签");
outer2:
for(int i = 0; i < 10; i++)
{
if(i == 5)
break outer2;
System.out.println("inner2->" + i);
}
System.out.println("============不带标签循环不嵌套============");
System.out.println("continue");
for(int i = 0; i < 10; i++)
{
if(i == 5)
continue;
System.out.println(i);
}
System.out.println("break");
for(int i = 0; i < 10; i++)
{
if(i == 5)
break;
System.out.println(i);
}
}
}
图2 观察图2可知,在不嵌套的循环中使用带标签的break和continue与使用不带标签时效果是一样的。
程序3源代码如下:
public class BreakTest { public static void main(String[] args) { outer1: for(int j = 0; j < 2; j++) { System.out.println("============带标签循环嵌套============"); System.out.println("break标签"); for(int i = 0; i < 10; i++) { if(i == 5) break outer1; System.out.println("inner1->" + i); } } outer2: for(int j = 0; j < 2; j++) { System.out.println("============带标签循环嵌套============"); System.out.println("continue标签"); for(int i = 0; i < 10; i++) { if(i == 5) continue outer2; System.out.println("inner2->" + i); } } } }
图3
观察图3可知,在嵌套的循环中使用带标签的break会直接跳出标签指定的循环体,使用带标签的continue会用来结束标签指定的循环体的当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。
总结:
1)不加标签时,continue和break作用于当前循环体,带标签时,作用于标签指定的循环体。
2)break:语句可以直接强行退出当前的循环,忽略循环体中任何其他语句和循环条件测试。
3)continue:语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。