JDK8-JDK21的語法改變

從 JDK 8 到 JDK 17,Java 在語法上進(jìn)行了許多改進(jìn)和增強(qiáng)蔚润。以下是各個(gè)版本的主要語法升級:

JDK 8 (2014)

  1. Lambda 表達(dá)式:

    • 簡化匿名內(nèi)部類的寫法,用于函數(shù)式編程抽碌。
    (parameters) -> expression
    
  2. 函數(shù)式接口:

    • 只有一個(gè)抽象方法的接口,可以使用 @FunctionalInterface 注解標(biāo)注决瞳。
    @FunctionalInterface
    interface MyFunction {
        void apply();
    }
    
  3. 默認(rèn)方法:

    • 接口中可以有帶實(shí)現(xiàn)的方法。
    interface MyInterface {
        default void myMethod() {
            // implementation
        }
    }
    
  4. 靜態(tài)方法:

    • 接口中可以定義靜態(tài)方法皮胡。
    interface MyInterface {
        static void myStaticMethod() {
            // implementation
        }
    }
    
  5. 方法引用:

    • 使用 :: 關(guān)鍵字引用方法或構(gòu)造函數(shù)。
    MyClass::myMethod
    
  6. 重復(fù)注解:

    • 同一注解在同一聲明上可以多次使用屡贺。
    @Repeatable(Annotations.class)
    @interface MyAnnotation {}
    
  7. Optional 類:

    • 用于避免 null 值導(dǎo)致的 NullPointerException
    Optional<String> optional = Optional.of("value");
    

JDK 9 (2017)

  1. 模塊系統(tǒng) (Project Jigsaw):

    • 引入模塊化系統(tǒng)甩栈,定義模塊間的依賴關(guān)系。
    module my.module {
        requires another.module;
    }
    
  2. 接口私有方法:

    • 接口中可以有私有方法量没。
    interface MyInterface {
        private void myPrivateMethod() {
            // implementation
        }
    }
    

JDK 10 (2018)

  1. 局部變量類型推斷:

    • 使用 var 關(guān)鍵字進(jìn)行局部變量類型推斷。
    var list = new ArrayList<String>();
    

JDK 11 (2018)

  1. 局部變量類型推斷增強(qiáng):

    • 允許在 lambda 表達(dá)式中使用 var殴蹄。
    (var x, var y) -> x + y
    
  2. 字符串增強(qiáng):

    • 增加了一些字符串處理的方法究抓,如 isBlank()袭灯、lines()repeat() 等稽荧。
    "Hello\nWorld".lines().forEach(System.out::println);
    

JDK 12 (2019)

  1. Switch 表達(dá)式(預(yù)覽特性):

    • Switch 語句可以返回值,并且可以使用 lambda 表達(dá)式風(fēng)格姨丈。
    var result = switch (day) {
        case MONDAY -> "Start of the week";
        case FRIDAY -> "End of the week";
        default -> "Midweek";
    };
    

JDK 13 (2019)

  1. Switch 表達(dá)式增強(qiáng)(第二次預(yù)覽):

    • 繼續(xù)改進(jìn) Switch 表達(dá)式。
  2. 文本塊(預(yù)覽特性):

    • 多行字符串文字构挤,使用三個(gè)雙引號髓介。
    String json = """
                  {
                      "name": "John",
                      "age": 30
                  }
                  """;
    

JDK 14 (2020)

  1. Switch 表達(dá)式:

    • Switch 表達(dá)式正式成為標(biāo)準(zhǔn)特性筋现。
  2. 文本塊(第二次預(yù)覽):

    • 進(jìn)一步改進(jìn)文本塊。
  3. instanceof 模式匹配(預(yù)覽特性):

    • 簡化類型檢查和轉(zhuǎn)換矾飞。
    if (obj instanceof String s) {
        System.out.println(s.length());
    }
    

JDK 15 (2020)

  1. 文本塊:

    • 文本塊正式成為標(biāo)準(zhǔn)特性。
  2. 隱藏類(隱式類):

    • 允許動態(tài)生成和加載類洒沦。
  3. Sealed 類(預(yù)覽特性):

    • 限制哪些類可以擴(kuò)展或?qū)崿F(xiàn)。
    public sealed class Shape permits Circle, Rectangle {}
    

JDK 16 (2021)

  1. 記錄類(Record):

    • 簡化數(shù)據(jù)載體類的聲明申眼。
    public record Point(int x, int y) {}
    
  2. instanceof 模式匹配:

    • 模式匹配正式成為標(biāo)準(zhǔn)特性瞒津。
  3. Sealed 類(第二次預(yù)覽):

    • 繼續(xù)改進(jìn) Sealed 類括尸。

JDK 17 (2021)

  1. Sealed 類:

    • Sealed 類和接口正式成為標(biāo)準(zhǔn)特性。
    public sealed class Shape permits Circle, Rectangle {}
    

JDK 18 (2022)

  • UTF-8默認(rèn)字符集:將默認(rèn)字符集更改為UTF-8濒翻。
  • 簡單的Web服務(wù)器:引入一個(gè)簡單的Web服務(wù)器用于開發(fā)和測試。

JDK 19 (2022)

  • 記錄模式(預(yù)覽特性):引入了記錄模式有送,用于解構(gòu)記錄類。
  • Switch模式匹配(第二次預(yù)覽):繼續(xù)增強(qiáng)Switch模式匹配功能雀摘。

JDK 20 (2023)

  • 范圍模式(預(yù)覽特性):引入范圍模式裸删,用于更靈活的模式匹配阵赠。
  • 結(jié)構(gòu)化并發(fā)(預(yù)覽特性):引入用于簡化并發(fā)編程的結(jié)構(gòu)化并發(fā)API。

JDK 21 (2023)

  • 字符串模板:引入字符串模板豌注,用于更簡潔地嵌入和處理字符串。

    String name = "John";
    int age = 30;
    String message = STR."Hello, \{name}! You are \{age} years old.";
    System.out.println(message);  // 輸出: Hello, John! You are 30 years old.
    
  • 記錄模式:記錄模式正式成為語言的一部分轧铁。

  • 通用實(shí)例of模式匹配:增強(qiáng)了類型檢查和轉(zhuǎn)換的靈活性。

小結(jié)

從 JDK 8 到 JDK 21齿风,Java 引入了許多新的語法特性药薯,以提高代碼的簡潔性救斑、可讀性和安全性。主要包括 lambda 表達(dá)式脸候、方法引用穷娱、模塊系統(tǒng)、局部變量類型推斷泵额、文本塊、switch 表達(dá)式嫁盲、記錄類篓叶、模式匹配和封閉類等羞秤。這些改進(jìn)使得 Java 語言更加現(xiàn)代化,更加適應(yīng)當(dāng)前軟件開發(fā)的需求瘾蛋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘦黑,隨后出現(xiàn)的幾起案子京革,更是在濱河造成了極大的恐慌幸斥,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甲葬,死亡現(xiàn)場離奇詭異,居然都是意外死亡经窖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門画侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冰悠,“玉大人配乱,你說我怎么就攤上這事“崮啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵忿檩,是天一觀的道長。 經(jīng)常有香客問我燥透,道長沙咏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任芭碍,我火速辦了婚禮孽尽,結(jié)果婚禮上窖壕,老公的妹妹穿的比我還像新娘杉女。我一直安慰自己,他們只是感情好熏挎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坎拐,像睡著了一般烦磁。 火紅的嫁衣襯著肌膚如雪哼勇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天积担,我揣著相機(jī)與錄音,去河邊找鬼帝璧。 笑死先誉,一個(gè)胖子當(dāng)著我的面吹牛的烁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渴庆,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼把曼!你這毒婦竟也來了杨帽?” 一聲冷哼從身側(cè)響起嗤军,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叙赚,沒想到半個(gè)月后僚饭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胧砰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尉间。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哲嘲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眠副,到底是詐尸還是另有隱情画切,我是刑警寧澤囱怕,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站娃弓,受9級特大地震影響庞萍,放射性物質(zhì)發(fā)生泄漏忘闻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一齐佳、第九天 我趴在偏房一處隱蔽的房頂上張望私恬。 院中可真熱鬧炼吴,春花似錦、人聲如沸硅蹦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涮瞻。三九已至假褪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宁否。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慕匠,地道東北人饱须。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓台谊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親青伤。 傳聞我的和親對象是個(gè)殘疾皇子督怜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容