Java流程控制05:Switch選擇結構
阿新 • • 發佈:2020-07-16
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");
}
}
}