首先讓我們先來(lái)了解下switch語(yǔ)句的執(zhí)行邏輯吧!
1.執(zhí)行邏輯
我們可以結(jié)合下圖來(lái)理解switch語(yǔ)句的執(zhí)行邏輯。switch的執(zhí)行邏輯,其實(shí)就相當(dāng)于是把多種情況分別列出,根據(jù)我們輸入的值來(lái)判斷符合哪種情況。符合哪個(gè)情況,就進(jìn)入到對(duì)應(yīng)的分支里面去執(zhí)行,整體的執(zhí)行邏輯就是這樣的,如下圖所示:
2.基本語(yǔ)法
在使用switch之前,首先我們得記住它的基本語(yǔ)法結(jié)構(gòu),其基本語(yǔ)法格式如下:
switch(值){
case 值1:
//switch中的值與值1相等時(shí)執(zhí)行的代碼
break; //可選
case 值2:
//switch中的值與值2相等時(shí)執(zhí)行的代碼
break; //可選
case 值3:
//switch中的值與值3相等時(shí)執(zhí)行的代碼
break; //可選
case 值4:
//switch中的值與值4相等時(shí)執(zhí)行的代碼
break; //可選
default:
//switch中的值與以上所有值都不相等時(shí)執(zhí)行的代碼
break; //可選
}
3.switch語(yǔ)句中的case和default
經(jīng)常碰到有朋友問(wèn)這樣的問(wèn)題:switch語(yǔ)句的case和default有順序嗎?接下來(lái)就帶大家解決下這個(gè)問(wèn)題:
在java中,switch語(yǔ)句中的case和default是由順序的,但是這個(gè)順序并不會(huì)影響程序執(zhí)行。
在switch語(yǔ)句中,當(dāng)表達(dá)式的值和某個(gè)case的值相等的時(shí)候,該case語(yǔ)句及其后面的語(yǔ)句都會(huì)被執(zhí)行,只到遇到break語(yǔ)句或者switch語(yǔ)句的末尾為止,如果所有的case語(yǔ)句都不匹配,那么就會(huì)執(zhí)行default語(yǔ)句了。
案例分析:
int day = 4;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
default:
System.out.println("Weekend");
break;
}
在這個(gè)例子中,當(dāng)變量 day 的值為 4 時(shí),程序會(huì)輸出 "Thursday",因?yàn)樗ヅ淞说谒膫€(gè) case 語(yǔ)句。
注意,如果沒(méi)有 break 語(yǔ)句,程序會(huì)繼續(xù)執(zhí)行下一個(gè) case 語(yǔ)句或者 default 語(yǔ)句,直到遇到 break 為止。這種情況下,多個(gè) case 語(yǔ)句可以共享同一個(gè)代碼塊,如下面的例子所示:
int day = 4;
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("Weekday");
break;
default:
System.out.println("Weekend");
break;
}
在這個(gè)例子中,如果變量 day 的值為 1、2、3、4 或 5,程序都會(huì)輸出 "Weekday"。
4.switch分支語(yǔ)句的使用
Switch分支語(yǔ)句是一種常見(jiàn)的控制語(yǔ)句,用于根據(jù)變量的值選擇執(zhí)行不同的代碼塊。下面是一個(gè)案例,我們來(lái)演示下如何使用Switch分支語(yǔ)句:
public class SwitchExample {
public static void main(String[] args) {
int day = 4;
String dayString;
// 使用Switch語(yǔ)句判斷星期幾
switch (day) {
case 1:
dayString = "星期一";
break;
case 2:
dayString = "星期二";
break;
case 3:
dayString = "星期三";
break;
case 4:
dayString = "星期四";
break;
case 5:
dayString = "星期五";
break;
case 6:
dayString = "星期六";
break;
case 7:
dayString = "星期日";
break;
default:
dayString = "無(wú)效的天數(shù)";
break;
}
System.out.println(dayString);
}
}
●在這個(gè)例子中,我們定義了一個(gè)整數(shù)變量 day,然后使用Switch語(yǔ)句根據(jù)該變量的值來(lái)選擇執(zhí)行不同的代碼塊。當(dāng)day的值為1時(shí),Switch語(yǔ)句執(zhí)行第一個(gè)case分支;當(dāng)day的值為2時(shí),Switch語(yǔ)句執(zhí)行第二個(gè)case分支,以此類推。如果day的值與任何一個(gè)case分支都不匹配,Switch語(yǔ)句將執(zhí)行default分支。在這個(gè)例子中,如果day的值不是1-7之間的整數(shù),Switch語(yǔ)句將執(zhí)行default分支,并將 dayString 設(shè)置為 "無(wú)效的天數(shù)"。
●最后,我們通過(guò) System.out.println() 方法打印出 dayString 的值,以便在控制臺(tái)上顯示星期幾。
5.Java中switch條件語(yǔ)句的用法
在 switch 語(yǔ)句中,如果在一個(gè) case 中缺少 break,則代碼將會(huì)繼續(xù)執(zhí)行下一個(gè) case 中的語(yǔ)句,直到遇到 break 語(yǔ)句或者 switch 語(yǔ)句結(jié)束為止。
例如下面這種情況
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
case 2:
System.out.println("Tuesday");
case 3:
System.out.println("Wednesday");
case 4:
System.out.println("Thursday");
case 5:
System.out.println("Friday");
case 6:
System.out.println("Saturday");
case 7:
System.out.println("Sunday");
}
在這個(gè)例子中,day的值為3,因此switch語(yǔ)句會(huì)執(zhí)行case 3語(yǔ)句塊中的代碼,即打印出"Wednesday"。然而,由于case 3語(yǔ)句塊沒(méi)有包含break語(yǔ)句,控制流程將繼續(xù)執(zhí)行下一個(gè)case語(yǔ)句塊,即case 4語(yǔ)句塊,打印出"Thursday"。隨后,控制流程將繼續(xù)執(zhí)行下一個(gè)case語(yǔ)句塊,直到遇到break語(yǔ)句或者switch語(yǔ)句結(jié)束。
因此,如果在switch語(yǔ)句中的case語(yǔ)句塊中忘記添加break語(yǔ)句,會(huì)導(dǎo)致意想不到的結(jié)果。這種錯(cuò)誤稱為“落入”錯(cuò)誤(fall-through error)。為了避免這種錯(cuò)誤,建議在每個(gè)case語(yǔ)句塊的末尾添加break語(yǔ)句。
以上幾點(diǎn)都是switch語(yǔ)句中的重點(diǎn)哦,大家一定要多多練習(xí),多多總結(jié)!