程序默認執行流程:代碼從上至下依次執行,無跳轉、無判斷。是所有程序的基礎骨架。
if (條件) { 語句; }if (條件) { 語句A; } else { 語句B; }if (條件1) { } else if (條件2) { } ... else { }switch (表達式) {
case 常量值1: 語句1; break;
case 常量值2: 語句2; break;
default: 語句N;
}
int、short、char、byte、String、enum。break 會繼續執行下一 case,直到遇到 break 或結束。tableswitch/lookupswitch 字節碼,性能略優。while (條件) {
循環體;
}
適用於次數未知、需先檢查條件的場景。若初始條件為 false,循環體零次執行。
do {
循環體;
} while (條件);
循環體至少執行一次。常用於菜單交互、輸入校驗等「先做一次再決定是否繼續」的業務。
for (初始化; 條件; 迭代) {
循環體;
}
增強 for(for-each)(JDK 5+):
for (元素類型 變量 : 數組或集合) {
// 僅遍歷,不可修改原集合結構
}
所有循環邏輯均可互相轉換,選擇原則:
forwhiledo-whilebreak:跳出最近一層循環或 switch。continue:跳過本次循環剩餘語句,直接進入下一次判斷(for 會執行迭代語句)。outer: for(...) { inner: for(...) { break outer; } } 可跳出多層嵌套,慎用以免降低可讀性。| 陷阱 | 正確姿勢 |
|---|---|
| if (a = b) 賦值而非比較 | 習慣寫 if (b == a) 或使用 IDE 警告 |
| switch 字符串為 null 拋 NPE | 先非空判斷或用 Objects.equals() |
| 循環中修改集合大小導致 CME | 用 Iterator.remove() 或收集待刪除元素二次處理 |
| 死循環無退出條件 | 代碼評審時重點檢查條件變量更新邏輯 |
控制語句是程序邏輯的骨架。熟練掌握 if/switch 的適用邊界、三種循環的語義差異、break/continue 的作用範圍,並養成「防禦性編程」習慣(非空判斷、邊界檢查、避免副作用),能寫出結構清晰、邏輯健壯、易於維護的 Java 代碼。