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

Java?switch?case語句的用法及常見問題

 更新時間:2025年04月25日 08:42:49   作者:小寶哥Code  
這篇文章主要介紹了Java?switch?case語句的用法及常見問題,Java中的switch語句是一種多分支選擇結(jié)構(gòu),用于替代多個if...elseif的情況,它根據(jù)某個變量的值,執(zhí)行匹配分支中的代碼塊,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

switch 語句是 Java 中一種多分支選擇結(jié)構(gòu),用于替代多個 if...else if 的情況。它根據(jù)某個變量的值,執(zhí)行匹配分支中的代碼塊。

1. 基本語法

switch (表達式) {
    case 值1:
        // 當(dāng)表達式的值等于 值1 時執(zhí)行的代碼
        break; // 可選,跳出 switch 語句
    case 值2:
        // 當(dāng)表達式的值等于 值2 時執(zhí)行的代碼
        break;
    ...
    default:
        // 當(dāng)所有 case 都不匹配時執(zhí)行的代碼
        break; // 可選
}
  • 表達式:可以是 byte、shortint、char、String 或枚舉類型(enum)。
  • case:每個分支的值必須是常量,且值類型必須與表達式的類型一致。
  • break:用于跳出 switch 語句。若省略 break,程序會繼續(xù)執(zhí)行下一個 case(稱為switch 穿透)。
  • default:可選,處理所有不匹配的情況,類似 else。

2. 示例代碼

2.1 簡單的 switch 示例

public class Main {
    public static void main(String[] args) {
        int day = 3;
        switch (day) {
            case 1:
                System.out.println("Monday");
                break;
            case 2:
                System.out.println("Tuesday");
                break;
            case 3:
                System.out.println("Wednesday");
                break;
            case 4:
                System.out.println("Thursday");
                break;
            case 5:
                System.out.println("Friday");
                break;
            default:
                System.out.println("Weekend");
        }
    }
}

輸出

Wednesday

2.2 使用 String 類型的 switch

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

public class Main {
    public static void main(String[] args) {
        String color = "Red";
        switch (color) {
            case "Red":
                System.out.println("Stop!");
                break;
            case "Yellow":
                System.out.println("Caution!");
                break;
            case "Green":
                System.out.println("Go!");
                break;
            default:
                System.out.println("Invalid color.");
        }
    }
}

輸出

Stop!

2.3 使用枚舉類型的 switch

switch 可以和 enum 類型結(jié)合使用,這在處理固定集合的值時非常有用。

public class Main {
    public enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        Day today = Day.FRIDAY;

        switch (today) {
            case MONDAY:
                System.out.println("Start of the week.");
                break;
            case FRIDAY:
                System.out.println("End of the work week.");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("It's the weekend!");
                break;
            default:
                System.out.println("Midweek day.");
        }
    }
}

輸出

End of the work week.

2.4 多個 case 合并

多個 case 分支可以合并處理,避免重復(fù)代碼。

public class Main {
    public static void main(String[] args) {
        int month = 7;

        switch (month) {
            case 12:
            case 1:
            case 2:
                System.out.println("Winter");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("Spring");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("Summer");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("Autumn");
                break;
            default:
                System.out.println("Invalid month");
        }
    }
}

輸出

Summer

3. switch 穿透現(xiàn)象

如果分支中沒有 break,程序會繼續(xù)執(zhí)行后續(xù)的分支代碼,直到遇到 break 或 switch 結(jié)束。

示例:演示穿透

public class Main {
    public static void main(String[] args) {
        int number = 2;

        switch (number) {
            case 1:
                System.out.println("One");
            case 2:
                System.out.println("Two");
            case 3:
                System.out.println("Three");
            default:
                System.out.println("Default");
        }
    }
}

輸出

Two
Three
Default

分析

  • number 等于 2,匹配到 case 2,執(zhí)行其代碼。
  • 因為沒有 break,繼續(xù)執(zhí)行 case 3 和 default

正確寫法:加入 break

public class Main {
    public static void main(String[] args) {
        int number = 2;

        switch (number) {
            case 1:
                System.out.println("One");
                break;
            case 2:
                System.out.println("Two");
                break;
            case 3:
                System.out.println("Three");
                break;
            default:
                System.out.println("Default");
        }
    }
}

輸出

Two

4. switch 的進階用法

4.1 switch 表達式(Java 12+)

從 Java 12 開始,switch 可以作為表達式使用,返回一個值。

語法

int result = switch (表達式) {
    case 值1 -> 值1的結(jié)果;
    case 值2 -> 值2的結(jié)果;
    default -> 默認(rèn)結(jié)果;
};

示例:返回值

public class Main {
    public static void main(String[] args) {
        int day = 5;
        String result = switch (day) {
            case 1 -> "Monday";
            case 2 -> "Tuesday";
            case 3 -> "Wednesday";
            case 4 -> "Thursday";
            case 5 -> "Friday";
            case 6, 7 -> "Weekend";
            default -> "Invalid day";
        };
        System.out.println(result);
    }
}

輸出

Friday

好處:

  • 簡化語法,不需要 break。
  • 減少冗余代碼。

4.2 多行代碼塊(Java 13+)

在 Java 13 中,switch 表達式支持多行代碼塊。

示例:多行代碼塊

public class Main {
    public static void main(String[] args) {
        int day = 5;

        String result = switch (day) {
            case 1 -> "Monday";
            case 2 -> "Tuesday";
            case 5 -> {
                System.out.println("More logic for Friday...");
                yield "Friday"; // 使用 yield 返回值
            }
            default -> "Invalid day";
        };
        System.out.println(result);
    }
}

輸出

More logic for Friday...
Friday

5. 常見問題與注意事項

5.1 忘記 break

  • switch 分支中忘記添加 break 會導(dǎo)致穿透現(xiàn)象。
  • 如果不需要穿透,務(wù)必在每個 case 分支后添加 break

5.2 default 的位置

  • default 可以出現(xiàn)在 switch 的任何位置,但通常寫在最后,增強可讀性。

5.3 表達式類型的限制

  • switch 表達式的類型必須是以下之一:
    • byteshortintchar(以及它們的包裝類)
    • String
    • 枚舉類型(enum

5.4 處理 NullPointerException

如果 switch 表達式為 null 且類型為 String,會拋出 NullPointerException。

錯誤示例

public class Main {
    public static void main(String[] args) {
        String color = null;

        switch (color) { // 會拋出 NullPointerException
            case "Red":
                System.out.println("Stop");
                break;
            default:
                System.out.println("Invalid color");
        }
    }
}

解決方法

在使用 switch 之前,先檢查是否為 null。

if (color == null) {
    System.out.println("Invalid color");
} else {
    switch (color) {
        case "Red":
            System.out.println("Stop");
            break;
        default:
            System.out.println("Invalid color");
    }
}

6. 總結(jié)

特性描述
switch 支持的數(shù)據(jù)類型byteshortintcharString, 枚舉類型(enum)等。
break 和 defaultbreak 用于防止穿透,default 用于處理所有不匹配的情況。
switch 表達式(Java 12+)簡化語法,直接返回值,無需 break,更清晰且簡潔。
多行代碼塊(Java 13+)使用 yield 返回值,支持多行邏輯處理。
適用場景多值匹配、值相等判斷(如菜單選項、枚舉狀態(tài)、字符串匹配等)。

通過合理使用 switch 語句,可以讓代碼邏輯更清晰、更高效,尤其是在處理多分支選擇時,是一種非常直觀的解決方案!

我們已經(jīng)詳細探討了 Java 中 switch case 語句的基礎(chǔ)知識、進階用法和優(yōu)化技巧。在接下來的部分,我們將進一步探討 switch 的高級特性、性能優(yōu)化、常見問題的解決方案 以及 實踐中的應(yīng)用場景,幫助你更全面地掌握 switch 語句并在實際開發(fā)中高效使用。

7. switch 的高級特性

7.1 switch 和多值匹配

從 Java 12 開始,switch 表達式支持多值匹配,這大大簡化了多個 case 之間的邏輯。

示例:多個 case 匹配相同邏輯

public class Main {
    public static void main(String[] args) {
        int day = 6;

        String result = switch (day) {
            case 1, 2, 3, 4, 5 -> "Weekday";
            case 6, 7 -> "Weekend";
            default -> "Invalid day";
        };

        System.out.println(result);
    }
}

輸出

Weekend

好處

  • 使用逗號分隔多個 case 值,減少代碼冗余。
  • 更清晰地表達多個值對應(yīng)相同邏輯的意圖。

7.2 yield 的使用

在 Java 13 中,switch 表達式引入了 yield 關(guān)鍵字,用于返回計算結(jié)果。它可以支持多行的邏輯處理,并返回一個值。

多行邏輯的 yield 示例

public class Main {
    public static void main(String[] args) {
        int number = 2;

        String result = switch (number) {
            case 1 -> "One";
            case 2 -> {
                System.out.println("Processing case 2...");
                yield "Two"; // 返回值
            }
            case 3 -> "Three";
            default -> "Unknown";
        };

        System.out.println("Result: " + result);
    }
}

輸出

Processing case 2...
Result: Two

分析

  • yield 替代了 return,用于 switch 表達式中返回值。
  • 支持多行代碼邏輯,增強了可讀性和靈活性。

7.3 switch 的嵌套

在一些復(fù)雜場景中,可以使用嵌套的 switch 語句來處理多層邏輯。

示例:嵌套 switch 實現(xiàn)多條件判斷

public class Main {
    public static void main(String[] args) {
        String role = "Manager";
        String department = "HR";

        switch (role) {
            case "Manager":
                switch (department) {
                    case "HR":
                        System.out.println("HR Manager");
                        break;
                    case "IT":
                        System.out.println("IT Manager");
                        break;
                    default:
                        System.out.println("General Manager");
                }
                break;
            case "Employee":
                System.out.println("Employee");
                break;
            default:
                System.out.println("Unknown role");
        }
    }
}

輸出

HR Manager

7.4 使用 switch 處理復(fù)雜邏輯

switch 常用于處理預(yù)定義的條件、菜單選項、狀態(tài)處理等場景。結(jié)合方法和枚舉,可以進一步提高可讀性和靈活性。

示例:結(jié)合枚舉和方法處理狀態(tài)

public class Main {
    public enum OrderStatus {
        PENDING, PROCESSING, COMPLETED, CANCELED
    }

    public static void main(String[] args) {
        OrderStatus status = OrderStatus.PROCESSING;

        String message = processOrderStatus(status);
        System.out.println(message);
    }

    public static String processOrderStatus(OrderStatus status) {
        return switch (status) {
            case PENDING -> "Your order is pending.";
            case PROCESSING -> "Your order is being processed.";
            case COMPLETED -> "Your order has been completed.";
            case CANCELED -> "Your order has been canceled.";
        };
    }
}

輸出

Your order is being processed.

8. 性能優(yōu)化與注意事項

8.1 switch 與 if...else 的性能對比

  • 性能
    • 對于少量條件,switch 和 if...else 性能相差不大。
    • 對于大量條件,switch 通常比 if...else 更高效,因為編譯器會優(yōu)化 switch 為跳轉(zhuǎn)表(jump table)或二分查找(binary search)。
  • 可讀性
    • switch 更適合處理固定值的分支選擇。
    • if...else 更適合處理復(fù)雜的布爾表達式或區(qū)間判斷。

示例:區(qū)間判斷更適合使用 if...else

public class Main {
    public static void main(String[] args) {
        int score = 85;

        if (score >= 90) {
            System.out.println("Grade: A");
        } else if (score >= 80) {
            System.out.println("Grade: B");
        } else if (score >= 70) {
            System.out.println("Grade: C");
        } else {
            System.out.println("Grade: F");
        }
    }
}

8.2 避免穿透現(xiàn)象(無意的 fall-through)

  • 未添加 break 會導(dǎo)致意外的穿透現(xiàn)象,執(zhí)行后續(xù)的 case 代碼。
  • 解決方法:確保每個 case 分支以 break 或 return 結(jié)束,或者使用 switch 表達式(Java 12+),該表達式默認(rèn)不會穿透。

8.3 default 的使用

  • 建議:始終提供 default 分支,即使你認(rèn)為所有可能的值都已涵蓋。
  • 作用:處理意外值,避免程序出現(xiàn)邏輯漏洞。

8.4 避免 null 值引發(fā)問題

  • switch 不支持直接匹配 null 值,若傳入 null,會拋出 NullPointerException。
  • 解決方案:在使用 switch 前先檢查是否為 null。

9. 實際開發(fā)中的應(yīng)用場景

9.1 菜單系統(tǒng)

示例:簡單菜單系統(tǒng)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Menu:");
        System.out.println("1. Start Game");
        System.out.println("2. Load Game");
        System.out.println("3. Exit");
        System.out.print("Enter your choice: ");

        int choice = scanner.nextInt();
        switch (choice) {
            case 1 -> System.out.println("Game Started!");
            case 2 -> System.out.println("Game Loaded!");
            case 3 -> System.out.println("Exiting...");
            default -> System.out.println("Invalid choice!");
        }
    }
}

9.2 狀態(tài)機

switch 非常適合實現(xiàn)狀態(tài)機,用于根據(jù)當(dāng)前狀態(tài)執(zhí)行不同的操作。

示例:簡單狀態(tài)機

public class Main {
    public enum Light {
        RED, YELLOW, GREEN
    }

    public static void main(String[] args) {
        Light current = Light.RED;

        switch (current) {
            case RED -> System.out.println("Stop!");
            case YELLOW -> System.out.println("Ready!");
            case GREEN -> System.out.println("Go!");
        }
    }
}

9.3 錯誤代碼處理

switch 可以用于根據(jù)錯誤代碼返回對應(yīng)的錯誤信息。

示例:根據(jù)錯誤代碼提示信息

public class Main {
    public static void main(String[] args) {
        int errorCode = 404;

        String message = switch (errorCode) {
            case 200 -> "OK";
            case 400 -> "Bad Request";
            case 404 -> "Not Found";
            case 500 -> "Internal Server Error";
            default -> "Unknown Error";
        };

        System.out.println("Error: " + message);
    }
}

10. 總結(jié)與建議

10.1 適用場景

場景推薦結(jié)構(gòu)
固定值的多分支選擇使用 switch
區(qū)間判斷或復(fù)雜布爾邏輯使用 if...else
需要返回值的選擇結(jié)構(gòu)使用 switch 表達式(Java 12+)

10.2 最佳實踐

  • 選擇合適的結(jié)構(gòu):對于固定值的分支,優(yōu)先使用 switch,尤其是枚舉和字符串匹配。
  • 避免穿透現(xiàn)象:確保每個 case 使用 break 或 return 結(jié)束。
  • 總是提供 default:處理意外情況,增強代碼的魯棒性。
  • 使用 switch 表達式:在 Java 12+ 中,推薦使用 switch 表達式簡化代碼邏輯。
  • 提前處理 null 值:避免因 null 引發(fā) NullPointerException。

通過合理使用 switch case 語句,不僅可以提升代碼的可讀性和效率,還能更好地應(yīng)對多條件分支的復(fù)雜場景!

總結(jié)

到此這篇關(guān)于Java switch case語句的用法及常見問題的文章就介紹到這了,更多相關(guān)Java switch case語句用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Callable實現(xiàn)多線程步驟詳解

    Callable實現(xiàn)多線程步驟詳解

    這篇文章主要介紹了Callable實現(xiàn)多線程步驟詳解,Callable是一個接口,用于實現(xiàn)多線程,與實現(xiàn)Runnable類似,但是功能更強大,該方法可以在任務(wù)結(jié)束后提供一個返回值,需要的朋友可以參考下
    2023-10-10
  • Java timezone設(shè)置和mybatis連接數(shù)據(jù)庫時區(qū)設(shè)置方式

    Java timezone設(shè)置和mybatis連接數(shù)據(jù)庫時區(qū)設(shè)置方式

    這篇文章主要介紹了Java timezone設(shè)置和mybatis連接數(shù)據(jù)庫時區(qū)設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring實現(xiàn)方式、隔離級別與傳播機制全攻略

    Spring實現(xiàn)方式、隔離級別與傳播機制全攻略

    本文介紹了Spring事務(wù)的基礎(chǔ)概念、實現(xiàn)方式、核心注解配置、隔離級別和傳播機制,并通過實際場景詳細解析了事務(wù)傳播機制的7種行為,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • IDEA插件之快速刪除Java代碼中的注釋

    IDEA插件之快速刪除Java代碼中的注釋

    這篇文章主要介紹了IDEA插件之快速刪除Java代碼中的注釋,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java 7大常見排序方法實例詳解

    Java 7大常見排序方法實例詳解

    這篇文章主要通過實例介紹了Java中常用的7種排序方法,需要的朋友可以參考下
    2017-04-04
  • Springboot中用 Netty 開啟UDP服務(wù)方式

    Springboot中用 Netty 開啟UDP服務(wù)方式

    這篇文章主要介紹了Springboot中用 Netty 開啟UDP服務(wù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 在Java中實現(xiàn)支持隨機訪問的固定窗口隊列的代碼示例

    在Java中實現(xiàn)支持隨機訪問的固定窗口隊列的代碼示例

    本文介紹了一種在Java中實現(xiàn)的自定義滑動隊列,利用了Google Guava庫中的EvictingQueue,這種滑動隊列允許以固定大小管理隊列,并能夠隨機訪問元素,我們將探討這種數(shù)據(jù)結(jié)構(gòu)的設(shè)計、實現(xiàn)和使用,需要的朋友可以參考下
    2025-10-10
  • dubbo服務(wù)注冊到nacos的過程剖析

    dubbo服務(wù)注冊到nacos的過程剖析

    這篇文章主要為大家介紹了dubbo服務(wù)注冊到nacos的過程剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職極限
    2022-02-02
  • java 替換docx文件中的字符串方法實現(xiàn)

    java 替換docx文件中的字符串方法實現(xiàn)

    這篇文章主要介紹了java 替換docx文件中的字符串方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java 模擬銀行自助終端系統(tǒng)

    Java 模擬銀行自助終端系統(tǒng)

    本系統(tǒng)模擬銀行用戶使用ATM機開戶、查詢、存款、取款功能,要求使用java語言編程實現(xiàn)。這篇文章主要介紹了Java 模擬銀行自助終端系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論

巴楚县| 民县| 集安市| 淮安市| 海原县| 乌兰县| 新平| 泰兴市| 保定市| 宁海县| 项城市| 勐海县| 神木县| 台州市| 沅江市| 苍溪县| 平南县| 华坪县| 佛冈县| 汕尾市| 新蔡县| 白沙| 高密市| 育儿| 宁都县| 连云港市| 阿拉尔市| 西峡县| 睢宁县| 蒙山县| 吴旗县| 临邑县| 大关县| 东宁县| 聂荣县| 库车县| 扎兰屯市| 泗阳县| 来安县| 得荣县| 建昌县|