函式式思想
盡量忽略面向物件的復雜語法,強調做什么,而不是以什么形式去做,
Lambda運算式
就是函式是思想的體現
案例1
這是一段多執行緒要執行的內容:
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("今天晚上真冷啊");
}
}
這是測驗類:
public class Demo {
public static void main(String[] args) {
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();
}
}
運行結果:
今天晚上真冷啊
案例2
測驗類(匿名內部類方式):
public class Demo {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("今天真餓啊");
}
}).start();
}
}
運行結果:
今天真餓啊
案例3
測驗類(匿名內部類Lambda運算式寫法):
public class Demo {
public static void main(String[] args) {
new Thread(()->{
System.out.println("今天要洗澡");
}).start();
}
}
運行結果:
今天要洗澡
Lambda運算式三要素
組成Lambda運算式的三要素:形式引數,箭頭,代碼塊
- () 里面沒有內容,可以看成方法形式引數為空
- -> 指向要做的事情
- {} 要執行的代碼
格式
格式:(形式引數) -> {代碼塊}
- 形式引數:如果有多個形式引數,引數之間用逗號隔開;如果沒有就空著
使用前提
Lambda運算式的使用前提
- 有一個介面
- 介面中有,且只有一個抽象方法
- 必須有背景關系環境,才能推匯出Lambda運算式對應的介面
Lambda運算式的省略
- 只有一個形式引數時,引數型別可以省略;()也可以省略
- 引數型別可以省略,但多個引數時,不能只省略某一個
- 如果{}中只有一條不帶return的陳述句時,句末的分號和{}都可以省略
- 如果{}中只有一條帶return的陳述句時,句末的分號和{}都可以省 略,return也可以省略
Lambda運算式和匿名內部類的區別
- 所需型別不同
- 匿名內部類:可以是介面,也可以是抽象類,還可以是具體類
- Lambda運算式:只能是介面
- 使用限制不同
- 如果介面中有且只有一個抽象方法,可以使用Lambda運算式,也可以使用匿名內部類
- 如果介面中多于一個抽象方法,只能使用匿名內部類,不能使用Lambda運算式
- 實作原理不同
- 匿名內部類編譯之后,產生一個單獨的.class位元組碼檔案
- Lambda運算式編譯之后,沒有一個單獨的.class位元組碼檔案,對應的位元組碼會在運行的時候動態生成
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540716.html
標籤:其他
上一篇:Lambda運算式
