記得第一次學switch的時候那是還是學習c語言的時候,整體的寫if-else,switch,現在回想起來已經是很多年前的事了,好了今天讓我們再來回顧下簡單的switch
文法
switch(n)
{
case 1:
執行代碼塊 1
break;
case 2:
執行代碼塊 2
break;
default:
n 與 case 1 和 case 2 不同時執行的代碼
}
格式解釋說明
switch表達式:可以是byte,short,int,char
JDK5以後可以是枚舉
JDK7以後可以是字元串
case:後面的值就是要和表達式進行比較的值
break:表示程式到這裡中斷,跳出switch語句
default:如果所有的情況都不比對,就執行這裡,相當于if語句中的else
工作原理
A:首先設定表達式 n(通常是一個變量)
B:随後表達式的值會與結構中的每個 case 的值做比較,如果有就執行對應的語句體,看到break就結束。
C:如果沒有比對,就執行default的語句體。
注意事項
A:case後面隻能是常量,不能是變量,而且,多個case後面的值不能出現相同的值
B:default可以省略嗎?
可以省略,但是不建議,因為它的作用是對不正确的情況給出提示。
C:break可以省略嗎?
可以省略,但是結果可能不是我們想要的。
會出現一個現象:case穿透,最終我們建議不要省略
D:default一定要在最後嗎?
不是,可以在任意位置。但是建議在最後。
E:switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
Case案例示範
public static void main(String[] args)
{
case1();
System.out.println("----------case1------------");
case2();
System.out.println("----------case2------------");
case3();
System.out.println("----------case3------------");
case4();
System.out.println("----------case4------------");
case4_0();
System.out.println("----------case4_0------------");
case4_1();
System.out.println("----------case4_1------------");
case5();
System.out.println("-----------case5-----------");
case6();
System.out.println("-----------case6-----------");
}
private static void case1()
{
switch(NUMBER){
case 9:
System.out.println(9);
break;
case 10:
System.out.println(10);
break;
case 11:
System.out.println(11);
break;
default:
System.out.println("都不比對");
}
}
private static void case2()
{
switch(NUMBER){
case 9:
System.out.println(9);
case 10:
System.out.println(10);
case 11:
System.out.println(11);
default:
System.out.println("都不比對");
}
}
private static void case3()
{
switch(NUMBER){
default:
System.out.println("都不比對");
break; //break有無不影響結果
case 9:
System.out.println(9);
break;
case 10:
System.out.println(10);
break;
case 11:
System.out.println(11);
break;
}
}
private static void case4()
{
switch(NUMBER){
default:
System.out.println("都不比對");
case 9:
System.out.println(9);
case 12:
System.out.println(12);
case 11:
System.out.println(11);
}
}
private static void case4_0()
{
switch(NUMBER){
default:
System.out.println("都不比對");
break; //和case4 比較 是有差別的
case 9:
System.out.println(9);
case 12:
System.out.println(12);
case 11:
System.out.println(11);
}
}
private static void case4_1()
{
switch(NUMBER){
default:
System.out.println("都不比對");
case 9:
System.out.println(9);
case 10:
System.out.println(10);
case 11:
System.out.println(11);
}
}
private static void case5()
{
switch(NUMBER){
default:
System.out.println("都不比對");
case 9:
System.out.println(9);
break;
case 12:
System.out.println(12);
break;
case 11:
System.out.println(11);
break;
}
}
private static void case6()
{
switch(NUMBER){
default:
System.out.println("都不比對");
break; //case5 比較 是有差別的
case 9:
System.out.println(9);
break;
case 12:
System.out.println(12);
break;
case 11:
System.out.println(11);
break;
}
}
執行結果
10
----------case1------------
10
11
都不比對
----------case2------------
10
----------case3------------
都不比對
9
12
11
----------case4------------
都不比對
----------case4_0------------
10
11
----------case4_1------------
都不比對
9
-----------case5-----------
都不比對
-----------case6-----------
總結:
case穿透和break有關,隻有當遇到break時才會終止,不然會繼續執行後面case中的代碼塊
default的位置不會影響執行結果,不管你編寫的代碼中default放在那裡,這裡的條件判斷都是先按順序比較其他非default值,當這些條件都不滿足的時候,才跳轉到default的相應代碼處執行。
開開心心編碼,快快樂樂生活。