Java?不同版本的?Switch語(yǔ)句
前言:
自Java13以來(lái),Switch表達(dá)式被添加到Java核心庫(kù)中。如果您使用的是Java版本13或更高版本,那么您肯定可以將舊Switch轉(zhuǎn)換為新Switch。
本文將討論它如何在不破壞現(xiàn)有更改的情況下提供某些功能。當(dāng)然,其他語(yǔ)言用戶可能會(huì)評(píng)論“多年前,它就已經(jīng)存在于我們的編程語(yǔ)言中了”。但讓我們微笑一下,繼續(xù)用Java編程,好嗎?注意,我將在帖子中交替使用“switch expression”和“switch statement”,所以請(qǐng)記住,我想說(shuō)的是同一件事。
舊的Java Switch語(yǔ)句
switch語(yǔ)句將以更可讀、更簡(jiǎn)潔的方式(并非每次)替換單個(gè)變量的if-else-if梯形圖。是的,我知道,這不是一個(gè)精確的定義。
讓我們看一個(gè)實(shí)際的例子。假設(shè)你按下了一個(gè)按鈕,并且有了特定的按鈕代碼,你需要有一些與之相關(guān)的命令。現(xiàn)在,您可以執(zhí)行第一塊中顯示的if-else-if梯形圖,或者將其轉(zhuǎn)換為第二塊中顯示的開關(guān)表達(dá)式:
if(button == 1) { command = "on"; } else if(button == 2){ command = "off"; } else if(button == 3 || button == 4) { command = "ring"; } else{ throw new RuntimeException("Wrong Button Code"); }
switch表達(dá)式:
switch(button){ case 1: command = "On"; break; case 2: command = "off"; break; case 3: case 4: command = "ring"; break; default: throw new RuntimeException("Wrong Button Code"); }
正如你所見,這個(gè)switch即使我們減少了條件檢查,我們也必須添加很多額外的代碼,比如break語(yǔ)句。這就是新的Java Switch語(yǔ)句或表達(dá)式幫助我們的地方。與其說(shuō)是一個(gè)新的,不如說(shuō)是一個(gè)“更新的開關(guān)表達(dá)式”。但無(wú)論如何,讓我們看看。
新的Switch語(yǔ)句
在新的switch語(yǔ)句中,您將看到的第一件事是,您根本不必編寫break
語(yǔ)句。要做到這一點(diǎn),你必須使用箭頭->
,我們?cè)趌ambda中使用的箭頭,來(lái)告訴這個(gè)案例的開始。至于實(shí)際的代碼塊,可以將其設(shè)置為一行表達(dá)式,也可以在代碼塊周圍使用一個(gè)花括號(hào)。
此外,對(duì)于不同case的相同評(píng)估,您不需要多次編寫case語(yǔ)句,您可以用逗號(hào)分隔它們(例如,上例中的case3和case4)。
switch(button){ case 1 -> command = "on"; // on liner case 2 -> { // do something command = "off"; // a block with curly brackets } case 3, 4 -> command = "ring"; // case can be combined with a comma default -> throw new RuntimeException("Wrong Button Code"); }
看看代碼變得多么簡(jiǎn)潔。不需要額外的中斷聲明。此外,可以在不重復(fù)關(guān)鍵字的情況下組合案例。但等等,不是這樣的。關(guān)于這個(gè)更新的Java switch語(yǔ)句,還有一件事。
Java Switch表達(dá)式的收益率
我們可以從switch語(yǔ)句中得到一個(gè)結(jié)果。簡(jiǎn)單地說(shuō),您只能從開關(guān)塊返回特定的內(nèi)容。它對(duì)switch語(yǔ)句使用Java13新添加的yield
關(guān)鍵字。這只不過(guò)是對(duì)開關(guān)的回報(bào)。舉個(gè)例子你會(huì)更好地理解。
假設(shè)在上面的例子中,我們?yōu)槊糠N情況都修改了命令變量?,F(xiàn)在,我們可以直接從特定情況返回特定字符串,并將其分配給命令,而不是對(duì)同一變量進(jìn)行變異。你可以同時(shí)使用“冒號(hào)大小寫”或“箭頭大小寫”。讓我們看看如何。
箭頭case ->
String command = switch(button){ case 1 -> { yield "on"; } case 2 -> { yield "off"; } case 3,4 -> { // multiple case yield "ring"; } default -> throw new RuntimeException("Wrong Button Code"); };
冒號(hào)case:
String command = switch(button){ case 1: yield "on"; // no break should be used case 2: yield "off"; case 3: case 4: yield "ring"; default: throw new RuntimeException("Wrong Button Code"); };
使用switch時(shí)請(qǐng)記住這幾點(diǎn):
- 不能在一個(gè)switch語(yǔ)句中交替使用冒號(hào)和箭頭大小寫。
- 從箭頭框中得出結(jié)果時(shí),必須將其寫在花括號(hào)中。
- 從冒號(hào)case中生成結(jié)果時(shí),不要使用
break
關(guān)鍵字。 - 建議在使用
yield
時(shí)使用箭頭框。
結(jié)論
java的switch語(yǔ)句或表達(dá)式不如Kotlin或Scala的switch表達(dá)式強(qiáng)大,但我認(rèn)為我們可以看到它在不久的將來(lái)在Java中變得更加強(qiáng)大。在那之前,讓我們?cè)囍诖a中使用這個(gè)東西。
到此這篇關(guān)于Java 不同版本的 Switch語(yǔ)句的文章就介紹到這了,更多相關(guān)Java Switch語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java 如何在switch case語(yǔ)句中聲明變量
- 詳解java中if語(yǔ)句和switch的使用
- java中的switch case語(yǔ)句使用詳解
- Java枚舉類型在switch語(yǔ)句正確使用方法詳解
- Java switch 語(yǔ)句如何使用 String 參數(shù)
- java中switch選擇語(yǔ)句代碼詳解
- java中switch case語(yǔ)句需要加入break的原因解析
- Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句詳解
- java 學(xué)習(xí)筆記(入門篇)_多選擇結(jié)構(gòu)switch語(yǔ)句
相關(guān)文章
Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法,涉及java針對(duì)數(shù)組的遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解
這篇文章主要介紹了Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解, 定時(shí)任務(wù)就是在指定時(shí)間執(zhí)行程序,或周期性執(zhí)行計(jì)劃任務(wù),Java中實(shí)現(xiàn)定時(shí)任務(wù)的方法有很多,本文從從JDK自帶的一些方法來(lái)實(shí)現(xiàn)定時(shí)任務(wù)的需求,需要的朋友可以參考下2024-01-01Java編程IP地址和數(shù)字相互轉(zhuǎn)換代碼示例
這篇文章主要介紹了Java編程IP地址和數(shù)字相互轉(zhuǎn)換代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11解決Springboot項(xiàng)目打包后的頁(yè)面丟失問題(thymeleaf報(bào)錯(cuò))
這篇文章主要介紹了解決Springboot項(xiàng)目打包后的頁(yè)面丟失問題(thymeleaf報(bào)錯(cuò)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè)及使用方法
這篇文章主要介紹了idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法,結(jié)合實(shí)例形式詳細(xì)分析了二叉樹的定義、深度優(yōu)先遍歷與廣度優(yōu)先遍歷算法原理與相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04JavaWeb通過(guò)IDEA配置Servlet操作流程詳解
這篇文章主要介紹了JavaWeb通過(guò)IDEA配置Servlet實(shí)現(xiàn)流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10java實(shí)現(xiàn)的根據(jù)概率隨機(jī)中獎(jiǎng)測(cè)試類
這篇文章主要介紹了java實(shí)現(xiàn)的根據(jù)概率隨機(jī)中獎(jiǎng)測(cè)試類,結(jié)合完整實(shí)例形式詳細(xì)分析了java隨機(jī)數(shù)實(shí)現(xiàn)概率運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-09-09@FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式
這篇文章主要介紹了@FeignClient?實(shí)現(xiàn)簡(jiǎn)便http請(qǐng)求封裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03