關於jdk7和jdk8 一些新特性的總結
阿新 • • 發佈:2018-11-04
java7新特性
1. 自動資源管理 只要資源實現AutoCloseable介面JVM可以幫我們自動關閉資源 jdk7的流實現了都該介面。 try(裡面寫要開啟的資源){ } 2. 鑽石表示式 List<String> list = new ArrayList<>(); jdk 1.7開始後 我們只需要在宣告集合的時候指定泛型型別,在建立集合物件的時候 需要宣告泛型型別,(JVM使用自動型別推斷。) 3. 數字字面量下劃線支援 1_000.232_3 輸出該數的時候會自動忽略下劃線 下劃線的使用規則:不能出現在數字的開頭或結尾,不能小數點,F,L, ,0X,0B 的左右 4. switch探測String jdk1.7以前 5. 二進位制字面量 可以使用二進位制格式,用0B/0b作為標記 byte型別時一個位元組 8位 最高位為符號位,0代表正數,1表示負數 0b1000_0000 最小的負數 -128 java中表示負數時,採用特殊的補碼+反碼格式。
java8新特性
1)Lambda表示式 Lambda 是一個匿名函式,我們可以把 Lambda 表示式理解為是一段可以傳遞的程式碼(將程式碼像資料一樣進行傳遞)。 Lambda 表示式的基礎語法:Java8中引入了一個新的操作符 "->" 該操作符稱為箭頭操作符或 Lambda 操作符 例如 : (x) -> System.out.println(x) 箭頭操作符將 Lambda 表示式拆分成兩部分: 左側:Lambda 表示式的引數列表 右側:Lambda 表示式中所需執行的功能, 即 Lambda 體 2)函式式介面 只包含一個抽象方法的介面,稱為函式式介面函式式介面。 你可以通過 Lambda 表示式來建立該介面的物件。 我們可以在任意函式式介面上使用 @ @FunctionalInterface註解, 這樣做可以檢查它是否是一個函式式介面,同時 javadoc 也會包 含一條宣告,說明這個介面是一個函式式介面。 * Java8 內建的四大核心函式式介面 * Consumer<T> : 消費型介面 void accept(T t); * Supplier<T> : 供給型介面 T get(); * Function<T, R> : 函式型介面 R apply(T t); * Predicate<T> : 斷言型介面 boolean test(T t); 3)介面可以使用預設方法和靜態方法 public interface MyFun { default String getName(){ return "哈哈哈"; } static void print(){ System.out.println("static method"); } } 4)方法引用與構造器引用 要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用! ( 實現抽象方法的引數列表,必須與方法引用方法的引數列表保持一致!) 一、方法引用的格式 1. 物件的引用 :: 例項方法名 2. 類::靜態方法 3. 類名 :: 例項方法名 注意:當需要引用方法的第一個引數是呼叫物件,並且第二個引數是需要引用方法的第一個引數是呼叫物件,並且第二個引數是需要引 用方法的第二個引數(或無引數 )時:ClassName::methodName 如:BiPredicate<String, String> bp2 = String::equals; 二、構造器引用 :構造器的引數列表,需要與函式式介面中引數列表保持一致! 格式 :1. 類名 :: new 三、陣列引用 型別[] :: new 5)Stream的API 1. 建立 Stream 1). Collection 提供了兩個方法 stream() 與 parallelStream() 2). 通過 Arrays 中的 stream() 獲取一個數組流 3). 通過 Stream 類中靜態方法 of() 4). 建立無限流 2. 中間操作 **篩選與切片** filter——接收 Lambda , 從流中排除某些元素。 limit——截斷流,使其元素不超過給定數量。 skip(n) —— 跳過元素,返回一個扔掉了前 n 個元素的流。若流中元素不足 n 個,則返回一個空流。與 limit(n) 互補 distinct——篩選,通過流所生成元素的 hashCode() 和 equals() 去除重複元素 **對映** map——接收 Lambda , 將元素轉換成其他形式或提取資訊。接收一個函式作為引數,該函式會被應用到每個元素上,並將其對映成一個新的元素。 flatMap——接收一個函式作為引數,將流中的每個值都換成另一個流,然後把所有流連線成一個流 **排序** sorted()——自然排序 sorted(Comparator com)——定製排序 3. 終止操作(終端操作) 注意:流進行了終止操作後,不能再次使用 allMatch——檢查是否匹配所有元素 anyMatch——檢查是否至少匹配一個元素 noneMatch——檢查是否沒有匹配的元素 findFirst——返回第一個元素 findAny——返回當前流中的任意元素 count——返回流中元素的總個數 max——返回流中最大值 min——返回流中最小值 **歸約** reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以將流中元素反覆結合起來,得到一個值。