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

Java Switch 語句完全指南:語法規則、數據類型限制、break 貫穿機制、常量案例標簽與變量作用域陷阱

     編輯:Java 程式設計入門

語法結構

switch (表達式) {
    case 常量1: 語句1; break;
    case 常量2: 語句2; break;
    ...
    default: 語句N; // 可選
}

核心規則速查

規則說明示例
表達式類型Java 5-6: int/char/byte/short/Enum
Java 7+: +String
Java 12+: +模式匹配(預覽)
switch(ch) ✅
switch(str) ✅(7+)
case 標簽編譯期常量表達式,不可為變量case 1+2: ✅
case x: ❌
break 作用跳出 switch,缺失導致貫穿執行下一 case見下文
default無匹配時執行,可置任意位置通常放最後
作用域case 塊不自動形成作用域,需 {} 宣告局部變量見陷阱

break 貫穿演示

int n = 1;
switch (n) {
    case 1: System.out.print("A ");
    case 2: System.out.print("B ");
    case 3: System.out.print("C ");
    default: System.out.print("D ");
}
// 輸出:A B C D  (無 break 貫穿)

變量作用域陷阱

switch (x) {
    case 1:
        int a = 10; // 編譯錯誤!case 無獨立作用域
        break;
    case 2:
        // a 仍可見但未初始化,極易出錯
}

// 正確:用 {} 形成塊作用域
switch (x) {
    case 1: {
        int a = 10; // 合法
        break;
    }
    case 2: { ... }
}

Java 12+ Switch 表達式(標準化)

String result = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> "6";
    case TUESDAY                -> "7";
    case THURSDAY, SATURDAY     -> "8";
    case WEDNESDAY              -> "9";
    default                     -> throw new IllegalStateException(day + "");
};
  • 箭頭語法 ->:無貫穿、自動 break、返回值;
  • 傳統 case ...: 保留兼容;
  • yield 關鍵字在塊中返回值。

實戰最佳實踐

  1. 枚舉類型優先用 switch,編譯器提示未覆蓋值;
  2. 字符串 switch 內部轉 hashCode + equals,性能優於 if-else 鏈;
  3. 避免濫用貫穿,若需合併情況用 case A: case B:;
  4. 默認分支必寫,防禦性編程;
  5. Java 12+ 遷移到表達式風格,更函數式、更安全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved