天天看点

探讨break和continue语句的标签

程序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);
		}
	}
}
           
探讨break和continue语句的标签

图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);
		}
	}
}
           
探讨break和continue语句的标签

图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); } } } }

探讨break和continue语句的标签

图3

观察图3可知,在嵌套的循环中使用带标签的break会直接跳出标签指定的循环体,使用带标签的continue会用来结束标签指定的循环体的当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。

总结:

1)不加标签时,continue和break作用于当前循环体,带标签时,作用于标签指定的循环体。

2)break:语句可以直接强行退出当前的循环,忽略循环体中任何其他语句和循环条件测试。

3)continue:语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。