ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: break、continue

break可以离开目前switchforwhile、do while的区块,并前进至区块后下一个陈述句,在switch中主要用来结束陈述句进行至下一个case的比对,在for、while与do while中,主要用于中断目前的循环执行,break的例子之前看过不少,这边不再举例。

continue的作用与break类似,主要使用于循环,所不同的是break会结束区块的执行,而continue只会结束接下来区块中的陈述句,并跳回循环区块的开头继续下一个循环,而不是离开循环,例如:

for(int i = 1; i < 10; i++) {
	if(i == 5)
	break;
	System.ut.println("i = " + i);
}


这段程序会显示i = 1到4,因为当 i 等于5时就会执行break而离开循环,再看下面这个程序:

for(int i = 1; i < 10; i++) {
	if(i == 5)
	continue;
	System.out.println("i = " + i);
}


这段程序会显示1到4,与6到9,当 i 等于5时,会执行continue直接结束此次循环,这次循环System.out.println()该行并没有被执行,然后从区块开头头执行下一次循环,所以5并没有被显示。

break与continue还可以配合标签使用,例如本来break只会离开for循环,设定标签与scope,则可以离开整个scope,举个简单的例子:

BreakTest.java
public class BreakTest {
	public static void main(String[] args) {
		back : {
			for(int i = 0; i < 10; i++) {
				if(i == 9) {
					System.out.println("break");
					break back;
				}
			}
			System.out.println("test");
		}
	}
}

back是个标签,当break back;时,返回至back标签处,之后整个back区块不执行而跳过,所以这个程序System.out.println("test");不会被执行。

事实上continue也有类似的用法,只不过标签只能设定在for之前,例如:

ContinueTest.java
public class ContinueTest {
	public static void main(String[] args) {
		back1:
		for(int i = 0; i < 10; i++){
			back2:
			for(int j = 0; j < 10; j++) {
				if(j == 9) {
					continue back1;
				}
			}
			System.out.println("test");
		}
	}
}

continue配合标签,可以自由的跳至任何一层for循环,您可以试试continue back1与continue back2的不同,设定back1时,System.out.println("test");不会被执行。