Java 控制流語句遵循結構化編程原則,僅包含順序、選擇、循環三大基本結構,配合跳轉語句即可表達任意複雜邏輯。本文系統梳理語法細節、執行流程、常見陷阱與最佳實踐,適合初學夯實基礎、老手快速查閱。
無特殊語法,按代碼編寫順序依次執行。注意:變量聲明必須在使用前,作用域以大括號 {} 為界。
// 單分支
if (condition) {
// 條件為 true 執行
}
// 雙分支
if (condition) {
// true 分支
} else {
// false 分支
}
// 多分支
if (condition1) {
} else if (condition2) {
} else {
// 以上都不滿足
}
最佳實踐:
if (score >= 90) 而非 if (90 <= score && score <= 100),利用短路特性簡化邏輯。
// 傳統 switch (JDK 1.0+)
switch (expression) { // byte, short, int, char, enum, String (JDK 7+)
case value1:
// 執行語句
break; // 必須 break,否則貫穿執行下一 case
case value2:
case value3: // 合並 case
// 執行語句
break;
default:
// 以上都不匹配
}
// JDK 12+ Switch 表達式 (推薦:無 break、無貫穿、返回值)
String result = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> "6";
case TUESDAY -> "7";
case THURSDAY, SATURDAY -> "8";
case WEDNESDAY -> "9";
default -> throw new IllegalStateException("Invalid day: " + day);
};
關鍵點:
case 後只能是編譯期常量(字面量、final 變量、enum),不能是變量或表達式。break 缺失會導致「貫穿」執行後續 case,極易產生 Bug。-> 自動跳出,代碼更簡潔安全。
// 基本語法
while (condition) {
// 條件為 true 重複執行
}
// 死循環寫法
while (true) {
if (exitCondition) break;
// 業務邏輯
}
執行順序:判斷 → 執行 → 判斷 → 執行 ... 直到 false。
do {
// 循環體
} while (condition);
適用場景:菜單交互、至少一次嘗試的重試邏輯。
// 傳統 for (JDK 1.0+)
for (int i = 0; i < 10; i++) {
// i 作為計數器
}
// 增強 for / for-each (JDK 5+,遍歷數組/Collection)
int[] arr = {1, 2, 3};
for (int num : arr) {
System.out.println(num); // 無索引,不可修改原數組元素
}
// JDK 8+ Stream 流式遍歷 (函數式風格)
Arrays.stream(arr).forEach(System.out::println);
傳統 for 執行順序:初始化 → 判斷 → 執行 → 迭代 → 判斷 ...
for (int i = 0; i < 10; i++) {
if (i == 5) break; // 直接跳出 for 循環
System.out.println(i); // 輸出 0-4
}
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue; // 跳過偶數
System.out.println(i); // 輸出 1,3,5,7,9
}
// for 循環中 continue 直接跳到 i++ 迭代步驟
// while/do-while 中 continue 跳到條件判斷
outer: // 標籤名任意,建議語義化
for (int i = 0; i < 3; i++) {
inner:
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) break outer; // 直接跳出外層循環
System.out.println("i=" + i + ", j=" + j);
}
}
// 輸出: (0,0) (0,1) (0,2) (1,0) → 遇到 break outer 結束
void 方法用 return; 或省略。return value;,且所有路徑必須返回。finally 塊在 return 後仍會執行(除非 System.exit())。| 陷阱 | 錯誤示例 | 正確做法 |
|---|---|---|
| 死循環 | for(;;) 無退出條件 |
確保循環條件會變化,或內部有 break |
| 循環邊界 | for(int i=0; i<=arr.length; i++) → IndexOutOfBounds |
i < arr.length 或增強 for |
| switch 貫穿 | 漏寫 break |
加 break 或用 JDK 12+ 箭頭語法 |
| 修改集合遍歷 | for(E e: list) list.remove(e) → ConcurrentModificationException |
用 Iterator.remove() 或 ListIterator |
控制流語句是編程的骨架。掌握 if/switch 的分支藝術、for/while 的循環節奏、break/continue/return 的跳轉韻律,再配上邊界思維與現代語法糖,即能寫出清晰、高效、不易出錯的 Java 代碼。