標籤是標識符後接冒號(labelName:),置於循環語句之前,配合 break labelName 或 continue labelName 實現跳出/繼續指定外層循環。
outerLoop: for (int i = 0; i < 10; i++) {
innerLoop: for (int j = 0; j < 10; j++) {
if (condition) break outerLoop; // 直接跳出外層循環
if (condition) continue outerLoop; // 直接進入外層下一次迭代
}
}
| 語句 | 無標籤 | 有標籤 |
|---|---|---|
| break | 跳出最近的 switch/循環 | 跳出指定標籤的循環 |
| continue | 進入最近循環下一次迭代 | 進入指定標籤循環下一次迭代 |
int[][] matrix = {{1,2,3}, {4,5,6}, {7,8,9}};
boolean found = false;
searchLabel:
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == 5) {
System.out.printf("找到於 [%d][%d]%n", i, j);
found = true;
break searchLabel; // 直接跳出雙層循環
}
}
}
if (!found) System.out.println("未找到");
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
System.out.println("跳過外層 i=" + i + " 的剩餘內層迭代");
continue outer; // 直接進入外層 i+1
}
System.out.println("i=" + i + ", j=" + j);
}
}
/* 輸出:
i=1, j=1
跳過外層 i=1 的剩餘內層迭代
i=2, j=1
跳過外層 i=2 的剩餘內層迭代
i=3, j=1
跳過外層 i=3 的剩餘內層迭代
*/
searchLoop、retryLoop),避免單字母。return 替代。break label 僅針對循環,switch 無標籤機制(JDK 12+ switch expression 已不需 break)。標籤為 Java 提供了精確控制多層循環流程的能力,在「多層嵌套循環需整體跳出/跳過」場景下極其實用。善用標籤可避免額外布爾標誌變量,使代碼更清晰;但請克制使用,優先重構為小方法。