首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java break 與 continue 關鍵字完全指南

     編輯:Java 相關知識

核心區別一覽

關鍵字作用範圍執行流程典型場景
breakswitch / 循環 (for/while/do-while)立即跳出整個塊,繼續執行塊後代碼找到目標提前結束、switch 分支結束
continue僅限循環跳過本次迴圈剩餘代碼,直接進入下一次迭代判斷過濾特定條件、異常處理後繼續

基本用法範例

break 在循環中

for (int i = 1; i <= 5; i++) {
    if (i == 3) break;
    System.out.println("i = " + i);
}
// 輸出: 1, 2

continue 在循環中

for (int i = 1; i <= 5; i++) {
    if (i == 3) continue;
    System.out.println("i = " + i);
}
// 輸出: 1, 2, 4, 5

break 在 switch 中

int day = 3;
switch (day) {
    case 1: System.out.println("週一"); break;
    case 2: System.out.println("週二"); break;
    case 3: System.out.println("週三"); break; // 無 break 會貫穿執行 case 4
    case 4: System.out.println("週四");
    default: System.out.println("其他");
}
// 輸出: 週三

進階:標籤配合使用

Java 支援標籤,實現多層循環的精確控制。

標籤 break:跳出指定外層循環

outer: for (int i = 1; i <= 3; i++) {
    inner: for (int j = 1; j <= 3; j++) {
        if (i == 2 && j == 2) {
            System.out.println("觸發 break outer");
            break outer; // 直接跳出外層循環
        }
        System.out.printf("i=%d, j=%d%n", i, j);
    }
}
// 輸出:
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1
// 觸發 break outer

標籤 continue:繼續指定外層循環下一次迭代

outer: for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            System.out.println("觸發 continue outer, i=" + i);
            continue outer; // 跳過內層剩餘,外層進入下一輪
        }
        System.out.printf("i=%d, j=%d%n", i, j);
    }
}
// 輸出:
// i=1, j=1
// 觸發 continue outer, i=1
// i=2, j=1
// 觸發 continue outer, i=2
// i=3, j=1
// 觸發 continue outer, i=3

實戰最佳實踐

1. 迭代器模式替代索引循環

// 不推薦:索引循環易出界、需手動 break/continue
for (int i = 0; i < list.size(); i++) {
    if (shouldSkip(list.get(i))) continue;
    process(list.get(i));
}

// 推薦:增強 for / 迭代器 / Stream
for (Item item : list) {
    if (shouldSkip(item)) continue;
    process(item);
}

// 或 Stream 過濾
list.stream()
    .filter(this::shouldProcess)
    .forEach(this::process);

2. 守衛條款減少巢狀

// 避免深層 if-else
void process(User user) {
    if (user == null) return;           // 守衛條款
    if (!user.isActive()) return;       // 守衛條款
    if (user.getBalance() < 0) return;  // 守衛條款
    
    // 核心業務邏輯平鋪
    doBusiness(user);
}

3. 避免濫用標籤

  • 標籤降低代碼可讀性,優先重構為方法提取、Stream、Optional。
  • 僅在「多層循環且必須從內層跳出外層」且無法重構時使用。

常見陷阱

  1. continue 在 for 迴圈中會執行迭代表達式:
    for (int i = 0; i < 5; i++) {
        if (i == 2) continue;
        System.out.println(i);
    }
    // i 依然會遞增到 3, 4...
  2. break/continue 不能用在 if/else 塊中:僅限循環與 switch。
  3. 標籤必須緊貼循環/開關語句前:中間不能有其他語句。

總結

break 是「終止」,continue 是「跳過」。善用守衛條款、Stream API、方法提取可消除 90% 的顯式跳轉需求。標籤是核武器,慎用、慎用、再慎用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved