Java7到Java17之Switch語句進(jìn)化史示例詳解
前言
自 Java 7 以來,java 中的 switch 語句經(jīng)歷了快速發(fā)展。因此,在本文中,我們將通過示例討論 switch 語句從 java 7 到 java 17 的演變或變化。
Java 7
在 Java 7 之前,switch case 中只能使用整數(shù),這個(gè)語法持續(xù)了很長的一段時(shí)間。
int value = 5;
switch (value) {
case 1:
System.out.println("One");
break;
case 5:
System.out.println("five");
break;
default:
System.out.println("Unknown");
}
Java 8
在 Java 8 中,switch語句中的case部分支持字符串和枚舉。
字符串case例子
String day = "Tuesday";
switch (day) {
case "Monday":
System.out.println("Week day");
break;
case "Tuesday":
System.out.println("Week day");
break;
case "Wednesday":
System.out.println("Week day");
break;
case "Thursday":
System.out.println("Week day");
break;
case "Friday":
System.out.println("Week day");
break;
case "Saturday":
System.out.println("Weekend");
break;
case "Sunday":
System.out.println("Weekend");
break;
default:
System.out.println("Unknown");
}
枚舉case例子
enum DAYS {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
DAYS days = DAYS.SUNDAY;
switch (days) {
case MONDAY:
System.out.println("Weekdays");
break;
case TUESDAY:
System.out.println("Weekdays");
break;
case WEDNESDAY:
System.out.println("Weekdays");
break;
case THURSDAY:
System.out.println("Weekdays");
break;
case FRIDAY:
System.out.println("Weekdays");
break;
case SATURDAY:
System.out.println("Weekends");
break;
case SUNDAY:
System.out.println("Weekends");
break;
default:
System.out.println("Unknown");
}
Java 12
Java 12 中進(jìn)一步增強(qiáng)了 switch 語句,并引入了 switch 表達(dá)式作為預(yù)覽功能。
- 您可以從
switch塊中返回值,因此switch語句成為switch表達(dá)式 - 您可以在一個(gè)
case中有多個(gè)值 - 您可以通過箭頭運(yùn)算符從
switch表達(dá)式返回值 - 通過
break關(guān)鍵字返回值
通過 break 關(guān)鍵字返回值例子
return switch (day) {
case "Monday":
break "Weekday";
case "Tuesday":
break "Weekday";
case "Wednesday":
break "Weekday";
case "Thursday":
break "Weekday";
case "Friday":
break "Weekday";
case "Saturday":
break "Weekend";
case "Sunday":
break "Weekend";
default:
break "Unknown";
};
通過箭頭運(yùn)算符返回值
return switch (day) {
case "Monday"-> "Week day";
case "Tuesday"-> "Week day";
case "Wednesday"->"Week day";
case "Thursday"->"Week day";
case "Friday"->"Week day";
case "Saturday"-> "Weekend";
case "Sunday"-> "Weekend";
default->"Unknown";
};
case中多個(gè)值的例子
同樣 Java 12 可以在單個(gè) case 語句中提供多個(gè) case 值,如下所示
return switch (day) {
case "Monday","Tuesday","Wednesday","Thursday","Friday"
-> "Week day";
case "Saturday", "Sunday" -> "Weekend";
default->"Unknown";
};
Java 13
上面通過break關(guān)鍵字返回值,在 Java 13 中被“yield”關(guān)鍵字取代。
return switch (day) {
case "Monday":
yield "Weekday";
case "Tuesday":
yield "Weekday";
case "Wednesday":
yield "Weekday";
case "Thursday":
yield "Weekday";
case "Friday":
yield "Weekday";
case "Saturday":
yield "Weekend";
case "Sunday":
yield "Weekend";
default:
yield "Unknown";
};
Java 14
到目前為止,我們在 Java 12 和 13 中討論的 switch 語句和功能都是預(yù)覽功能,通過標(biāo)記參數(shù) –enable-preview=true 開啟功能 。
但是 Java 14 只是將所有功能從預(yù)覽功能變成了標(biāo)準(zhǔn)功能,無需設(shè)置標(biāo)志 –enable-preview=true也能使用上面所說的方式。
Java 17
Java 17 LTS 是 Java SE 平臺(tái)的最新長期支持版本,發(fā)布于2021年9月15日,又增強(qiáng)了switch的功能。
- 模式匹配
您可以在 switch 條件下傳遞對象,并且可以在 switch case 標(biāo)簽中檢查該對象的不同類型,如下面的例子:
return switch (obj) {
case Integer i -> "It is an integer";
case String s -> "It is a string";
case Employee s -> "It is a Employee";
default -> "It is none of the known data types";
};
在上面的示例中,我將一個(gè)對象傳遞給切換條件,這在 Java 17 之前是不可能的。然后可以檢查該對象的特定數(shù)據(jù)類型并將其分配給變量。
例如case Integer i- > "It is an integer";表示檢查傳遞的對象是否為“Integer”類型,如果它是整數(shù),則將其分配給變量“i”。并通過箭頭運(yùn)算符返回字符串“It is an integer”。
- 保護(hù)模式
讓我們來看看這個(gè)用例。
在我檢查了“Employee”實(shí)例的案例標(biāo)簽內(nèi),我想進(jìn)行額外的檢查。
通常你會(huì)像下面這么做:
case Employee emp:
if(emp.getDept().equals("IT")) {
yield "This is IT Employee";
}
但是 Java 17 引入了“保護(hù)模式”, 你可以修改成下面的方式:
return switch (obj) {
case Integer i -> "It is an integer";
case String s -> "It is a string";
case Employee employee && employee.getDept().equals("IT") -> "IT Employee";
default -> "It is none of the known data types";
};
- 空值處理
在 Java 17 之前,您永遠(yuǎn)無法將 null 值傳遞給 switch 語句,而不會(huì)拋出 Null 指針異常,Java 17 允許你這樣處理,比如下面的方式:
case null -> "It is a null object";
如果你有上面的 switch 表達(dá)式,如果你傳遞的對象是空的,你將永遠(yuǎn)不會(huì)得到空指針異常。
總結(jié)
上面就是從 Java 7 到 Java 17 switch case 的進(jìn)化史,雖然沒大用,大家就了解了解吧。
以上就是Java7到Java17之Switch語句進(jìn)化史示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java7到Java17Switch語句的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Javamail實(shí)現(xiàn)發(fā)送郵件(QQ/網(wǎng)易郵件服務(wù)器)
這篇文章主要介紹了基于Javamail實(shí)現(xiàn)發(fā)送郵件,分別使用QQ郵箱作為smtp郵件服務(wù)器發(fā)送郵件,使用網(wǎng)易郵箱作為smtp郵件服務(wù)器發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
詳解SpringCloud Finchley Gateway 統(tǒng)一異常處理
這篇文章主要介紹了詳解SpringCloud Finchley Gateway 統(tǒng)一異常處理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10

