最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文梳理Java?8后的新功能

 更新時間:2022年02月08日 14:57:42   作者:Kwanwooo  
Java 8是Java自Java 5(發(fā)布于2004年)之后的最重要的版本,下面這篇文章主要給大家介紹了關于Java8后新功能的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

為什么要寫這篇文章

經(jīng)過了若干年的發(fā)展,Java逐步從java8升級為java11,java17。

讓我們對比學習一下最新一版的LTS版本和java8比起來讓代碼簡化了多少。

文本塊(Text Blocks)

這個寫法有些類似于 javascript、 Lua等腳本語言。方便識別html、json等格式復雜的字符串。

public class StringTest {
    public static void main(String[] args) throws Exception {
         // 傳統(tǒng)寫法
        String json =
                "{\n" +
                "    \"key\":\"a\",\n" +
                "    \"value\":\"b\"\n" +
                "}";
        // 優(yōu)化后寫法
        String json2 = """
                {
                    "key":"a",
                    "value":"b"
                }
                """;
        // 返回為 true
        System.out.println(json == json2);
    }
}

本地變量類型推斷(Local Variable Type Inference)

這一點也是在一些腳本語言中常見的,類似于 var 表示變量,val 表示常量。

    public static void main(String[] args) throws Exception {
        //集合
        // immutable map build
        var map = Map.of(
                "cat", "貓",
                "dog", "狗",
                "fish", "魚");
        // immutable set build
        var set = Set.of("1", "2", "3");
        // immutable list build
        var list = List.of(1, 2, 3, 4, 5);

        // 循環(huán)語句
        for (var i = 1; i < list.size(); i++) {
            System.out.println(i);
        }
        for (var i : list) {
            System.out.println(i);
        }

        // 異常
        try (var in = new ByteArrayInputStream("123".getBytes())) {
            System.out.println(new String(in.readAllBytes(), "utf-8"));
        } catch (Exception e) {
            System.out.println(e);
        }

        // lambda 表達式 意思相同
        BiFunction<Integer, Integer, Integer> biFunction = (a, b) -> a + b;
        BiFunction<Integer, Integer, Integer> biFunction2 = (var a, var b) -> a + b;
    }

switch

    public static void main(String[] args) throws Exception {
        var eating = Eating.BREAKFAST;
        String eatingZnString = "";
        // 傳統(tǒng)寫法
        switch (eating) {
            case BREAKFAST:
            case LUNCH:
                eatingZnString = "早午飯";
                break;
            case DINNER:
                eatingZnString = "晚飯";
                break;
            default:
                throw new Exception();
        }
        System.out.println(eatingZnString);

        // 優(yōu)化后寫法
        System.out.println(
                switch (eating) {
                    case BREAKFAST,LUNCH -> "早午飯";
                    case DINNER -> "晚飯";
                    default -> throw new Exception();
                }
        );
    }

instance of操作符的模式匹配(Pattern Matching for the instanceof Operator)

interface Animal {}

class Cat implements Animal {
    public void mew() {
        System.out.println("喵");
    }
}

class Dog implements Animal {
    public void woof() {
        System.out.println("汪");
    }
}

public class Test {
    // 傳統(tǒng)寫法
    public static void sounds(Animal animal) {
        if (animal instanceof Cat) {
            Cat cat = (Cat) animal;
            cat.mew();
        } else if (animal instanceof Dog) {
            Dog dog = (Dog) animal;
            dog.woof();
        } else {
            throw new IllegalArgumentException("沒有這種動物的叫聲");
        }
    }
    
    // 優(yōu)化寫法
    public static void betterSounds(Animal animal) {
        if (animal instanceof Cat cat) {
            cat.mew();
        } else if (animal instanceof Dog dog) {
            dog.woof();
        } else {
            throw new IllegalArgumentException("沒有這種動物的叫聲");
        }
    }
}

record 類

// 傳統(tǒng)類
public final class People {
    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String name() {
        return this.name;
    }

    public int age() {
        return this.age;
    }
    public boolean equals(People people) {...}
    public int hashCode() {...}
    public String toString() {...}
}

// 優(yōu)化后的類
public record People (String name, int age){ 
    
}

// 更多用法
public record People (String name, int age){
    // 靜態(tài)字段
    static int teenageAge;

    // 靜態(tài)初始化
    static {
        teenageAge = 17;
    }
    // 靜態(tài)方法
    public static People buildTeenage(String name) {
        return new People(name , teenageAge);
    }

    // 優(yōu)化后的構造方法
    public People {
        if (age < 0) {
            throw new IllegalArgumentException("年齡不能小于0");
        }
    }
}

參考文檔

Java Language Updates

總結

到此這篇關于Java 8后新功能的文章就介紹到這了,更多相關Java8后的新功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入了解Java設計模式之UML類圖

    深入了解Java設計模式之UML類圖

    UML?即?Unified?Modeling?Language?統(tǒng)一建模語言,是用來設計軟件的可視化建模語言。本文就帶大家了解一下UML中類圖的定義與使用,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-11-11
  • Java字符串 正則表達式詳解

    Java字符串 正則表達式詳解

    這篇文章主要介紹了java使用正則表達式查找包含的字符串功能,結合具體實例形式分析了java針對字符串匹配查找的相關實現(xiàn)技巧,需要的朋友可以參考下
    2021-09-09
  • springboot中如何配置LocalDateTime JSON返回時間戳

    springboot中如何配置LocalDateTime JSON返回時間戳

    這篇文章主要介紹了springboot中如何配置LocalDateTime JSON返回時間戳問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java 提取照片的EXIF信息批量重命名

    Java 提取照片的EXIF信息批量重命名

    這篇文章主要介紹了Java 提取照片的EXIF信息批量重命名的方法,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-04-04
  • Java程序單實例運行的簡單實現(xiàn)

    Java程序單實例運行的簡單實現(xiàn)

    這篇文章主要介紹了Java程序單實例運行的簡單實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring?零基礎入門WebFlux框架體系

    Spring?零基礎入門WebFlux框架體系

    Spring5發(fā)布有兩年了,隨Spring5一起發(fā)布了一個和Spring?WebMvc同級的Spring?WebFlux。這是一個支持反應式編程模型的新框架體系。反應式模型區(qū)別于傳統(tǒng)的MVC最大的不同是異步的、事件驅動的、非阻塞的,這使得應用程序的并發(fā)性能會大大提高,單位時間能夠處理更多的請求
    2022-07-07
  • java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例

    java 壓縮圖片(只縮小體積,不更改圖片尺寸)的示例

    這篇文章主要介紹了java 如何壓縮圖片體積,幫助大家更好的利用Java處理圖片,應對特殊情況,感興趣的朋友可以了解下
    2020-10-10
  • 深入了解Spring中Bean的作用域和生命周期

    深入了解Spring中Bean的作用域和生命周期

    這篇文章主要介紹了深入了解Spring中Bean的作用域和生命周期,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 一文掌握SpringBoot多環(huán)境配置

    一文掌握SpringBoot多環(huán)境配置

    在實際項目的開發(fā)過程中,我們程序往往需要在不同環(huán)境中運行,每個環(huán)境中的配置參數(shù)可能都會有所不同,例如數(shù)據(jù)庫連接信息、文件服務器等等,下面小編給大家介紹SpringBoot多環(huán)境配置,感興趣的朋友一起看看吧
    2024-04-04
  • Spring Validator接口校驗與全局異常處理器

    Spring Validator接口校驗與全局異常處理器

    這篇文章主要介紹了Spring Validator接口校驗與全局異常處理器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11

最新評論

五家渠市| 永寿县| 扬州市| 元朗区| 安福县| 建宁县| 惠州市| 青海省| 双辽市| 巴中市| 松江区| 正定县| 邯郸市| 龙川县| 棋牌| 仙居县| 米泉市| 徐闻县| 杭州市| 全南县| 连城县| 林西县| 陈巴尔虎旗| 城步| 楚雄市| 麻栗坡县| 南丹县| 锡林郭勒盟| 青阳县| 错那县| 阳高县| 宝兴县| 南华县| 仁寿县| 玉环县| 台安县| 通榆县| 石狮市| 司法| 克山县| 略阳县|