1. 程式人生 > 實用技巧 >Java流程控制05:Switch選擇結構

Java流程控制05:Switch選擇結構

switch語法:
swicth(expression){
    case value://匹配條件1
    break;//    結束語句(可選)
    case value://匹配條件2
    break;//    結束語句(可選)
    case value://匹配條件3
    break;//    結束語句(可選)
    case value://匹配條件4
    break;//     結束語句(可選)
    defaule://當以上匹配條件都不符合是  則走這個(可選)
    
}
--------------------------------------------------------
switch(expression){
    case value:
        //語句
        break; //可選
    case value:
        //語句
        break; //可選
    //你可以有人以數量的case語句
    default: //可選
        //語句
}
格式的解釋:
  • switch:表示這是選擇結構
  • 表示式:取值有限定
    byte short int char
  • ​ JDK5之後加入列舉
    ​ JDK7之後加入String(字串)
  • case:後面跟的是要和表示式進行比較的值
  • break:表示中斷結束的意思,控制switch語句的結束
  • default:當所有的值和表示式都不匹配時候執行。
執行流程:

1-首先得出表示式的值
2-然後個case的值進行匹配,如果有值與之對應,則執行該語句,執行過程中遇到break就結束。
3-當所有的表示式結果和所有值都沒有匹配成功,則執行default語句,然後結束程式。

面試題:

byte可以作為switch的表示式麼?(可以)
long可以作為switch的表示式麼?(不可以)
String可以作為switch的表示式麼?(JDK7後可以)

注意事項:
  • break可以省略,但是得到結果可能有變化,因為省略break程式中斷取消(case穿透),程式會向下執行,除特殊情況建議不要省略。
  • 多個case後面的常量不允許相同。 例如 列出了兩個case:1是不允許的。
  • default可以省略但是不建議省略,用來對錯誤資料處理
  • default可以放在任意位置,但是預設在最後。
  • switch的結束的條件
    遇到break或程式執行到最後。
switch程式碼示例:
package com.wenjian.struct;

public class SwitchDemo01 {
    public static void main(String[] args) {
        //case 穿透
        char grade = 'C';
        switch (grade) {
            case 'A':
                System.out.println("優秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("普通");
                break;
            case 'D':
                System.out.println("再接再厲");
                break;
            case 'E':
                System.out.println("掛科");
                break;
            default:
                System.out.println("未知成績");
        }
    }
}


package com.wenjian.struct;

public class SwitchDemo02 {
    public static void main(String[] args) {
        String name = "qwe";
        //JDK7的新特性,表示式結架可以是字元事!!
        // 字元的本質還是數字
        //反編譯 java---class(字背碼檔案)——-反編譯(IDEA)

        switch (name) {
            case "qwe":
                System.out.println("qwe");
                break;
            case "asd":
                System.out.println("asd");
                break;
            default:
                System.out.println("zxc");
        }

    }
}

反編譯:

本地資料夾目錄:

反編譯需要從專案結構檢視目(class檔案)

從project檢視class輸出檔案:

然後通過複製貼上進行拷貝到idea目錄,

(直接通過idea介面進行貼上會提示:)

反編譯檔案:

從Java SE7開始
switch 支援字串 String型別了

java檔案和反編譯檔案示例:
.java檔案:
package com.wenjian.struct;

public class SwitchDemo02 {
    public static void main(String[] args) {
        String name = "qwe";
        //JDK7的新特性,表示式結架可以是字元事!!
        // 字元的本質還是數字
        //反編譯 java---class(字背碼檔案)——-反編譯(IDEA)

        switch (name) {
            case "qwe":
                System.out.println("qwe");
                break;
            case "asd":
                System.out.println("asd");
                break;
            default:
                System.out.println("zxc");
        }

    }
}



反編譯.class 檔案,bytecode version:52.0(Java 8):
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.wenjian.struct;

public class SwitchDemo02 {
    public SwitchDemo02() {
    }

    public static void main(String[] args) {
        String name = "qwe";
        byte var3 = -1;
        switch(name.hashCode()) {
        case 96882:
            if (name.equals("asd")) {
                var3 = 1;
            }
            break;
        case 112383:
            if (name.equals("qwe")) {
                var3 = 0;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("qwe");
            break;
        case 1:
            System.out.println("asd");
            break;
        default:
            System.out.println("zxc");
        }

    }
}