java中switch條件語句的三種語法、用法及支持的參數(shù)類型
一、switch的應(yīng)用場(chǎng)景
在分支結(jié)構(gòu)中,我們除了使用if-else或者是if-else if之外,當(dāng)分支量過大的時(shí)候,我們即可選擇使用switch語句進(jìn)行選擇

二、switch三種語法
Java中switch的三種用法詳解:
- switch 標(biāo)準(zhǔn)方式
- switch - > 用法
- switch yield 用法
2.1、switch 標(biāo)準(zhǔn)方式
語法:
switch (表達(dá)式) {
case 值1:
// 執(zhí)行語句塊1
break;
case 值2:
// 執(zhí)行語句塊2
break;
...
case 值N:
// 執(zhí)行語句塊N
break;
default:
// 如果以上所有case都不匹配,執(zhí)行默認(rèn)語句塊
}
case語句中指定的每個(gè)值必須具有與表達(dá)式兼容的類型。switch語句的執(zhí)行順序是,首先計(jì)算表達(dá)式的值,然后將該值與每個(gè)case的值進(jìn)行比較,如果找到匹配的case,則執(zhí)行該case下的語句,直到遇到break語句或switch語句結(jié)束。如果沒有找到匹配的case,且存在default子句,則執(zhí)行default子句中的語句。如果沒有匹配的case且沒有default子句,程序?qū)⒉粓?zhí)行任何操作。
注意:若表達(dá)式的值與case后面的值匹配則會(huì)執(zhí)行該case下的語句,但是若該case下沒有break,則會(huì)一直往下執(zhí)行,直到遇到break語句或switch語句結(jié)束
注意
1.表達(dá)式支持的參數(shù)類型:JDK1.0-1.4 數(shù)據(jù)類型接受 byte、short、int、char
JDK1.5 數(shù)據(jù)類型接受 byte、short、int、char、enum(枚舉)、(包裝類型Character、Byte、Short、Integer)
JDK1.7 數(shù)據(jù)類型接受 byte、short、int、char、enum(枚舉)、包裝類型、String 六種類型
(1)對(duì)四個(gè)包裝類的支持是因?yàn)閖ava編譯器在底層手動(dòng)進(jìn)行拆箱。
(2)而對(duì)枚舉類的支持是因?yàn)槊杜e類有一個(gè)ordinal方法,該方法實(shí)際上是一個(gè)int類型的數(shù)值。
(3)jdk1.7開始支持String類型,但實(shí)際上String類型有一個(gè)hashCode算法,結(jié)果也是int類型。
(4)而byte short char類型可以在不損失精度的情況下向上轉(zhuǎn)型成int類型.所以總的來說,可以認(rèn)為switch中只支持int類型。
float、double都不能用于switch語句。
2.default 子句是可選的,當(dāng)沒有匹配的 case 時(shí),執(zhí)行default3.break語句用來在執(zhí)行完一個(gè) case 分支后使程序跳出 switch 語句塊;如果沒有寫 break,程序會(huì)順序執(zhí)行到 switch 結(jié)尾,除非遇到break。
2.2、switch - > 用法
jdk12開始switch語法支持函數(shù)式接口和lambda表達(dá)式
使用switch標(biāo)準(zhǔn)方式編寫代碼太多的break造成代碼冗余可讀性不高 可以借助函數(shù)式接口和lambda表達(dá)式簡(jiǎn)化書寫
代碼如下:
switch (表達(dá)式) {
case 值1 -> 執(zhí)行語句塊1;
case 值2 -> 執(zhí)行語句塊2;
......
case 值N -> 執(zhí)行語句塊N;
default:
// 如果以上所有case都不匹配,執(zhí)行默認(rèn)語句塊
}
使用 - > 方法更加簡(jiǎn)單, ->的用法其實(shí)只是相當(dāng)于不用輸入break就可以跳出判斷, 保證其只有一條分支可走.
示例:
int dayOfWeek = 2;
switch (dayOfWeek) {
case 1 -> System.out.println("星期一");
case 2 -> System.out.println("星期二");
case 3 -> System.out.println("星期三");
case 4 -> System.out.println("星期四");
case 5 -> System.out.println("星期五");
case 6 -> System.out.println("星期六");
default -> System.out.println("星期日");
}
輸出結(jié)果為:
星期二
jdk12之后還可以多條件合并
int dayOfWeek = 2;
switch (dayOfWeek) {
case 1,2,3,4,5 -> System.out.println("工作日");
default -> System.out.println("其他");
}
2.2、switch yield 用法
jdk14新特性,增加了yield用法
int numLetters = switch(seasonName){
case "Spring" ->{
System.out.println("spring time");
yield 6;
}
case "Summer","Winter" -> 6; //可以使用yield關(guān)鍵字,也可以省略
case "Fall" -> 4;
default -> -1;
};
這里來說, switch 作為了 一條語句, 所以末尾要加冒號(hào), 其他用法相同
示例:
int dayOfWeek = 2;
String weekday = switch (dayOfWeek) {
case 1:
yield "星期一";
case 2:
yield "星期二";
case 3:
yield "星期三";
case 4:
yield "星期四";
case 5:
yield "星期五";
case 6:
yield "星期六";
default:
yield "星期日";
};
System.out.println(weekday);
三、什么是case穿透?
在java的switch非簡(jiǎn)化語句中,當(dāng)匹配到的case中沒加break;的時(shí)候,那就會(huì)執(zhí)行當(dāng)前case里面的語句,以及這個(gè)switch語句中當(dāng)前case下面的所有case中或者是default中的語句。直到遇到break;為止
以下是有關(guān)case穿透的實(shí)驗(yàn)代碼:
public static void main(String[] args) {
String date = "周二";
switch(date){
case "周一":
System.out.println("周一");
case "周二":
System.out.println("周二");
case "周三":
System.out.println("周三");
default:
System.out.println("其他");
}
}
輸出周二、周三、其他
四、示例
4.1、標(biāo)準(zhǔn)示例
public static void main(String[] args) {
String date = "周一";
switch(date){
case "周一":
System.out.println("工作日");
break;
case "周二":
System.out.println("工作日");
break;
case "周三":
System.out.println("工作日");
break;
default:
System.out.println("其他");
break;
}
}
4.2、錯(cuò)誤示例
由于switch語句中整體都沒加break, 所以語句會(huì)在遇到第一個(gè)符合的case開始執(zhí)行,直到遇到break或switch語句結(jié)束
public static void main(String[] args) {
String date = "周二";
switch(date){
case "周一":
System.out.println("周一");
case "周二":
System.out.println("周二");
case "周三":
System.out.println("周三");
default:
System.out.println("其他");
}
}
輸出周二、周三、其他

4.3、引申用法(多條件合并)
上面寫的案例感覺很多邏輯重復(fù)的,能否多個(gè)條件合并在一起呢?當(dāng)然是可以的
方式一:
public static void main(String[] args) {
String date = "周一";
switch(date){
case "周一":
case "周二":
case "周三":
System.out.println("工作日");
break;
default:
System.out.println("其他");
break;
}
}
由于case "周一"后面沒有跟break;所以會(huì)一直走下去,直到遇到break。因此可以利用這種方式實(shí)現(xiàn)少些代碼。
方式二:java14引入
注意:此種方式需要jdk版本是jdk14及以上
public static void main(String[] args) {
String date = "周一";
switch(date){
case "周一","周二","周三":
System.out.println("工作日");
break;
default:
System.out.println("其他");
break;
}
}總結(jié)
到此這篇關(guān)于java中switch條件語句的三種語法、用法及支持的參數(shù)類型的文章就介紹到這了,更多相關(guān)java switch條件語句用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring AOP的底層實(shí)現(xiàn)方式-代理模式
這篇文章主要介紹了Spring AOP的底層實(shí)現(xiàn)方式-代理模式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
springMVC?@RestControllerAdvice注解使用方式
這篇文章主要介紹了springMVC?@RestControllerAdvice注解使用方式,下面通過一個(gè)簡(jiǎn)單的示例,演示如何使用?@RestControllerAdvice,感興趣的朋友跟隨小編一起看看吧2024-08-08
idea環(huán)境下Maven無法正常下載pom中配置的包問題
這篇文章主要介紹了idea環(huán)境下Maven無法正常下載pom中配置的包的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
說說字符串轉(zhuǎn) OffSetDateTime 你真的會(huì)用嗎
這篇文章主要介紹了字符串轉(zhuǎn) OffSetDateTime 你真的會(huì)用嗎?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
java8 LocalDate LocalDateTime等時(shí)間類用法實(shí)例分析
這篇文章主要介紹了java8 LocalDate LocalDateTime等時(shí)間類用法,結(jié)合具體實(shí)例形式分析了LocalDate、LocalTime、LocalDateTime等日期時(shí)間相關(guān)類的功能與具體使用技巧,需要的朋友可以參考下2017-04-04

