通過示例學(xué)習(xí)Java編程(8):Java中的switch語(yǔ)句
作者:CHAITANYA SINGH
來(lái)源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19
當(dāng)我們?cè)诖a邏輯中有多個(gè)選項(xiàng),而且需要為每個(gè)選項(xiàng)執(zhí)行不同的任務(wù)時(shí),我們可以使用switch case語(yǔ)句。
switch case語(yǔ)句的語(yǔ)法看上去如下所示:
switch(變量或整數(shù)表達(dá)式)
{
?????case constant:
?????//Java?code
?????;
?????case constant:
?????//Java?code
?????;
?????default:
?????//Java?code
?????;
}
注:雖然在switch語(yǔ)句里面的case語(yǔ)句塊里面的break語(yǔ)句不是必須要有的,但switch case語(yǔ)句通常還都需要和break語(yǔ)句放在一起使用。我們下面先看一個(gè)case語(yǔ)句塊里面沒有break語(yǔ)句會(huì)發(fā)生什么的例子,然后我們?cè)龠M(jìn)一步討論如何將switch case和break合在一起使用。
一個(gè)簡(jiǎn)單的switch case實(shí)例
public class SwitchCaseExample1?{
???public static void main(String?args[]){
?????int num=2;
?????switch(num+2)
?????{
????????case1:
??????????System.out.println("Case1:?Value?is:?"+num);
????????case2:
??????????System.out.println("Case2:?Value?is:?"+num);
????????case3:
??????????System.out.println("Case3:?Value?is:?"+num);
????????default:
??????????System.out.println("Default:?Value?is:?"+num);
??????}
???}
}
輸出:
Default:?Value?is:?2
以上代碼講解:在switch后面的括號(hào)里面我放了一個(gè)表達(dá)式(num+2),你也可以只放一個(gè)變量,如switch(num)。我們看看switch后面的表達(dá)式:num+2,其中num值是2,表達(dá)式num+2的結(jié)果是4。由于在switch語(yǔ)句塊里面的case語(yǔ)句里面只有case 1、case 2、case 3,沒有case 4,所以程序就跳過了case 1到case 3的語(yǔ)句,直接執(zhí)行了最下面的default(默認(rèn))語(yǔ)句。上面這個(gè)例子說(shuō)明了在switch case語(yǔ)句中含有default語(yǔ)句的重要性,這樣可以確保萬(wàn)一所有的case語(yǔ)句沒有匹配到合適的,程序永遠(yuǎn)可以跳轉(zhuǎn)到default(默認(rèn))的代碼塊去執(zhí)行。
switch case流程圖
switch-case語(yǔ)句的流程邏輯是先評(píng)估在switch后面的括號(hào)里面的表達(dá)式,然后根據(jù)這個(gè)表達(dá)式算出的結(jié)果,看看下面的case關(guān)鍵字后面的字符串有沒有符合表達(dá)式的結(jié)果,如果有符合的,就跳到那個(gè)符合的case語(yǔ)句去執(zhí)行,如果一個(gè)都沒有匹配到,就跳到最下面的default語(yǔ)句去執(zhí)行。

switch-case里面的break語(yǔ)句
雖然在switch case的代碼塊里面每一個(gè)case里面的break語(yǔ)句不是強(qiáng)制要求的,但幾乎所有的switch case代碼塊里面都會(huì)有break語(yǔ)句。在我們討論break語(yǔ)句之前,先看看下面這個(gè)不用switch case里面的break語(yǔ)句:
在switch case語(yǔ)句里面的break語(yǔ)句雖然是可選項(xiàng),但實(shí)際上幾乎每次在寫switch case語(yǔ)句中都會(huì)用到它。在我們討論break語(yǔ)句之前,我們先看一個(gè)沒有用到break語(yǔ)句的switch case的例子:
public class SwitchCaseExample2?{
???public static void main(String?args[]){
??????int i=2;
??????switch(i)
??????{
?????????case1:
???????????System.out.println("Case1?");
?????????case2:
???????????System.out.println("Case2?");
?????????case3:
???????????System.out.println("Case3?");
?????????case4:
???????????System.out.println("Case4?");
?????????default:
???????????System.out.println("Default?");
??????}
???}
}
輸出:
Case2?
Case3?
Case4?
Default
注意:在上面這個(gè)例子里,我們把整數(shù)值2賦值給變量i,然后把變量i放到switch后面的括號(hào)里面,也就是把整數(shù)值2放到switch后面的括號(hào)里面,所以當(dāng)程序執(zhí)行到語(yǔ)句switch(i)的時(shí)候,程序會(huì)直接跳到case 2,直接執(zhí)行case 2下面的語(yǔ)句:System.out.println("Case");,在執(zhí)行完這個(gè)語(yǔ)句后,因?yàn)榻又恼Z(yǔ)句中沒有break語(yǔ)句,程序繼續(xù)執(zhí)行下面的語(yǔ)句,case 3、case 4和default后面的語(yǔ)句,所以在屏幕上會(huì)打印出Case2、Case3、Case4和Default四行字,表示這四個(gè)語(yǔ)句都執(zhí)行了。如果我們?cè)趫?zhí)行完case 2后面的語(yǔ)句后,不希望執(zhí)行case 3和case 4以及default后面的語(yǔ)句,我們可以在這些語(yǔ)句中加上break語(yǔ)句。
當(dāng)我們希望我們的邏輯流程跳出switch代碼塊時(shí),就可以用上break語(yǔ)句。每當(dāng)程序執(zhí)行到break語(yǔ)句時(shí),都會(huì)忽略后面的case語(yǔ)句,直接跳出switch后面的代碼塊。
我們?cè)倏匆粋€(gè)例子,這個(gè)例子和上面的例子差不多,只是多了break語(yǔ)句。
帶break語(yǔ)句的例子:
public class SwitchCaseExample2?{
???public static void main(String?args[]){
??????int i=2;
??????switch(i)
??????{
?????????case1:
???????????System.out.println("Case1?");
???????????break;
?????????case2:
???????????System.out.println("Case2?");
???????????break;
?????????case3:
???????????System.out.println("Case3?");
???????????break;
?????????case4:
???????????System.out.println("Case4?");
???????????break;
?????????default:
???????????System.out.println("Default?");
??????}
???}
}
輸出:
Case2
從這個(gè)輸出結(jié)果可以看出,程序只運(yùn)行了case 2后面的代碼(打印出文字“Case2”),其余的case 3、case 4和default后面的代碼都跳過了,沒有執(zhí)行。
為什么在default語(yǔ)句塊里面沒有用到break語(yǔ)句?
當(dāng)程序執(zhí)行到default語(yǔ)句塊后,程序本來(lái)就會(huì)跳出switch代碼塊,所以在這里加上break語(yǔ)句完全是畫蛇添足,沒有必要。
使用switch case語(yǔ)句要注意的幾個(gè)點(diǎn):
1)case后面的值不一定要是1、2、3之類的順序數(shù)值。如果case后面的數(shù)值是一個(gè)整數(shù),那么這個(gè)數(shù)值可以是任何整數(shù),而且也不一定要按照從小到大的順序排下來(lái)。
2)case后面的值也可以是字符或字符串,具體用法見下面的例子:
public class SwitchCaseExample2?{
???public static void main(String?args[]){
??????char ch='b';
??????switch(ch)
??????{
?????????case'd':
???????????System.out.println("Case1?");
???????????break;
?????????case'b':
???????????System.out.println("Case2?");
???????????break;
?????????case'x':
???????????System.out.println("Case3?");
???????????break;
?????????case'y':
???????????System.out.println("Case4?");
???????????break;
?????????default:
???????????System.out.println("Default?");
??????}
???}
}
3)如果在switch后面的括號(hào)里面是一個(gè)表達(dá)式,那么這個(gè)表達(dá)式的結(jié)果一定要是一個(gè)常量,例如:
有效的表達(dá)式:
switch(1+2+23)
switch(1*2+3%4)
無(wú)效的表達(dá)式:
switch(ab+cd)
switch(a+b+c)
4)在switch語(yǔ)句里面可以嵌入switch語(yǔ)句,但這種做法要盡量避免,因?yàn)檫@會(huì)讓程序看上去更復(fù)雜,更難讀懂。