您好,登錄后才能下訂單哦!
java8的基礎知識有什么呢,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1 . 通過行為參數化傳遞代碼
a) Java8之前主要體現在策略模式(java.io.FilenameFilter)上,以前的時候我們通常需要傳遞一個匿名對象或者實例化具體類才能達到;
b) Java8可以將方法作為參數傳遞,這是在以前版本所不具有的,文中稱這為一等函數,達到了與值(一等公民)的權利
2 . Lambda表達式
實現了把代碼傳給方法的方式,能夠少些代碼,而且可以實現解耦與代碼復用,而且看起來很有條理,而且提供了并行以及自定義收集器,而且進行數據的統計的時候非常方便
1.匿名/函數/傳遞/簡潔
2.函數式接口(@functionalinterface)/函數描述符(函數式接口的抽象方法的簽名基本上就是Lambda表達式的簽名,我們將這種方法叫做函數描述符,例如Runnable接口可以看作是一個什么也不接受什么也不返回的函數簽名)。
3.環繞執行模式(try(BufferedReader br=new BufferedReader(new FileReader("data.txt")))){},這樣只能夠讀取1行,如果2行,需要封裝成個processFile((BufferedReader br)->br.readLine()+br.readLine())--->所以需要自定義一個功能函數接口并且自主拋出異常(return p.process(br))。
4.幾個新的函數式接口:
1.Predicate test()方法 -->T->Boolean
2.Consume的accept()方法--->T->()
3.Supplier的get()方法--->()->T
4.Function的apply()方法----》將T轉換成R
5.UnaryOperator<T>--->extends Function(表示操作符,可用于計算)
6.BiFunction/BiPredicate/BinaryOperate(Extends BiFunction)(Bi表示接受兩個函數返回1個)
5.泛型(偽泛型)+(泛型數組)+(泛型擦除(Object/邊界))+頻繁的拆裝箱(IntPredicate/LongPredicate(泛型特化))
6.任何函數式接口都不允許拋出受檢異常(異常分為Error與Exception,Exception分為運行時異常(RuntimeException及其子類)與非運行時異常(編譯異常,必須手動拋出捕獲異常,否則或報錯,如IOException與ClassNotFoundException)),所以需要lambda表達式來拋出異常的話 1.自己通過@FunctionalInterface來定義一個函數式接口,里面定義的方法throws IOException和自己用try/catch來顯示定義異常。
7.類型檢查/類型推斷以及限制( Callable<Integer> c=()->42; PrivilegeAction<INteger> p=()->42;(Java的安全模型里面的,用于某些具有優先級的判斷))。只要函數式接口要求的類型轉換滿足,同一個Lambda表達式就可以作用于不同的函數式接口。Java7引入的菱形運算符,利用泛型推斷從上下文推斷類型的思想。(注:特殊的void兼容:void可以兼容是語句表達式的 如:Predicate<String> p=s->list.add(s) 和Consume<String> b=s->s.add(s));類型推斷是Lambda可以省略具體類型的基礎;
8.Lambda表達式可以沒有限制的捕獲實例變量和靜態變量,但局部變量有限制(必須顯示或者隱式的是final的),也就是只能捕獲指派給他們的局部變量一次。(因為實例變量保存在堆里面,堆中可以共享,但局部變量保存在棧里面,而且隱式表明他們僅限于當前線程)。
9.方法引用 Comparator::comparing ArrayList::new 對構造函數進行引用 1個變量 supplier=Constructor::new get 2個變量用function=ConStruction::new apply 3個變量的話可以自己構造可以接受3個變量的Function函數。
10.Lambda表達式的復合(多個Lambda表達式復合成復雜的表達式); 1.比較器復合 Comparing.thenComparing 2.謂詞復合and or(從左到右確定優先級)3.函數復合 f.andThen(g)--g(f(x)) f.compose(g)--f(g(x))
這一部分是整本書的核心部分,里面每個章節都要細看(filter, skip, limit, reduce, map, findAny, forEach,collect)
1. 默認方法: 這算是Java8的一大亮點吧
2. 引入Optional替代null: 從Guava中引入但又只是個半成品,說有用也是有用的,說沒有用也可以,使用Optional應該是一種理念吧。
3. 新的日期時間API: 從joda引入但依然是半成品,并沒有感覺出相對于現在Date&Calendar&Joda有什么優勢,比較雞肋的補充
關于java8的基礎知識有什么呢問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。