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

Java switch語句的使用詳解

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

Java switch語句

一、基礎語法演進

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

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

二、核心特性

表達式限制

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

類型匹配規(guī)則

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

返回值支持 (Java 14+)

使用yield返回值的表達式形式:

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

三、關鍵機制

穿透控制

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

作用域隔離

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

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

四、典型應用場景

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

五、常見錯誤示例

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

六、最佳實踐

防御性編程

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("正整數");
}

性能優(yōu)化

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

七、代碼風格建議

  • 對齊case子句縮進
  • 復雜邏輯封裝為方法調用
  • case合并時垂直排列:
case JANUARY, MARCH, MAY, 
     JULY, AUGUST -> days = 31;

擴展思考

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

總結

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

相關文章

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

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

    這篇文章主要介紹了Java中的StackOverflowError錯誤,在本文中,我們仔細研究了StackOverflower錯誤,包括Java代碼如何導致它,以及我們如何診斷和修復它,需要的朋友可以參考下
    2022-07-07
  • Spring?MVC?URL地址映射的示例代碼

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

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

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

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

    Spring boot集成Go-FastDFS實現圖片上傳刪除等功能實現

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

    Java?NIO?Buffer實現原理詳解

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

    Springboot基于BCrypt非對稱加密字符串的實現

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

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

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

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

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

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

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

    Java中的程序計數器是什么

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

最新評論

乐陵市| 黄陵县| 安吉县| 泗阳县| 竹溪县| 拉萨市| 汉阴县| 红桥区| 民县| 麻江县| 哈巴河县| 缙云县| 昌图县| 门源| 玉田县| 库尔勒市| 昌都县| 大渡口区| 永嘉县| 外汇| 万州区| 天台县| 乐东| 宜宾市| 远安县| 太仆寺旗| 安龙县| 鄱阳县| 平舆县| 长春市| 剑川县| 永春县| 探索| 嘉善县| 通江县| 山西省| 浪卡子县| 台山市| 商南县| 宁夏| 六安市|