java提供了break和continue來控制循環(huán)結(jié)構(gòu)侨嘀。除此之外,還提供了return來結(jié)束整個方法捂襟,當然也就結(jié)束了一次循環(huán)咬腕。
使用break結(jié)束循環(huán)
某些時候需要在某種條件下強行終止循環(huán),而不是等到循環(huán)條件為false時才退出循環(huán)葬荷。此時涨共,可以使用break來完成這一動作。break用于完全結(jié)束一個(一層)循環(huán)宠漩,跳出循環(huán)體举反。不管是哪種循環(huán),一旦在循環(huán)體中遇到break扒吁,系統(tǒng)將完全結(jié)束該循環(huán)火鼻,開始執(zhí)行循環(huán)之后的代碼。實例如下:
public class BreakTest {
public static void main(String args[]) {
// 一個簡單的測試break的for循環(huán)
for (int i = 0; i < 3; i++) {
System.out.println("i 的值為: " + i);
if (i == 1) {
break;
}
}
}
}
最后輸出為:
i 的值為: 0
i 的值為: 1
當i的值為1時瘦陈,遇到break凝危,則跳出該循環(huán)。break語句不僅可以跳出其所在的循環(huán)晨逝,還能直接結(jié)束其外層的循環(huán)。此時需要在break后緊跟一個標簽懦铺,這個標簽用于標識外層循環(huán)捉貌。java中的標簽就是一個緊跟這英文冒號(:)的標識符。與其他語言不同的時冬念,java中的標簽只有放在循環(huán)語句之前才有作用趁窃。例如下列代碼:
public class BreakTest {
public static void main(String args[]) {
outer:
for (int j = 0; j < 3; j++) {
System.out.println("j 的值為: " + j);
for (int i = 0; i < 3; i++) {
System.out.println("i 的值為: " + i);
if (i == 1) {
break outer;
}
}
}
}
}
運行結(jié)果為:
j 的值為: 0
i 的值為: 0
i 的值為: 1
程序從外層循環(huán)進入內(nèi)層循環(huán)后,當i==1時急前,程序就遇到了一個break outer;語句醒陆,這行代碼就會導致結(jié)束break標簽指定的循環(huán),不是結(jié)束break所在的循環(huán)裆针。而是結(jié)束break循環(huán)的外層循環(huán)刨摩,所以看到上面的運行結(jié)果寺晌。
值得指出的是,break后的標簽必須是一個有效的的標簽澡刹,即這個標簽必須在break語句所在的循環(huán)之前定義呻征,或者在其所在循環(huán)的外層循環(huán)之前定義,當然如果把這個標簽放在所在循環(huán)之前定義罢浇,也就失去了標簽的意義陆赋,以為break默認就是結(jié)束其所在的循環(huán)。
使用continue忽略本次循環(huán)剩下的語句
continue的功能和break有點類似嚷闭,區(qū)別是continue知識忽略本次循環(huán)剩下的語句攒岛,接著執(zhí)行下一次循環(huán),并不會終止循環(huán)胞锰;而break則是完全終止循環(huán)本身灾锯。如下程序示范了continue的用法。
public class continueTest {
public static void main(String args[]) {
for (int i = 0; i < 3; i++) {
if (i == 1) {
continue;
}
System.out.println("i 的值為: " + i);
}
}
}
執(zhí)行結(jié)果為:
i 的值為: 0
i 的值為: 2
從上面運行結(jié)果來看胜蛉,當i==1時挠进,遇到continue語句,則忽略剩下的語句誊册,繼續(xù)執(zhí)行下一次循環(huán)领突。所以得此結(jié)果。如果把一個continue語句放在單次循環(huán)的最后一句案怯,這個continue語句是沒有任何意義的-因為它僅僅忽略的時一個空白君旦,沒有忽略任何有效的語句。
與break語句類似的是嘲碱,continue后也可以緊跟一個標簽金砍,用于直接跳過過標簽所標識循環(huán)的當次循環(huán)的剩下語句,重新開始下一次循環(huán)麦锯,例如下面代碼:
public class continueTest {
public static void main(String args[]) {
outer:
for (int j = 0; j < 3; j++) {
System.out.println("j 的值為: " + j);
for (int i = 0; i < 3; i++) {
System.out.println("i 的值為: " + i);
if (i == 1) {
continue outer;
}
}
}
}
}
運行結(jié)果為:
j 的值為: 0
i 的值為: 0
i 的值為: 1
j 的值為: 1
i 的值為: 0
i 的值為: 1
j 的值為: 2
i 的值為: 0
i 的值為: 1
從上面結(jié)果可以知道恕稠,循環(huán)變量i將無法超過1,每當i等于1時扶欣,continue outer鹅巍;語句就結(jié)束了外層循環(huán)的檔次循環(huán)。直接開始下一次循環(huán)料祠,內(nèi)層循環(huán)當然就沒機會執(zhí)行完成骆捧。
與break類似的是,continue狗的標簽也必須是一個有效的標簽髓绽,即這個標簽通常應該放在continue所在循環(huán)的外層循環(huán)之前定義敛苇。
使用return結(jié)束方法
return關(guān)鍵字并不是專門用于結(jié)束循環(huán)的,renturn的功能就是結(jié)束一個方法的顺呕,當一個方法執(zhí)行到return 語句枫攀,這個方法就會結(jié)束括饶,循環(huán)自然也隨之結(jié)束。不管這個循環(huán)有多少層脓豪。