日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

ubuntu安装jdk语句_JDK 12:实际中的切换语句/表达式

發(fā)布時間:2023/12/3 Ubuntu 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu安装jdk语句_JDK 12:实际中的切换语句/表达式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ubuntu安裝jdk語句

我的上一篇文章“ 玩JDK 12的Switch表達式 ”討論了使用JDK 12 Early Access Builds嘗試JEP 325 switch 表達式和語句的過程,并提供了一個簡單的示例。 這篇文章使用相同的JDK 12 Early Access Build 10來演示switch表達式和增強的switch語句的不同功能。

我在博客文章“ 通過引入switch表達式來增強Java switch語句 ”中使用了2×2網(wǎng)格,以說明新的“箭頭”語法(“ switch標(biāo)為規(guī)則”)可以與switch 語句或switch表達式一起使用。按照J(rèn)EP325。同樣,按照J(rèn)EP 325,傳統(tǒng)的“冒號”語法(“帶開關(guān)標(biāo)記的語句組”)也可以與switch 表達式或switch語句一起使用。 換句話說,結(jié)腸的存在( : ) 并不一定意味著一個switch的“箭頭”的聲明 ,并存在( -> ) 并不一定意味著一個switch 表達 。 為了方便起見,我在前面的文章中提供了表格的改編版本。

聲明
(“交換機的非本地控制流_out_ [繼續(xù)到封閉循環(huán),帶有標(biāo)簽的中斷,返回]”) 表達
(總計:返回一個值) 開關(guān)標(biāo)簽聲明組
(“結(jié)腸”)
(啟用穿透) 開關(guān)標(biāo)簽規(guī)則
(“箭頭”)
(防止掉線)
switch我們知道和“愛”,但增強了 break返回的值類似于return
語句/冒號的“語法簡寫”(上)以及
  • “消除了“休息”的煩惱”
  • “隱式防止所有形式的失敗”
  • “避免了電流開關(guān)范圍的混亂”
箭頭( -> )指向返回值

使用JDK 12 Early Access Build ,可以方便地試用新的switch 表達式 ,我們還可以試用switch 語句的傳統(tǒng)版本和增強版本。

傳統(tǒng)開關(guān)聲明

即使啟用了JDK 12預(yù)覽( --enable-preview ),我們“知道并愛著”的傳統(tǒng)switch 語句仍然可用。 接下來顯示此傳統(tǒng) switch語句的示例,即使啟用了JDK 12語言功能預(yù)覽,該示例也可以成功編譯和執(zhí)行。

/*** Demonstrate traditional switch statement assigned to* local variable.*/ public static void demonstrateTraditionalSwitchStatement() {out.println("Traditional Switch Statement:");final int integer = 3;String numericString;switch (integer){case 1 :numericString = "one";break;case 2 :numericString = "two";break;case 3:numericString = "three";break;default:numericString = "N/A";}out.println("\t" + integer + " ==> " + numericString); }

這篇文章中顯示的這個代碼以及所有其他代碼示例都可以在GitHub上找到 。 這個特定的示例顯示了傳統(tǒng)switch語句設(shè)置局部變量值的常見用法。 我有意選擇了該用例,因為新的switch表達式是實現(xiàn)此目的的一種改進方法。

增強型開關(guān)聲明

如前所述,我們可以在增強的 switch 語句中使用新的“箭頭”語法(“帶有開關(guān)標(biāo)簽的規(guī)則”)。 在使用--enalved-preview的JDK 12 Early Access Build 10上編譯并運行的下一個代碼示例中顯示了這一點。

/*** Demonstrate enhanced switch statement used to assign* a local variable.*/ public static void demonstrateEnhancedSwitchStatement() {out.println("Enhanced Switch Statement:");final int integer = 2;String numericString;switch (integer){case 1 -> numericString = "one";case 2 -> numericString = "two";case 3 -> numericString = "three";default -> numericString = "N/A";}out.println("\t" + integer + " ==> " + numericString); }

最后一個示例顯示了該switch仍然用作語句 ,但是在這種情況下,它利用了“箭頭”語法(“標(biāo)簽規(guī)則”)來完成其切換,而沒有明確指定break 。 這不僅是更少的代碼,而且更重要的是,它的優(yōu)點是不允許經(jīng)常令人恐懼的switch “掉線”。 簡而言之, 增強后的 switch 語句的工作方式類似于當(dāng)前/傳統(tǒng)的switch語句,但是沒有傳統(tǒng)版本的潛在缺陷。

新開關(guān)表達式通過中斷返回值

JEP 325除了增強當(dāng)前的switch語句以允許指定switch語句而沒有掉線的風(fēng)險之外,還引入了在switch 表達式中使用switch關(guān)鍵字的概念。 Java教程的“ 表達式,語句和塊 ”頁面介紹了語句和操作之間的區(qū)別。 為了便于討論,該教程中的兩個重要觀察結(jié)果是(我加粗體 ):

  • “ 表達式是由變量,運算符和方法調(diào)用組成的結(jié)構(gòu), 其結(jié)果為單個值 。”
  • “ Java編程語言允許您從各種較小的表達式構(gòu)造復(fù)合表達式 ,只要該表達式的一部分所需的數(shù)據(jù)類型與另一部分的數(shù)據(jù)類型匹配即可。”
  • 下一個代碼清單演示了如何使用JDK 12 Early Access Build 10和--enable-preview替換上面顯示的使用switch 語句將一個值分配給一個較早聲明的局部變量的代碼,該代碼使用一個switch 表達式以在單個語句中將其結(jié)果值分配給局部變量。

    /*** Demonstrate switch expression using colons and breaks.*/ public static void demonstrateSwitchExpressionWithBreaks() {final int integer = 1;out.println("Switch Expression with Colons/Breaks:");final String numericString =switch (integer){case 1 :break "uno";case 2 :break "dos";case 3 :break "tres";default :break "N/A";};out.println("\t" + integer + " ==> " + numericString); }

    剛剛顯示的代碼示例演示了switch 表達式的使用,該表達式與前面顯示的傳統(tǒng)switch語句示例非常相似。 但是,有幾個顯著差異。 區(qū)別在于此switch表達式返回的結(jié)果分配給局部變量“ numericString ”。 第二個區(qū)別直接與switch 表達式能夠返回值有關(guān),在于break子句現(xiàn)在每個都具有要在break關(guān)鍵字之后立即指定的相關(guān)case要返回的值。 本質(zhì)上, switch 表達式的break就像Java方法return 。

    通過標(biāo)簽規(guī)則的新開關(guān)表達式返回值

    只是示出的實施例表明,人們可以從一個返回值switch有類似結(jié)腸表達式 ( : )和break語法什么一個很可能與使用switch的語句。 除了熟悉之外,此方法的另一個優(yōu)點是可以在返回單個值之前為單個case指定多個語句。 但是,在大多數(shù)情況下,使用前面討論的“箭頭”語法從switch 表達式返回值可能會變得很流行,因為它不會遭受掉線的風(fēng)險并避免了通常與傳統(tǒng)switch語句相關(guān)的范圍意外。 下一個代碼清單展示了新的switch 表達式如何使用“標(biāo)簽規(guī)則”(“ arrow”語法)而不是冒號和break以優(yōu)雅地返回switch的單個解析值。

    /*** Demonstrate switch expressions using "arrow" syntax.*/ public static void demonstrateSwitchExpressionWithArrows() {final int integer = 4;out.println("Switch Expression with Arrows:");final String numericString =switch (integer){case 1 -> "uno";case 2 -> "dos";case 3 -> "tres";case 4 -> "quatro";default -> "N/A";};out.println("\t" + integer + " ==> " + numericString); }

    上面的四個示例演示了2×2網(wǎng)格中所示的每種情況。 本文的其余部分將討論通過使用JDK 12 Early Access Build 10嘗試switch表達式和語句而獲得的一些其他觀察結(jié)果。

    可以為單個情況指定多個常量

    2×2網(wǎng)格中的四個象限中的任何一個都允許將多個常數(shù)與單個case相關(guān)聯(lián)。 在下面的代碼清單中對此進行了演示,該清單在啟用“預(yù)覽語言功能”的情況下與JDK 12 Early Access Build 10一起編譯和運行。

    /*** Demonstrate that multiple constants can be associated with* a single {@code case} and used in conjunction with a* {@code switch} expression that uses the "arrow" syntax.*/ public static void demonstrateLabelRulesWithSharedCases() {final int integer = 7;out.println("Multiple Case Labels:");final String numericString =switch (integer){case 0 -> "zero";case 1, 3, 5, 7, 9 -> "odd";case 2, 4, 6, 8, 10 -> "even";default -> "N/A";};out.println("\t" + integer + " ==> " + numericString); }/*** Demonstrate that multiple constants can be associated with* a single {@code case} and used in conjunction with a* {@code switch} statement that uses the traditional colon and* {@code break} syntax.*/ public static void demonstrateBlockedStatementsWithSharedCases() {final int integer = 6;out.println("Multiple Case Labels:");String numericString;switch (integer){case 0:numericString = "zero";break;case 1, 3, 5, 7, 9:numericString = "odd";break;case 2, 4, 6, 8, 10:numericString = "even";break;default:numericString = "N/A";};out.println("\t" + integer + " ==> " + numericString); }

    不能混用“箭頭”(“標(biāo)簽規(guī)則”)和冒號/中斷(“語句組”)

    JDK 12 Early Access Build 10編譯器( javac )不允許混合使用“箭頭”語法和傳統(tǒng)的冒號/ break語法。 嘗試將這些混合使用會導(dǎo)致錯誤消息:“ 錯誤:開關(guān)中使用了不同種類的信息 ”。 接下來將顯示一個示例代碼,該示例將無法編譯并顯示此特定錯誤消息。

    /*** WARNING - This does NOT compile, even with JDK 12 Early* Access Builds and --enable-preview because JEP 325 does* not allow the "arrow" syntax to be mixed with the* traditional colon/break syntax.*/ public static void demonstrateMixed() {final int integer = 3;String numericString;switch(integer){case 1 :numericString = "one";break;case 2 -> numericString = "two";default -> numericString = "N/A";}return numericString; }

    Switch語句的中斷無法返回值

    新的switch 表達式返回一個值,當(dāng)switch表達式使用冒號和break方法時,將在break關(guān)鍵字之后立即指定該返回值。 因為傳統(tǒng)的switch 語句不返回值,所以嘗試使與switch 語句關(guān)聯(lián)的break指定返回值是編譯時錯誤。 錯誤(“錯誤:意外的值中斷”)可以用以下代碼重現(xiàn)。

    /*** WARNING - This does NOT compile, even with JDK 12 Early* Access Builds and --enable-preview because it is* nonsensical to have a "statement" return a value; that* is what an expression should be used for.*/ public static void demonstrateSwitchStatementReturnedLabel() {final int integer = 4;switch (integer){case 1:break "one";case 2:break "two";case 3:break "three";default:break "N/A";}; }

    當(dāng)嘗試使用帶有指定標(biāo)志--enable-preview和-release 12 JDK 12 Early Access Build 10的javac編譯器來編譯以上代碼時,錯誤消息“ error:意料之外 ”的四個實例(對應(yīng)于三種case加上一種default ) 價值突破 ”可見。 毫不奇怪,只需將此switch分配給局部變量(并有效地將語句轉(zhuǎn)換為表達式 )的簡單更改就可以編譯此代碼。 換句話說,將上面的代碼更改為下一個代碼清單中的代碼可以使其編譯并成功運行。

    /*** This demonstrates that a {@code switch} "expression" is* able to (and expected to) provide the "return" value for* a given {@code case} and {@code default} instead of being* a compiler error as it was for the "statement" example* demonstrated in method* {@link #demonstrateSwitchStatementReturnedLabel()}.*/ public static void demonstrateSwitchExpressReturnedLabel() {final int integer = 4;final String numericString =switch (integer){case 1:break "one";case 2:break "two";case 3:break "three";default:break "N/A";}; }

    當(dāng)前的JEP 325文本包含有關(guān)此break行為與方法return相似的討論。 該討論指出, switch 語句在其break s之后不需要返回值的情況類似于返回void的方法。 switch 表達式應(yīng)返回非void值。

    Switch語句的“箭頭”語法必須指向一條語句

    即使向javac編譯器提供了--enable-preview和-release 12 ,以下代碼也無法在JDK 12 Early Access Build 10中進行編譯。

    /*** WARNING - This does not compile, even with JDK 12 Early* Access Builds and --enable-preview and reports error message* "error: not a statement" because it is expecting a* {@code switch} "statement" but what is being provided to each* {@code case} is NOT a statement.*/ public static void demonstrateSwitchStatementReturnedValueViaLabelRule() {final int integer = 5;switch (integer){case 1 -> "one";case 2 -> "two";};out.println(numericString); }

    上面的代碼無法編譯,并且報告的錯誤消息是“錯誤:不是語句”。 這是因為在此示例中將switch用作語句,但是“箭頭”語法是“指向”文字字符串而不是有效的Java語句。

    所有可能性都必須在switch表達式中指定

    因為switch 表達式需要返回一個非void值,所以switch 表達式必須為其可能打開的所有可能值指定case 。 實際上,這很可能是通過default來實現(xiàn)的,以捕獲未用case明確指定的所有可能性。 使用傳統(tǒng)的switch語句,不需要確保所有可能打開的值都由case或default值覆蓋,并且有時會導(dǎo)致某些情況,例如我在博客文章“ Log Unexpected Switch Options ”中所述。

    以下代碼違反了以下規(guī)則: switch 表達式必須指定case或default值的所有可能值:

    /*** WARNING - This method will not compile even with JDK 12* Early Access Build 10 with --enable-preview because of* error; "the switch expression does not cover all possible* input values".*/ public static void demonstrateLackingCaseInSwitchExpression() {final int integer = 5;String numericString =switch (integer){case 1 -> "one";case 2 -> "two";};out.println(numericString); }

    剛剛顯示的代碼將無法編譯,并且因果錯誤消息為“錯誤:開關(guān)表達式未涵蓋所有可能的輸入值。”

    JEP 325對交換機未來使用的影響

    考慮到Java中除了switch 語句之外還有可用的switch 表達式所帶來的可能性,并考慮到可以與switch表達式或語句一起使用的新“箭頭”語法所提供的優(yōu)勢,開始思考何時進行是很有趣的。上面2×2網(wǎng)格中的每個象限最有利。 總的來說,我相信我會發(fā)現(xiàn)自己經(jīng)常使用帶有“箭頭”語法(“標(biāo)簽規(guī)則”)的switch 表達式 ,同時也經(jīng)常使用帶有“ arrow”語法的增強型switch 語句 。 我懷疑將來我會很少使用傳統(tǒng)的: ( break )語法。 即使在特定case有多個語句要執(zhí)行時,我也可能會將這些語句分解為單個方法,在這種case使用“箭頭”語法進行調(diào)用。 這將使我受益于更明顯的作用域并避免掉線的風(fēng)險。 鑒于現(xiàn)在可以為單個case指定多個常量,即使在多個案例導(dǎo)致相同結(jié)果的情況下,也不再需要穿透。

    其他資源

    • JEP 325:開關(guān)表達式(預(yù)覽)
    • JEP 325規(guī)范:開關(guān)表達式
    • JDK 12搶先體驗版
    • 運行中的JDK語言功能預(yù)覽:切換表達式
    • 玩JDK 12的Switch表達式
    • 通過引入switch表達式來增強Java switch語句
    • 切換表達式到Java嗎?
    • 切換表達式-收集線程
    • LJC演講的少量反饋
    • GitHub上的帖子示例

    翻譯自: https://www.javacodegeeks.com/2018/09/jdk-12-switch-statements-expressions.html

    ubuntu安裝jdk語句

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的ubuntu安装jdk语句_JDK 12:实际中的切换语句/表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。