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

Java switch語句的使用詳解

 更新時間:2025年07月14日 08:57:04   作者:晚夜微雨問海棠呀  
Java switch語句隨JDK演進(jìn)支持int/char、String及模式匹配,具備表達(dá)式限制、穿透控制、作用域隔離等特性,適用于狀態(tài)機、命令解析等場景,需注意類型兼容性及break使用,推薦使用箭頭語法和編譯器優(yōu)化提升代碼質(zhì)量

Java switch語句

一、基礎(chǔ)語法演進(jìn)

// 傳統(tǒng)形式 (Java 1.0+)
switch (表達(dá)式) {
    case 常量1:
        語句;
        break; // 防止穿透
    case 常量2:
        語句;
        break;
    default:
        默認(rèn)處理;
}

// 增強模式 (Java 12+)
switch (表達(dá)式) {
    case 常量1 -> 語句; // 自動阻斷穿透
    case 常量2, 常量3 -> { // 多case合并
        復(fù)合語句;
    }
    default -> 默認(rèn)處理;
}

二、核心特性

表達(dá)式限制

  • JDK 1-6:僅支持int/char及包裝類、枚舉
  • JDK 7+:支持String類型(區(qū)分大小寫)
  • JDK 14+:支持模式匹配(預(yù)覽特性)

類型匹配規(guī)則

Object obj = "test";
switch (obj) {
    case Integer i -> System.out.println("整數(shù)");
    case String s -> System.out.println(s.length());
    default -> System.out.println("未知類型");
}

返回值支持 (Java 14+)

使用yield返回值的表達(dá)式形式:

int code = switch (day) {
    case MONDAY -> 1;
    case TUESDAY -> {
        System.out.println("周二");
        yield 2;
    }
    default -> 0;
};

三、關(guān)鍵機制

穿透控制

  • 傳統(tǒng)case需顯式break,否則執(zhí)行后續(xù)所有case
  • 箭頭語法(->)自動阻斷穿透,無需break

作用域隔離

每個case塊形成獨立作用域:

switch (x) {
    case 1 -> {
        String msg = "one"; // 僅在此塊有效
    }
    case 2 -> {
        String msg = "two"; // 允許同名變量
    }
}

四、典型應(yīng)用場景

場景示例
狀態(tài)機處理訂單狀態(tài)流轉(zhuǎn)判斷
命令解析CLI參數(shù)匹配執(zhí)行
類型分發(fā)處理多態(tài)替代方案

五、常見錯誤示例

錯誤類型錯誤代碼修正方案
缺失breakcase 1: doA(); case 2: doB();添加break或改用箭頭語法
重復(fù)case值case 10: case 10:確保case常量唯一
類型不兼容switch(3.14)轉(zhuǎn)換為支持的類型

六、最佳實踐

防御性編程

switch (status) {
    case SUCCESS -> handleSuccess();
    case FAILURE -> handleFailure();
    default -> throw new IllegalStateException(); // 強制覆蓋所有情況
}

模式匹配優(yōu)化 (Java 17+)

switch (obj) {
    case null -> System.out.println("空值");
    case String s when s.length()>5 -> System.out.println("長字符串");
    case Integer i && i > 0 -> System.out.println("正整數(shù)");
}

性能優(yōu)化

  • 超過5個分支時,優(yōu)先選擇switch而非if-else
  • 編譯器對switch生成跳轉(zhuǎn)表,時間復(fù)雜度O(1)

七、代碼風(fēng)格建議

  • 對齊case子句縮進(jìn)
  • 復(fù)雜邏輯封裝為方法調(diào)用
  • case合并時垂直排列:
case JANUARY, MARCH, MAY, 
     JULY, AUGUST -> days = 31;

擴(kuò)展思考

  • 對于大型狀態(tài)機,可結(jié)合枚舉類和switch實現(xiàn),或采用狀態(tài)模式提升可維護(hù)性。
  • 新版switch表達(dá)式通過編譯期類型檢查,顯著增強代碼健壯性。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的StackOverflowError錯誤問題及解決方法

    Java中的StackOverflowError錯誤問題及解決方法

    這篇文章主要介紹了Java中的StackOverflowError錯誤,在本文中,我們仔細(xì)研究了StackOverflower錯誤,包括Java代碼如何導(dǎo)致它,以及我們?nèi)绾卧\斷和修復(fù)它,需要的朋友可以參考下
    2022-07-07
  • Spring?MVC?URL地址映射的示例代碼

    Spring?MVC?URL地址映射的示例代碼

    @RequestMapping是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。,這篇文章主要介紹了Spring?MVC?URL地址映射,需要的朋友可以參考下
    2022-07-07
  • Java使用延時隊列搞定超時訂單處理的場景

    Java使用延時隊列搞定超時訂單處理的場景

    這篇文章主要介紹了Java使用延時隊列搞定超時訂單處理,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn)

    Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn)

    這篇文章主要介紹了Spring boot集成Go-FastDFS實現(xiàn)圖片上傳刪除等功能實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java?NIO?Buffer實現(xiàn)原理詳解

    Java?NIO?Buffer實現(xiàn)原理詳解

    本篇文章主要對NIO核心三件套:緩沖區(qū)(Buffer)、選擇器?(Selector)和通道(Channel),其中之一的緩沖區(qū)Buffer實現(xiàn)原理的學(xué)習(xí)總結(jié)。感興趣的小伙伴可以了解一下
    2021-11-11
  • Springboot基于BCrypt非對稱加密字符串的實現(xiàn)

    Springboot基于BCrypt非對稱加密字符串的實現(xiàn)

    本文主要介紹了Springboot基于BCrypt非對稱加密字符串的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java?Heap?Dump簡介及使用舉例

    Java?Heap?Dump簡介及使用舉例

    文章詳解了Java堆轉(zhuǎn)儲(HeapDump)的概念、核心內(nèi)容、生成方法及分析工具,強調(diào)其在診斷內(nèi)存泄漏、溢出中的關(guān)鍵作用,推薦使用JVM參數(shù)自動觸發(fā),并指出EclipseMAT為最強大分析工具,同時提醒注意性能影響和數(shù)據(jù)安全,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • java基于spring boot本地上傳圖片示例解析

    java基于spring boot本地上傳圖片示例解析

    這篇文章主要介紹了java基于spring boot本地上傳圖片示例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring Boot配置動態(tài)更新問題

    Spring Boot配置動態(tài)更新問題

    這篇文章主要介紹了Spring Boot配置動態(tài)更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java中的程序計數(shù)器是什么

    Java中的程序計數(shù)器是什么

    這篇文章主要介紹了Java中的程序計數(shù)器是什么,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09

最新評論

吉水县| 内黄县| 同心县| 客服| 朝阳市| 县级市| 乌兰浩特市| 武城县| 海口市| 彰化县| 托克逊县| 江门市| 手游| 桐柏县| 静海县| 疏附县| 梅州市| 巴林右旗| 瑞丽市| 郎溪县| 巴林左旗| 达州市| 怀来县| 永昌县| 德清县| 嘉黎县| 石门县| 二连浩特市| 崇州市| 达孜县| 乐陵市| 崇文区| 工布江达县| 天等县| 裕民县| 封丘县| 商河县| 铅山县| 灵山县| 长寿区| 屯门区|