1;背景介紹
Java 8 (又稱為 jdk 1.8) 是Java 語言開發(fā)的一個主要版本沉馆。Oracle 公司于 2014 年 3 月 18 日發(fā)布 Java 8 ,它支持函數式編程稠肘,新的 JavaScript 引擎,新的日期 API萝毛,新的Stream API 等项阴。
2;知識剖析
Lambda其實就是匿名方法;Java會在背后,悄悄的笆包,把這些都還原成匿名類方式环揽。匿名類--指的是在聲明一個類的同時實例化它略荡,使代碼更加簡潔精練
3;常見問題
匿名類???lambda???
4;解決方案
通常情況下,要使用一個接口或者抽象類歉胶,都必須創(chuàng)建一個子類
有的時候汛兜,為了快速使用,直接實例化一個抽象類通今,并“當場”實現(xiàn)其抽象方法粥谬。 既然實現(xiàn)了抽象方法,那么就是一個新的類辫塌,只是這個類漏策,沒有命名。 這樣的類璃氢,叫做匿名類
5;編碼實戰(zhàn)
6;擴展思考
默認方法---------
7;更多討論
1;lambda的優(yōu)點?????????
與匿名類 概念相比較哟玷,Lambda其實就是匿名方法,這是一種把方法作為參數進行傳遞的編程思想一也。代碼很簡潔
2;接口說一下
接口是抽象方法的集合巢寡。如果一個類實現(xiàn)了某個接口,那么它就繼承了這個接口的抽象方法椰苟。這就像契約模式抑月,如果實現(xiàn)了這個接口,那么就必須確保使用這些方法舆蝴。接口只是一種形式谦絮,接口自身不能做任何事情。子類使用關鍵字implements來實現(xiàn)接口洁仗。它需要提供接口中所有聲明的方法的實現(xiàn)
3;抽象類說一下
抽象類是用來捕捉子類的通用特性的 层皱。它不能被實例化,只能被用作子類的超類赠潦。抽象類是被用來創(chuàng)建繼承層級里子類的模板叫胖。子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話她奥,它需要提供抽象類中所有聲明的方法的實現(xiàn)瓮增。
4:為什么有了抽象類還要接口???
接口只可以繼承一個或多個其它接口抽象方法可以繼承一個類和實現(xiàn)多個接口如果你想實現(xiàn)多重繼承,那么你必須使用接口哩俭。由于Java不支持多繼承绷跑,子類不能夠繼承多個類,但可以實現(xiàn)多個接口凡资。因此你就可以使用接口來解決它砸捏。接口是稍微有點慢的,因為它需要時間去尋找在類中實現(xiàn)的方法。
5;匿名類的概念再說一下?
匿名類指的是在聲明一個類的同時實例化它带膜,使代碼更加簡潔精練通常情況下吩谦,要使用一個接口或者抽象類鸳谜,都必須創(chuàng)建一個子類有的時候膝藕,為了快速使用,直接實例化一個抽象類咐扭,并“當場”實現(xiàn)其抽象方法芭挽。既然實現(xiàn)了抽象方法,那么就是一個新的類蝗肪,只是這個類袜爪,沒有命名。這樣的類薛闪,叫做匿名類
6;lambda的具體執(zhí)行過程??
Java會在背后辛馆,悄悄的,把這些都還原成匿名類方式豁延。引入Lambda表達式昙篙,目的就是使得代碼更加緊湊,而不是各種接口和匿名類到處飛诱咏。
7;lambda有缺點嗎??
1. 可讀性差苔可,與啰嗦的但是清晰的匿名類代碼結構比較起來,Lambda表達式一旦變得比較長袋狞,就難以理解2. 不便于調試焚辅,很難在Lambda表達式中增加調試信息,比如日志3. 版本支持苟鸯,Lambda表達式在JDK8版本中才開始支持同蜻,如果系統(tǒng)使用的是以前的版本,考慮系統(tǒng)的穩(wěn)定性等原因早处,而不愿意升級湾蔓,那么就無法使用。
8;那什么時候使用?
簡單來說Lambda比較適合用在簡短的業(yè)務代碼中陕赃,并不適合用在復雜的系統(tǒng)中卵蛉,會加大維護成本。
8:參考文獻
http://www.runoob.com/java/java8-lambda-expressions.html
http://how2j.cn/
不足之處;歡迎指正