jdk8學習筆記

JDK8概述

java8,也就是jdk1.8,是意義深遠的一個版本,是java5之后一個大的版本升級,讓java語言和庫獲得新生。
新特性包括:

  1. 隨著大數據的興起,函數式編程在處理大數據的優勢開始體現,引入了lambda函數式編程
  2. 使用了Stream徹底改變了集合的使用方式,只關注結果,不關心過程
  3. 良好設計的日期/時間API
  4. 增強的并發/并行api

為什么需要lamdba表達式

在java編程中,我們無法將函數作為一個參數傳遞給一個方法,也無法聲明一個返回一個函數的方法

什么是lambda表達式

Lambda:In programming languages such as Lisp, Python and Ruby lambda is an operator
used to denote anonymous functions or closures, following the usage of lambda calculus

帶有參數變量的表達式,是一段可以傳遞的代碼,可以被一次或者多次執行,是一種精簡的字面寫法,其實就是匿名內部類中"一定"要做的工作省略掉,然后JVM通過推導把簡化的表達式還原。
java在JDK8之前,匿名內部類的寫法必須創建一個內部類子類的對象,重寫內部類中的方法,其實我們關心的是重寫內部類的方法,不需要創建內部類的子類對象,但是由于java的面向對象,只能有對象調用方法,不能直接調用方法,而lambda表達式彌補了這一缺陷。

lambda表達式的作用

  1. lambda表達式為java添加了缺失的函數式編程的特性
  2. 在函數式編程的語言中,lambda表達式的類型是函數,但是在java中,lambda表達式是對象,它們必須依附于一類特殊的對象類型-函數式接口(functional interface)
  3. 如果一個接口中定義了Object類中的方法,是不算抽象方法的,例如一個接口中定義了抽象方法test和toString兩個方法,他也是函數式接口
  4. java lambda表達式是一種匿名函數;它沒有聲明的方法,即沒有訪問修飾符,返回值聲明和名字
  5. 傳遞行為,而不僅僅是值
  6. 提升抽象層次
  7. API重用性更好

lambda表達式的格式

(參數列表) -> {expression表達式或者方法體}

  • 一個lambda表達式可以有零個或多個參數
  • 參數的類型既可以明確聲明,也可以根據上下文來推斷
  • 所有的參數需包含在圓括號內,參數之間使用逗號相隔
  • 空圓括號代表參數列表為空,
  • 當只有一個參數,且其類型可推導是,圓括號可以省略
  • lambda表達式的主體可包含零條或者多條語句
  • 如果lambda表達式的主體只有一條語句,花括號可以省略。匿名函數的返回類型與該主體表達式一致
  • 如果lambda表達式的主體包含一條以上,則表達式必須包含在花括號{}中,形成代碼塊,匿名函數和返回值類型與代碼塊的返回值類型一致,若沒有返回則為空。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。