JVM會嘗試執行try區塊中的程序代碼,若是發生錯誤,執行流程會跳離錯誤發生點,而後比較catch區塊中聲明的類型,是否符合被拋出的錯誤對象類型,若是是的話,就執行catch區塊中的程序代碼。
不管try區塊中有無發生異常,若撰寫有finally區塊,則finally區塊必定會被執行。finally區塊會先執行完後,在將值返回。
一個try所包括的區塊,必須有對應的catch區塊,能夠有多個catch,finally無關緊要,若是沒有定義catch,則必定要有finally區塊。html
設計錯誤對象都繼承自java.lang.Throwable
類,Throwable定義取得錯誤信息、堆棧追蹤等方法,它有兩個子類:java.lang.Error
與java.lang.Exception
。
Error對象拋出時,基本上不用處理,任其傳播至JVM爲止。
若是爲程序自己設計錯誤,使用Exception或其子類實例來表現,必須使用try、catch語句加以處理,或使用throws拋出異常。java
throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。
throws語句用在方法聲明後面,表示再拋出異常,由該方法的調用者來處理。git
throws主要是聲明這個方法會拋出這種類型的異常,使它的調用者知道要捕獲這個異常。
throw是具體向外拋異常的動做,因此它是拋出一個異常實例。數組
throws說明你有那個可能,傾向。
throw的話,那就是你把那個傾向變成真實的了。架構
throws出如今方法函數頭;而throw出如今函數體。
throws表示出現異常的一種可能性,並不必定會發生這些異常;throw則是拋出了異常,執行throw則必定拋出了某種異常。函數
嘗試關閉資源語句可套用的對象,必須操做java.lang.AutoCloseable
接口,可同時關閉兩個以上的對象資源,中間以逗號分隔。在try中,越後面的對象資源會越早被關閉。學習
Collection架構
直接繼承Collection接口的有List
List 以特定次序來持有元素。
用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,容許直接按序號索引元素。
LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。LinkedList能夠被看成堆棧和隊列來使用。設計
Set裏的元素是不能重複的,元素重複與否使用equals()
和hashCode
方法進行判斷的。
HashSet
類的集合不能夠按索引號去檢索其中的元素。
TreeSet
是一個有序集合,TreeSet中的元素將按照升序排列,缺省是按照天然排序進行排列,在構造TreeSet對象時,使用Comparator接口做爲比較器對象。調試
Queue
架構。
Map架構
Map 是映射接口,Map中存儲的內容是鍵值對。
AbseractMap
TreeMap 繼承於AbstractMap,且實現了NavigableMap接口;所以,TreeMap中的內容是有序的鍵值對。
HashMap 繼承於AbstractMap,但沒實現NavigableMap接口;所以,HashMap的內容是鍵值對,但不保證次序。
Hashtable的內容也是「鍵值對,也不保證次序」。但和HashMap相比,它支持經過Enumeration去遍歷。
Lambda表達式的語法省略了接口類型與方法名稱,->左邊是參數列,右邊是方法本體。
Request
編譯程序能夠由Request request
的聲明中得知語法上被省略的信息。
Interable和Iterator
List,Set,Queue都有iterator()
方法和行爲,可使用Iterator的hasNext()
查看有無下一個對象,如有,則用next
取得下一個對象。
Iterable可以使循環更加簡化。
static void XXX(Iterable iterable) {
for(Object o:iterable) {
System.out.println(o);
}
}
Comparable與Comparator
Collect的sort
方法在取得a對象與b對象進行比較時,調用a.compare(b)
,若是a對象順序上小於b對象則返回小於0的值,若順序上相等則返回0,若順序上a大於b則返回大於0的值。
Comparator的compare()
會傳入兩個對象,而且在List上增長了Sort()
方法,可接受Comparator實例來指定排序方式。
使用泛型語法,可在設計API時能夠指定類或方法支持泛型,適當地使用泛型語句,語法上能夠更加簡潔,編譯程序時也能夠事先作類型檢查。
xx1問題
TreeSet裏面放對象,若是同時放入了父類和子類的實例對象,那比較時使用的是父類的compareTo方法,仍是使用的子類的compareTo方法,仍是拋異常。
xx1解決方案
查詢資料得:
若是子類和父類都複寫了compareTo方法那麼各自調用本身的compareTo方法。
若是子類沒有複寫compareTo方法,那麼調用的都是父類的compareTo方法。
xx2問題
對於Queue缺少了解。
xx2解決方案
Queue方法 做用 異常形式
add 增長一個元索 , 若是隊列已滿,則拋出一個IIIegaISlabEepeplian異常
remove 移除並返回隊列頭部的元素 , 若是隊列爲空,則拋出一個NoSuchElementException異常
element 返回隊列頭部的元素, 若是隊列爲空,則拋出一個NoSuchElementException異常
element 返回隊列頭部的元素 , 若是隊列已滿,則返回false
offer 添加一個元素並返回true, 若是隊列爲空,則返回null
poll 移除並返問隊列頭部的元素 , 若是隊列爲空,則返回null
peek 返回隊列頭部的元素, 若是隊列滿,則阻塞
put 添加一個元素, 若是隊列滿,則阻塞
take 移除並返回隊列頭部的元素, 若是隊列爲空,則阻塞
xx1問題
xx1解決方案
在class定義前加上一行:
@SuppressWarnings("unchecked")
來避免終端的警告。
xx2問題
xx2解決方案
還沒有解決。
代碼提交過程截圖:
代碼量截圖:
javac -d . *.java
。equals()
方法時,必定同時實現hashCode()
方法。結對對象:20155238 張景禹
張景禹同窗本週對於java的學習較爲認真,天天有翻閱教材並閱讀學習指導。
兩人在學習過程當中一直不斷相互解決代碼運行中出現的問題以及課本的難點內容的討論。
惟一不足的是張同窗代碼提交較少,沒有天天提交代碼的習慣,在從此的學習過程當中將加以督促。
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
6 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
7 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分
基於評分標準,我給本博客打分:(0-10)。得分狀況以下:xxx
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 6/6 | 1/4 | 20/20 | |
第二週 | 334/340 | 1/5 | 18/38 | |
第三週 | 570/900 | 1/6 | 22/60 | |
第四周 | 544/1358 | 1/7 | 30/90 | |
第五週 | 731/2089 | 1/8 | 30/90 | 瞭解了java中的架構,排序,以及異常處理 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
計劃學習時間:20小時
實際學習時間:23小時
改進狀況: