最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的switch-case語句的語法、特征詳解

 更新時(shí)間:2025年11月20日 11:31:37   作者:M.Z.Q  
Java中的switch-case語句用于多分支選擇,支持多種數(shù)據(jù)類型,包括整型、字符型、枚舉型、字符串等,它提供了一種更清晰、更高效的方式來處理多個(gè)條件分支,本文給大家介紹Java中的switch-case語句的語法、特征詳解,感興趣的朋友一起看看吧

switch-case是Java中一種重要的多分支選擇結(jié)構(gòu),它提供了一種更清晰、更高效的方式來處理多個(gè)條件分支。本文將全面介紹Java中switch-case語句的語法、特性以及在不同Java版本中的演進(jìn)。

1. 基礎(chǔ)語法結(jié)構(gòu)

Java中switch-case的基本語法如下:

switch (expression) {
    case value1:
        // 代碼塊1
        break;
    case value2:
        // 代碼塊2
        break;
    // 可以有任意數(shù)量的case語句
    default:
        // 默認(rèn)代碼塊
}

1.1 關(guān)鍵組成部分

  • ?switch表達(dá)式?:可以是以下類型:
    • 整型(byte, short, int)
    • 字符型(char)
    • 枚舉類型(enum)
    • 字符串(String,Java 7+)
    • 包裝類(Integer, Character等,Java 5+)
  • ?case標(biāo)簽?:必須是常量表達(dá)式,且類型與switch表達(dá)式兼容
  • ?break語句?:用于退出switch塊(可選但通常需要)
  • ?default分支?:當(dāng)沒有匹配的case時(shí)執(zhí)行(可選)

2. 傳統(tǒng)switch-case(Java 7及之前)

2.1 基本示例

int day = 3;
String dayName;
switch (day) {
    case 1:
        dayName = "星期一";
        break;
    case 2:
        dayName = "星期二";
        break;
    case 3:
        dayName = "星期三";
        break;
    case 4:
        dayName = "星期四";
        break;
    case 5:
        dayName = "星期五";
        break;
    default:
        dayName = "周末";
}
System.out.println(dayName); // 輸出:星期三

2.2 注意事項(xiàng)

  • ?case穿透(Fall-through)??:如果省略break,會(huì)繼續(xù)執(zhí)行下一個(gè)case的代碼
int num = 2;
switch (num) {
    case 1:
        System.out.println("一");
    case 2:
        System.out.println("二"); // 會(huì)執(zhí)行
    case 3:
        System.out.println("三"); // 也會(huì)執(zhí)行
    default:
        System.out.println("其他"); // 也會(huì)執(zhí)行
}
// 輸出:
// 二
// 三
// 其他
  • ?default位置?:可以放在任意位置,但通常放在最后
  • ?case值必須唯一?:不能有重復(fù)的case值

3. Java 7增強(qiáng):支持字符串

從Java 7開始,switch支持String類型:

String fruit = "apple";
switch (fruit) {
    case "banana":
        System.out.println("香蕉");
        break;
    case "apple":
        System.out.println("蘋果");
        break;
    case "orange":
        System.out.println("橙子");
        break;
    default:
        System.out.println("未知水果");
}
// 輸出:蘋果

?注意?:字符串比較是區(qū)分大小寫的,且不能為null

4. Java 12+新特性:switch表達(dá)式

Java 12引入了更簡(jiǎn)潔的switch表達(dá)式(正式成為標(biāo)準(zhǔn)特性是在Java 14):

4.1 箭頭語法(->)

int day = 3;
String dayName = switch (day) {
    case 1 -> "星期一";
    case 2 -> "星期二";
    case 3 -> "星期三";
    case 4 -> "星期四";
    case 5 -> "星期五";
    default -> "周末";
};
System.out.println(dayName); // 輸出:星期三

4.2 yield返回值(Java 13+)

對(duì)于多行代碼塊,可以使用yield返回值:

String fruit = "apple";
String description = switch (fruit) {
    case "banana" -> "黃色的彎曲水果";
    case "apple" -> {
        String color = "紅色";
        yield color + "的圓形水果";
    }
    case "orange" -> "橙色的柑橘類水果";
    default -> "未知水果";
};
System.out.println(description); // 輸出:紅色的圓形水果

4.3 多case組合

int month = 2;
int days = switch (month) {
    case 1, 3, 5, 7, 8, 10, 12 -> 31;
    case 4, 6, 9, 11 -> 30;
    case 2 -> {
        // 這里可以添加更復(fù)雜的邏輯
        yield 28; // 簡(jiǎn)化的閏年判斷
    }
    default -> throw new IllegalArgumentException("無效月份: " + month);
};
System.out.println(days); // 輸出:28

5. 現(xiàn)代switch 表達(dá)式語法結(jié)構(gòu) (Java 14+)

result = switch (expression) {
    case value1 -> expression1;
    case value2 -> {
        // 代碼塊
        yield result;
    }
    case value3, value4 -> expression3; // 多case
    default -> defaultExpression;
};

6. 完整 switch-case 語法元素圖

7. 執(zhí)行流程圖

8. 歷史演進(jìn)

9. 與傳統(tǒng)if-else的比較

9.1 選擇依據(jù)

情況

推薦使用

?固定值比較?

switch-case

?范圍比較?

if-else

?少量條件?

if-else

?多條件(>3)??

switch-case

?需要類型檢查?

if-else

?枚舉/字符串匹配?

switch-case

9.2 性能考慮

  • ?字節(jié)碼層面?:switch通常編譯為tableswitch或lookupswitch指令,比if-else的多個(gè)條件跳轉(zhuǎn)更高效
  • ?可讀性?:多條件時(shí)switch通常更清晰
  • ?維護(hù)性?:新增條件時(shí)switch更容易擴(kuò)展

10. 最佳實(shí)踐

  • ?總是包含default?:即使你認(rèn)為已經(jīng)覆蓋所有情況
  • ?處理null?:switch表達(dá)式不能為null,需要提前檢查
String input = null;
if (input == null) {
    System.out.println("輸入不能為null");
    return;
}
// 后續(xù)switch處理
  • ?使用枚舉?:使代碼更安全
enum Color { RED, GREEN, BLUE }
Color color = Color.RED;
switch (color) {
    case RED -> System.out.println("紅色");
    case GREEN -> System.out.println("綠色");
    case BLUE -> System.out.println("藍(lán)色");
}
  • ?避免case穿透?:除非有意為之(如多個(gè)case共享代碼)
  • ?新版Java優(yōu)先使用switch表達(dá)式?:更簡(jiǎn)潔安全

11. 常見錯(cuò)誤與陷阱

  • ?忘記break?:導(dǎo)致意外的case穿透
  • ?重復(fù)的case值?:編譯錯(cuò)誤
  • ?類型不匹配?:case值必須與switch表達(dá)式類型兼容
  • ?使用浮點(diǎn)數(shù)?:switch不支持float/double
// 錯(cuò)誤示例
double value = 1.0;
switch (value) { // 編譯錯(cuò)誤
    // ...
}
  • ?復(fù)雜條件?:switch不適合處理復(fù)雜邏輯條件

12. 實(shí)際應(yīng)用示例

12.1 狀態(tài)機(jī)實(shí)現(xiàn)

enum State { START, PROCESSING, FINISHED }
State current = State.START;
switch (current) {
    case START -> {
        System.out.println("開始處理");
        current = State.PROCESSING;
    }
    case PROCESSING -> {
        System.out.println("處理中...");
        current = State.FINISHED;
    }
    case FINISHED -> System.out.println("已完成");
}

12.2 命令行工具

String command = "help";
switch (command.toLowerCase()) {
    case "start" -> startService();
    case "stop" -> stopService();
    case "restart" -> restartService();
    case "help", "?" -> showHelp();
    default -> System.out.println("未知命令: " + command);
}

12.3 游戲開發(fā)

char input = 'w';
switch (input) {
    case 'w', 'W' -> movePlayer(0, 1);  // 上
    case 'a', 'A' -> movePlayer(-1, 0); // 左
    case 's', 'S' -> movePlayer(0, -1); // 下
    case 'd', 'D' -> movePlayer(1, 0);  // 右
    default -> System.out.println("無效輸入");
}

總結(jié)

Java的switch-case語句從最初的基本形式發(fā)展到現(xiàn)在的switch表達(dá)式,提供了更強(qiáng)大、更靈活的多分支選擇能力。關(guān)鍵要點(diǎn):

  • ?傳統(tǒng)switch?:適用于簡(jiǎn)單、離散值的多分支選擇
  • ?switch表達(dá)式?(Java 12+):更簡(jiǎn)潔,可以直接返回值
  • ?類型支持?:支持整數(shù)、枚舉、字符串等多種類型
  • ?最佳實(shí)踐?:總是包含default,處理null,優(yōu)先使用新版語法

隨著Java語言的演進(jìn),switch-case仍然是處理多分支邏輯的高效工具,特別是在代碼可讀性和維護(hù)性方面具有明顯優(yōu)勢(shì)。

到此這篇關(guān)于Java中的switch-case語句的語法、特征詳解的文章就介紹到這了,更多相關(guān)java switch-case語句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)流程詳解

    Springboot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)流程詳解

    通過重寫SchedulingConfigurer方法實(shí)現(xiàn)對(duì)定時(shí)任務(wù)的操作,單次執(zhí)行、停止、啟動(dòng)三個(gè)主要的基本功能,動(dòng)態(tài)的從數(shù)據(jù)庫中獲取配置的定時(shí)任務(wù)cron信息,通過反射的方式靈活定位到具體的類與方法中
    2022-09-09
  • Java變量常量聲明和定義原理解析

    Java變量常量聲明和定義原理解析

    這篇文章主要介紹了Java變量常量聲明和定義原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java 中的vector和list的區(qū)別和使用實(shí)例詳解

    Java 中的vector和list的區(qū)別和使用實(shí)例詳解

    在大家還沒有了解vector,list,deque的知識(shí)之前,我先給大家介紹下stl,本文重點(diǎn)給大家介紹vector和list的區(qū)別及使用,感興趣的的朋友一起看看吧
    2017-09-09
  • 基于log4j2.properties踩坑與填坑

    基于log4j2.properties踩坑與填坑

    這篇文章主要介紹了log4j2.properties踩坑與填坑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring boot配置文件加解密詳解

    Spring boot配置文件加解密詳解

    這篇文章主要給大家介紹了關(guān)于Spring boot配置文件加解密的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java簡(jiǎn)單數(shù)組排序(冒泡法)

    Java簡(jiǎn)單數(shù)組排序(冒泡法)

    這篇文章主要介紹了Java簡(jiǎn)單數(shù)組排序,實(shí)例分析了基于冒泡法實(shí)現(xiàn)數(shù)組排序的相關(guān)技巧,簡(jiǎn)單實(shí)用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 將Java項(xiàng)目提交到云服務(wù)器的流程步驟

    將Java項(xiàng)目提交到云服務(wù)器的流程步驟

    所謂將項(xiàng)目提交到云服務(wù)器即將你的項(xiàng)目打成一個(gè) jar 包然后提交到云服務(wù)器即可,因此我們需要準(zhǔn)備服務(wù)器環(huán)境為:Linux + JDK + MariDB(MySQL)+ Git + Maven,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Java實(shí)現(xiàn)第三方 HTTP 接口重試實(shí)現(xiàn)方式

    Java實(shí)現(xiàn)第三方 HTTP 接口重試實(shí)現(xiàn)方式

    本文主要介紹了Java實(shí)現(xiàn)第三方 HTTP 接口重試實(shí)現(xiàn)方式,包括手寫循環(huán)重試、使用SpringRetry、Feign+Resilience4j、GuavaRetryer和MQ延遲重試,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • SpringBoot+Email發(fā)送郵件的實(shí)現(xiàn)示例

    SpringBoot+Email發(fā)送郵件的實(shí)現(xiàn)示例

    Spring?Boot提供了簡(jiǎn)單而強(qiáng)大的郵件發(fā)送功能,本文主要介紹了SpringBoot+Email發(fā)送郵件的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 詳解SpringBoot配置文件啟動(dòng)時(shí)動(dòng)態(tài)配置參數(shù)方法

    詳解SpringBoot配置文件啟動(dòng)時(shí)動(dòng)態(tài)配置參數(shù)方法

    這篇文章主要介紹了詳解SpringBoot配置文件啟動(dòng)時(shí)動(dòng)態(tài)配置參數(shù)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

清河县| 顺义区| 阿荣旗| 桑植县| 峨山| 沿河| 新闻| 新河县| 大宁县| 靖州| 东丽区| 汉沽区| 黔西县| 贵定县| 象州县| 大理市| 炉霍县| 芦山县| 汉沽区| 惠来县| 临颍县| 沧源| 拜城县| 滕州市| 依兰县| 三穗县| 廉江市| 额济纳旗| 乌拉特前旗| 庆云县| 克什克腾旗| 山东| 赤壁市| 甘南县| 南漳县| 静海县| 辉县市| 北海市| 布尔津县| 龙里县| 澎湖县|