中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中switch語句的用法介紹

發布時間:2023-06-21 16:33:29 來源:億速云 閱讀:122 作者:栢白 欄目:開發技術

本篇文章和大家了解一下java中switch語句的用法介紹。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

一. switch分支結構

1. 簡介

switch結合case,能夠判斷一個變量或表達式與一系列值中的某個值是否相等,這里的每個值都被稱為一個分支。switch語句在執行時,會先進行值的匹配,匹配成功時會進入到對應case語句。再根據是否有 break語句,判斷是否繼續輸出,或是跳出當前switch判斷。

2. 基本語法

在使用switch之前,首先我們得記住它的基本語法結構,其基本語法格式如下:

switch(值){ 
    case 值1: 
        //switch中的值與值1相等時執行的代碼 
      break; //可選
    case 值2: 
        //switch中的值與值2相等時執行的代碼 
      break; //可選
    case 值3: 
        //switch中的值與值3相等時執行的代碼 
      break; //可選
    case 值4: 
        //switch中的值與值4相等時執行的代碼 
      break; //可選
    default: 
        //switch中的值與以上所有值都不相等時執行的代碼 
      break; //可選
}

那么這個語法具體有哪些要求呢?請繼續往下看。

3. 語法規則(重點)

根據上面介紹的switch語法結構,再給大家詳細說一下switch的語法規則和要求。

  • switch(值)語句中的”值“,支持的類型有如下幾類:


    • 整型:byte、short、int 、char及其對應的包裝類;

    • 枚舉類型,從JDK 5開始支持(后面會詳細講解枚舉類型);

    • String類型,從JDK 7開始支持,同時case標簽后的值必須是字符串常量或字面量。

  • switch后面可以有多個 case 語句,每個 case 后都要跟一個待比較的值和冒號。

  • case標簽后面值的數據類型必須與switch(值)中的數據類型相同,且只能是常量或者字面常量。

  • 當switch(值)的值與 case語句中的值相等時,case標簽后面的語句開始執行,遇到break標簽時停止執行switch語句。

  • case語句中不一定非要帶有break語句。如果case后沒有 break 語句,程序會繼續執行下一個case 語句,直到出現 break 語句,這種現象叫做”case穿透“。

  • switch語句中可以包含一個default默認分支,該分支一般是 switch 語句的最后一個分支,當switch的值和case語句的值不相等時執行。default 分支中不用帶有break 語句,另外該分支可以放在任何位置,但建議寫在最后面。

4. 執行邏輯

根據上面的語法規則,我們可以結合下圖來理解switch語句的執行邏輯。switch的執行邏輯,其實就相當于是把多種情況分別列出,根據我們輸入的值來判斷符合哪種情況。符合哪個情況,就進入到對應的分支里面去執行,整體的執行邏輯就是這樣的,如下圖所示:

java中switch語句的用法介紹

了解完這些理論內容之后,接下來就給大家設計幾個switch的案例,我們一起動手實操起來吧。

二. switch案例

1. 基本案例

案例需求:輸入一個序號,代表今天是星期幾,選擇今天要做的事情。

/**
 * @author 
 */
public class Demo01 {

    public static void main(String[] args) {
	// switch結構
	Scanner sc=new Scanner(System.in);
		
	//根據輸入的數字,選擇每天要做的事情
	System.out.println("請輸入日期序號,代表今天是星期幾");
	int day = sc.nextInt();
	switch (day) {
            case 0:
                System.out.println("星期天,休息休息");
                break;
	    case 1:
	    	System.out.println("星期一,開始搬磚");
	        break;
	    case 2:
	        System.out.println("星期二,搬磚好累");
	        break;
	    case 3:
	        System.out.println("星期三,離周末還有3天");
	        break;
	    case 4:
	        System.out.println("星期四,明天就是周五啦");
	        break;
	    case 5:
	        System.out.println("星期五,明天就是周六啦");
	        break;
	    case 6:
	        System.out.println("星期六,開心.....");
	        break;
	    default: 
	        System.out.println("希望天天都是周末...");
	        break;
    }
}

2. case穿透

在前面給大家講過,如果 case 語句中沒有 break 語句,當switch里的數值與case匹配成功后,會從當前 case 開始,把后續所有的 case 語句也都執行,這種現象叫做case穿透。一般情況下,我們要避免出現case穿透,防止一下執行多個語句。但有些時候,我們也可以利用這一特性,故意進行”穿透“。比如有幾種情況的處理策略一樣時,就可以通過”穿透“減少代碼的編寫。

接下來通過一個案例來給大家演示穿透現象。案例需求:選擇A,輸出”優秀“;選擇B:輸出”良好“;選擇C:輸出”一般“;選擇D、E等:輸出”很差“,其他情況則默認處理。不區分大小寫,即選擇A和a是一樣的結果。

/**
 * @author
 */
public class Demo01 {

    public static void main(String[] args) {
	// switch結構-case穿透
	Scanner sc=new Scanner(System.in);
        
	// 根據輸入的數字,選擇每天要做的事情
	System.out.println("請輸入成績等級");
	String level = sc.next();
	switch (level) {
            case "a":
            case "A":
                System.out.println("優秀");
                break;
            case "b":
            case "B":
                System.out.println("良好");
                break;
            case "c":
            case "C":
                System.out.println("一般");
                break;
            case "d"://故意case穿透
            case "D":
            case "E":
            case "F":
                System.out.println("很差");
                break;
            default:
                System.out.println("成績無效");
                break;
    }
}

三. switch新特性(了解)

1. 概述

我們知道,在使用switch時有可能會出現”case穿透“現象。如果你遺漏了break語句,有可能會造成嚴重的邏輯錯誤,而且這種錯誤還不太容易在源碼中發現。所以為了防止意外出現”case穿透“,從JDK 12開始,switch語句升級成了更簡單的表達式語法,使用了一種類似于模式匹配(Pattern Matching)的方式,確保只有一個路徑會被執行,而且不再需要我們手動添加break語句。

這一新特性,可以說簡化了不少無效代碼,還規避了一定的風險,簡直不要太贊哦。接下來就給大家設計幾個案例,說說JDK 12中switch的使用。因為當前的JDK版本是JDK 17,可以向下兼容JDK 12,所以我們不用單獨安裝JDK 12哦。

2. 代碼案例

2.1 ->符號

在JDK 12的switch語句中,支持使用 ->符號,當然也可以不使用->符號,繼續采用以前的寫法也沒問題。如果case后面只有一條語句,可以直接在->后面編寫該語句; 如果有多條語句,需要用 {} 括起來。另外在JDK 12的switch語句中,不用再寫 break 語句,新的語法只會執行匹配的語句,不會出現”穿透效應“。

/**
 * @author
 */
public class Demo01 {

    public static void main(String[] args) {
	// switch結構-case穿透
	System.out.println("請選擇你的國家");

	Scanner sc = new Scanner(System.in);
	String country = sc.next();
	switch (country) {
            case "中國" -> System.out.println("我是中國人,我自豪!");
            case "日本" -> System.out.println("鬼子腳盆雞");
            case "美國" -> {
                System.out.println("暫時還是老大");
                System.out.println("喜歡欺負人");
            }
            default -> System.out.println("未知國籍,黑戶");
	}
    }
}
2.2 switch中返回結果

在JDK 12中,我們可以把在 switch 語句中把產生的結果直接返回,不必再使用break語句進行結束。一般情況下,我們在switch表達式內部只會返回簡單的值。但如果你想要處理多個復雜的語句,其實也可以寫很多語句,這些代碼都要放到放到 {...} 里面,然后使用 yield關鍵字(以后細講) 進行返回。 配套案例如下:

/**
 * @author
 */
public class Demo01 {

    public static void main(String[] args) {
	// switch結構-case穿透
	System.out.println("請選擇你的國家");

	Scanner sc = new Scanner(System.in);
	String country = sc.next();

	// 注意:這里的返回值類型,可以是任意類型。我們后面在學習方法時再細說返回值的問題
	String result = switch (country) {
            case "中國" -> "我是中國人,我自豪!";
            case "日本" -> "鬼子腳盆雞";// 返回值只能有一個
            case "美國" -> {
                String str = "我們就喜歡以德服人";
                // 注意:這里需要返回一個變量!!!
                yield str;
            }
            default -> "未知國籍,黑戶";
	};// 注意:這里需要有個“;”,表示語句的結束

	System.out.println("你的國家情況:" + result);
    }
}

四. 結語

在本篇文章中,給大家介紹了switch分支結構,至此我們就把三大流程控制結構中的分支結構學習完畢了。結合前一篇文章中學習的if語句,給大家總結一下if與switch的異同點。

1. 相同點

  • if和switch都是Java里的分支選擇語句,它倆都屬于條件分支語句;

  • 很多時候,if和swich可以實現的效果類似。

2. 不同點

  • switch結構只能處理等值條件判斷的情況,且條件必須是整型、枚舉變量或字符型變量;

  • 多重if選擇結構沒有switch結構的諸多限制,特別適合某個變量處于某個連續區間時的情況;

  • if比switch應用范圍更廣、更靈活。if可以實現的條件判斷,switch不一定能夠實現;switch可以實現的條件判斷,if肯定可以實現。

  • if 在應用中更為常見,但switch的結構更清晰。

  • switch使用查找表比對的方式,使得case的條件必須是連續的常量,if語句則沒有這些限制。

  • 一般情況下,switch比if-else效率更高。 因為switch內部使用了Binary Tree算法,不管有多少個case,都只計算一次值,直接跳轉,不需逐個比較查詢,除非是if-else的第一個條件就為true。

  • switch的效率其實與分支數無關。只有當分支比較少時,if語句的效率才比switch高,因為switch有跳轉表。當分支較多時,推薦使用switch語句。

以上就是java中switch語句的用法介紹的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

重庆市| 浦东新区| 称多县| 探索| 新竹市| 北川| 兴业县| 兴安盟| 成安县| 高雄县| 留坝县| 庆安县| 乐山市| 青铜峡市| 栾川县| 天水市| 嵊州市| 湖北省| 兰州市| 格尔木市| 天气| 奇台县| 平安县| 青河县| 淮安市| 潜江市| 巴彦淖尔市| 龙里县| 高密市| 南岸区| 浠水县| 开封市| 武宣县| 通州市| 龙泉市| 绥芬河市| 玛多县| 榕江县| 汉川市| 灌阳县| 苍溪县|