1. 程式人生 > >JDK8新特性詳解(一)

JDK8新特性詳解(一)

雖然JDK8已經出來了N久,其新特性也在日益改變著我們的編碼習慣和風格。雖然有些新特性用起來很順手,但是總是傻傻分不清到底是哪個版本的。趁今天有時間,我們就來總結一下,JDK8有哪些能提升我們開發效率的新特性: **一、靜態方法的預設方法和靜態方法** 眾所周知,在介面中定義的普通方法都是抽象方法,方法前面預設都會新增 public abstract ,不能有方法實現,需要在介面的實現類中對方法進行具體實現。 介面: ```java package com.beck.util; /** * @author 我是七月呀 * @date 2020/12/18 */ public interface MethodService { /** * 抽象方法 */ void abstractMethod(); /** * 預設方法 */ default void defaultMethod(){ System.out.println("執行了預設方法"); } /** * 靜態方法 */ static void staticMethod(){ System.out.println("執行了靜態方法"); } } ``` 實現類: ```Java package com.beck.util; /** * @author 我是七月呀 * @date 2020/12/18 */ public class MethodServiceImpl implements MethodService { @Override public void abstractMethod() { System.out.println("執行了抽象方法"); } } ``` 測試類: ```Java package com.beck.util; /** * @author 我是七月呀 * @date 2020/12/18 */ public class TestMethod { public static void main(String[] args) { MethodServiceImpl methodService = new MethodServiceImpl(); methodService.abstractMethod(); methodService.defaultMethod(); //呼叫靜態方法 MethodService.staticMethod(); MethodService methodServiceOne = new MethodService() { @Override public void abstractMethod() { } @Override public void defaultMethod() { System.out.println("預設方法是可以被重寫的"); } }; methodServiceOne.defaultMethod(); } } ``` ```Java  public class Student { private int id;       private String name;      private String sex;      public int getId() {         return id;     }       public void setId(int id) {         this.id = id;     }       public String getName() {         return name;     }       public void setName(String name) {         this.name = name;     }       public String getSex() {         return sex;     }       public void setSex(String sex) {         this.sex = sex;     }       public Student() {     }       public Student(int id, String name, String sex) {         this.id = id;         this.name = name;         this.sex = sex;     }       @Override     public String toString() {         return "Student{" +             "id=" + id +             ", name='" + name + '\'' +             ", sex='" + sex + '\'' +             '}';     } } ``` 總結:1、抽象方法必須重寫,預設方法可選擇性重寫,靜態方法無法重寫 ​ 2、抽象方法和預設方法都不可以通過介面呼叫,必須通過介面的實現類例項的物件來呼叫;靜態方法可以直接通過介面呼叫,不可以通過介面的實現類例項的物件來呼叫 **二、Lambda表示式** Lambda表示式是Java8中非常重要的一個新特性,其基於函數語言程式設計的思想,支援將程式碼作為方法引數進行使 用。可以把Lambda表示式理解為通過一種更加簡潔的方式表示可傳遞的匿名函式。 它本身沒有名稱,而且不像方法那樣屬於某一個類,但是可以有引數列表、程式碼體、返回值。使用了Lambda表達 式之後就不需要再去編寫匿名類了 **Lambda使用規範** Lambda基礎格式 ```Java (引數列表) ‐> { 方法體      } ``` 引數列表:即匿名方法的形參 -> :Lambda運算子 方法體:用於執行業務邏輯。可以是單一語句,也可以是語句塊。如果是單一語句,可以省略花括號。當需要返回 值,如果方法體中只有一條語句,可以省略return,會自動根據結果進行返回。 ```java 1、數的Lambda表示式; ()->System.out.println("haha"); 2、只有一個引數的Lambda表示式; x->{ System.out.println("haha"); return x; } 3、有多個引數的Lambda表示式; (x,y)->{ System.out.println(x); System.out.println(y); return x+y; } ps:引數列表中引數的資料型別可以交給JVM根據上下文進行推斷。所以可以 不用定義型別。 4、多個引數一條語句的Lambda表示式 (x,y) -> x+y; ``` **Lambda使用對比** ```Java package com.beck.util.student; import java.util.ArrayList; /** * @author 我是七月呀 * @date 2020/12/18 */ public class Test { public static void main(String[] args) { A