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 平臺的最新長期支持版本,發(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)行額外的檢查。
通常你會像下面這么做:
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 語句,而不會拋出 Null 指針異常,Java 17 允許你這樣處理,比如下面的方式:
case null -> "It is a null object";
如果你有上面的 switch 表達(dá)式,如果你傳遞的對象是空的,你將永遠(yuǎn)不會得到空指針異常。
總結(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