20155216 2016-2017-2 《Java程序設計》第五周學習總結
教材學習內容總結
使用try,catch,finally處理異常
JVM會嘗試執行try區塊中的程序代碼,如果發生錯誤,執行流程會跳離錯誤發生點,然后比較catch區塊中聲明的類型,是否符合被拋出的錯誤對象類型,如果是的話,就執行catch區塊中的程序代碼。
無論try區塊中有無發生異常,若撰寫有finally區塊,則finally區塊一定會被執行。finally區塊會先執行完后,在將值返回。
一個try所包括的區塊,必須有對應的catch區塊,可以有多個catch,finally可有可無,如果沒有定義catch,則一定要有finally區塊。
異常繼承架構
設計錯誤對象都繼承自java.lang.Throwable
類,Throwable定義取得錯誤信息、堆棧追蹤等方法,它有兩個子類:java.lang.Error
與java.lang.Exception
。
Error對象拋出時,基本上不用處理,任其傳播至JVM為止。
如果為程序本身設計錯誤,使用Exception或其子類實例來表現,必須使用try、catch語句加以處理,或使用throws拋出異常。
throw、throws的使用時機
throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。
throws語句用在方法聲明后面,表示再拋出異常,由該方法的調用者來處理。
throws主要是聲明這個方法會拋出這種類型的異常,使它的調用者知道要捕獲這個異常。
throw是具體向外拋異常的動作,所以它是拋出一個異常實例。
throws說明你有那個可能,傾向。
throw的話,那就是你把那個傾向變成真實的了。
throws出現在方法函數頭;而throw出現在函數體。
throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是拋出了異常,執行throw則一定拋出了某種異常。
嘗試關閉資源
嘗試關閉資源語句可套用的對象,必須操作java.lang.AutoCloseable
接口,可同時關閉兩個以上的對象資源,中間以逗號分隔。在try中,越后面的對象資源會越早被關閉。
Collection與Map
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表達式
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解決方案
尚未解決。
代碼托管
-
代碼提交過程截圖:
-
代碼量截圖:
上周考試錯題總結
- 1、使用JDB進行調試時單步執行命令有step和next,優先使用next。
- 2、"Hello".charAt(1)的值是‘e’。
- 3、"hello".substring(0,2)的值是"He"。
- 4、不能用父類聲明對象引用,用子類生成對象。
- 5、編譯RPG.java的命令是
javac -d . *.java
。 - 6、實現一個類中的
equals()
方法時,一定同時實現hashCode()
方法。
結對及互評
結對對象:20155238 張景禹
張景禹同學本周對於java的學習較為認真,每天有翻閱教材並閱讀學習指導。
兩人在學習過程中一直不斷相互解決代碼運行中出現的問題以及課本的難點內容的討論。
唯一不足的是張同學代碼提交較少,沒有每天提交代碼的習慣,在今后的學習過程中將加以督促。
評分標准(滿分10分)
-
從0分加到10分為止
-
正確使用Markdown語法(加1分):
- 不使用Markdown不加分
- 有語法錯誤的不加分(鏈接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
-
模板中的要素齊全(加1分)
- 缺少“教材學習中的問題和解決過程”的不加分
- 缺少“代碼調試中的問題和解決過程”的不加分
- 代碼托管不能打開的不加分
- 缺少“結對及互評”的不能打開的不加分
- 缺少“上周考試錯題總結”的不能加分
- 缺少“進度條”的不能加分
- 缺少“參考資料”的不能加分
-
教材學習中的問題和解決過程, 一個問題加1分
-
代碼調試中的問題和解決過程, 一個問題加1分
-
本周有效代碼超過300分行的(加2分)
- 一周提交次數少於20次的不加分
6 其他加分:
- 周五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進情況的加1分
- 有動手寫新代碼的加1分
- 課后選擇題有驗證的加1分
- 代碼Commit Message規范的加1分
- 錯題學習深入的加1分
7 扣分:
- 有抄襲的扣至0分
- 代碼作弊的扣至0分
點評模板:
-
基於評分標准,我給本博客打分:(0-10)。得分情況如下:xxx
點評過的同學博客和代碼
其他(感悟、思考等,可選)
- 1、對於第8、9章的學習最大的感受就是了解了異常繼承架構、Map架構和Collection架構,認識到了java的架構形式。
- 2、使用try、catch、finally處理異常是java的一大特點。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 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小時
-
改進情況: