java中 label 配合 break continue 使用方法


轉 https://www.jianshu.com/p/7954b61bc6ee

java中 label 配合 break continue 使用的其實是比較少的.
這種做法在業務代碼中比較少見.
在讀其他庫的代碼時可能會遇到該語法的使用.
下面對該語法做簡短解釋.

break label

用來終止循環體的循環,使用break 可以終止的循環體包括三種, for,while,do-while

不帶 label使用 break 時

執行 break ,會終止離 break 關鍵字最近的循環體的循環.
示例如下

for (int i = 0; i < 3; i++) { System.out.println(String.format("start outer for loop index %d", i)); int j = 0; while (true) { System.out.println(String.format("inner loop with while index %d", j)); if (j == 2) { //終止最近的for,while,do-while循環 break; } else { j++; } } System.out.println(String.format("end outer for loop index %d", i)); } 

結果為

start outer for loop index 0
inner loop with while index 0
inner loop with while index 1
inner loop with while index 2
end outer for loop index 0
start outer for loop index 1
inner loop with while index 0
inner loop with while index 1
inner loop with while index 2
end outer for loop index 1
start outer for loop index 2
inner loop with while index 0
inner loop with while index 1
inner loop with while index 2
end outer for loop index 2

通過打印可以看出,內部循環每次執行到2時就將當前 while 死循環停止.
而外部循環則會從0遍歷到2,正常循環遍歷.不受 break 的影響.

帶 label 的break

會終止指定 label 所對應的循環體.
示例為從二維的student age 數組中,找第一個年紀為9歲的學生.

int students[][] = {{10, 12, 11}, {8, 9, 1}, {9, 15, 7}}; jumpOutHere: for (int i = 0; i < 3; i++) { System.out.println(String.format("start outer for loop index %d", i)); int j = 0; while (j < 3) { System.out.println(String.format("current retrieve value %d", students[i][j])); if (students[i][j] == 9) { break jumpOutHere; } else { j++; } } System.out.println(String.format("end outer for loop index %d", i)); } 

結果為

start outer for loop index 0
current retrieve value 10
current retrieve value 12
current retrieve value 11
end outer for loop index 0
start outer for loop index 1
current retrieve value 8
current retrieve value 9

當遍歷到二維數組中第一個年紀為9的學生時,直接終止 label 對應的循環.此處為外層循環.

continue label

用來跳過循環體中本次執行的循環,使用continue 可以跳過的循環體包括三種, for,while,do-while

不帶 label 的 continue

會跳過距離continue最近的循環體的本次執行,執行下一次循環

for (int i = 0; i < 3; i++) { System.out.println(String.format("start outer for loop index %d", i)); for(int k = 0;k<3;k++){ if(k==1) continue; System.out.println(String.format("inner loop index %d",k)); } System.out.println(String.format("end outer for loop index %d", i)); } 

start outer for loop index 0
inner loop index 0
inner loop index 2
end outer for loop index 0
start outer for loop index 1
inner loop index 0
inner loop index 2
end outer for loop index 1
start outer for loop index 2
inner loop index 0
inner loop index 2
end outer for loop index 2

通過示例可以看出當 k=1時會跳過本次內部循環(也是離 continue 最近的循環),直接執行下一次內部循環.

帶 label 的 continue

會跳過標記為 label 的循環體中的本次循環的執行,並執行, label 標記位置的下一個循環.

CONTINU_LABLE:
for (int i = 0; i < 3; i++) { System.out.println(String.format("start outer for loop index %d", i)); for (int k = 0; k < 3; k++) { if (k == 1) continue CONTINU_LABLE; System.out.println(String.format("inner loop index %d", k)); } System.out.println(String.format("end outer for loop index %d", i)); } 

start outer for loop index 0
inner loop index 0
start outer for loop index 1
inner loop index 0
start outer for loop index 2
inner loop index 0

通過結果可以看出,當 k=1時,直接就跳到CONTINU_LABLE標記的循環體的下一次循環了.






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM