方法參考的特性,在重用現有的API上扮演了重要的角色。重用現有方法操做,能夠避免處處寫下lambda表達式。方法參考不只避免了重複撰寫lambda表達式,也可讓程序代碼更爲清楚。html
在只有lambda表達式的狀況下,參數的類型必須寫出來,若是有目標類型的話,在編譯程序能夠推斷出類型的狀況下能夠不寫出lambda表達式的參數類型。lambda表達式自己是中性的,不表明任何類型的實例,一樣的lamb表達式能夠用來表示不一樣目標類型的對象操做。java
lambda並無導入新類型來做爲lambda表達式的類型,而是就現有的interface語法來定義函數接口,做爲lambda表達式的目標類型。函數接口就是接口,可是要求僅僅具備單一抽象方法,許多現存的接口都是這種接口,例如標準API中的Runnable、Callable、Comparator等。git
匿名類有其應用的場合,在許多時候特別是接口只有一個的方法要操做時,只需關心參數和操做自己而不是雷和方法名稱,lambda表達式只關心方法命名上的參數和返回定義,但忽略方法名稱。windows
JDK8對interface語法作了演進容許有默認方法操做。ide
lambda表達式並非匿名類的語法蜜糖。認爲lambda表達式是在哪一個名稱範疇就能參考該範疇內的名稱,像是變量和方法。在JDK8中,若是變量自己等效於final局部變量也就是說,若是變量不會再匿名類中又從新指定的動做,就能夠不用加上final關鍵詞。若是lambda表達式中捕獲的局部變量自己等效於final局部變量,能夠不用再局部變量上加上final。在lambda中不能修改局部變量的值。函數
只要靜態方法的方法名稱命名中參數和返回值定義相同,也可使用靜態方法來定義函數接口操做。學習
除了參考靜態方法做爲函數接口操做以外,還能夠參考特定對象的實例方法。函數接口操做也能夠參考類上定義的非靜態方法,函數接口會試圖用第一個參數方法接收者,而以後的參數依次做爲被參考的非靜態方法的參數。JDK8還提供了構造函數參考,用來重用現有API的對象構建流程。ui
調用方法時若是返回類型是Optional,它可能包含值也可能不包含值。JDK8中定義的通用函數接口,基本上放置於java.util。function套件之中,就行爲來講,基本上能夠分爲Consumer、Function、Predicate與Supplier四個類型。.net
JDK8中引入StreamAPI,也引入了管道操做風格,一個管道基本上包括了幾個部分:來源,零或多箇中間操做,一個最終操做。線程
GMT時間如今已經不做爲標準時間使用,但GMT時間經常被當成UTC時間。在導入UTC時間以前,GMT和UT是相同的。UTC時間是具備折中修正版本的世界協調時間,這是爲了保持TAI和UT時間不要相差太大,UTC時間採用了閏秒修正。
Unix系統的時間表示法定義爲UTC時間的1970年1月1日0時0分0秒爲起點通過的秒數,不考慮閏秒修正,用以表達時間軸上的某一瞬間。Epoch爲某個特定時代的開始,時間軸上的某一瞬間。各個國家修改日曆的時間並不相同,因此在Unix或者Linux中查詢1752年9月會發現時間少了11天。
ISO8601在嚴格意義上並不是年曆系統而是時間日期表示方法的標準,用以統一時間日期的數據交換格式,ISO8601在數據定義上大部分與格里高日曆相同,但有些細微差異。在ISO8601的定義中19世紀是1900-1999年,而在格里高日曆中19世紀是1801-1900年。
取得系統時間的方法之一是使用System.currentTimeMillis()
方法返回的是long
類型的整數表示從1970年1月1日0時0分0秒到如今通過的毫秒數。時間起點和Unix時間起點是相同的,此方法得到的時間是機器觀點表明時間軸上的某一瞬間,對人類來講沒有閱讀意義。
JDK8新時間日期處理API中最重要的就是清楚地將機器對時間的概念和人類對時間的概念區分開來,讓時間與人類對時間的概念的界限變得分明。
Button bt = new Button(); bt.addActionListener(event -> { ui.showSomething(); });
File dir = new File("/an/dir/"); File[] dirs = dir.listFiles((File f) -> { System.out.println("Log:..."); return f.isDirectory(); } );
關於使用Lambdas排序集合的問題:根據成員的name, surname, name長度以及最後一個字母,使用Comparator 類來排序集合,首先根據name來排序list。
不用lambda表達式的辦法:
String[] players = { "Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer", "Roger Federer", "Andy Murray", "Tomas Berdych", "Juan Martin Del Potro", "Richard Gasquet", "John Isner"}; Arrays.sort(players, new Comparator<String>() { @Override public int compare(String s1, String s2) { return (s1.compareTo(s2)); } });
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2)); Arrays.sort(players, sortByName); //或者用另一種寫法 Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));
E .copy f1.txt | f2.tx
public class ThreadTest { public static void main(String args[]){ MyThread myThread =new MyThread(); Thread t1=new Thread(myThread); Thread t2=new Thread(myThread); t1.start(); t2.start(); } } class MyThread extends Thread { ... }
A .1
B .2
C .3
D .4
A .Thread.sleep()
B .wait()
C .notify()
D .interrupt()
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 20篇 | 400小時 | |
第一週 | 10/10 | 1/4 | 12/12 | |
第二週 | 120/130 | 1/5 | 9/21 | |
第三週 | 210/340 | 1/6 | 9/30 | |
第四周 | 460/800 | 1/7 | 9/39 | |
第五週 | 400/1200 | 1/8 | 9/48 | |
第六週 | 300/1500 | 1/9 | 9/57 | |
第七週 | 300/1800 | 1/10 | 9/66 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
計劃學習時間:9小時
實際學習時間:9小時
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)