Java中的switch語(yǔ)句——通過示例學(xué)習(xí)Java編程(8)

通過示例學(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ù)雜,更難讀懂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容