天天看點

Java第五周學習總結

20145307 《Java程式設計》第五周學習總結

教材學習内容總結

C8

使用try、catch打包System.in.read(),聲明throws java.io.IOException。

·如果父類異常對象在子類異常前被捕捉,則catch子類異常對象的區塊将永遠不會被執行。

·catch括号中列出的異常不得有繼承關系,否則會發生編譯錯誤。

·在catch區塊進行完部分錯誤處理之後,可以使用throw将異常再抛出。

·操作對象異常無法使用try、catch處理時,可由方法的用戶端一句當時調用的環節資訊進行處理,使用throw聲明會抛出的異常類型或父類。

·如果使用繼承時,父類某個方法聲明throws某些異常,子類重新定義該方法時可以:①不聲明throws任何異常②throws父類該方法中聲明的某些異常③throws父類該方法中聲明異常的子類④throws父類方法中未聲明的其他異常⑤throws父類方法中聲明異常的父類。在多重方法調用下,異常發生點可能是在某個方法之中,若想得知異常發生的根源,以及多重方法調用下的堆棧傳播,可以利用異常對象自動收集的堆棧追蹤來取得相關資訊,例如調用異常對象的printStackTrace()。

·FileUtil中通過Scanner搭配FileInputStream來讀取文檔,實際上Scanner對象有close方法,可以關閉Scanner相關資源與搭配的FileInputSream.斷言是判定程式中的某個執行點必然是或不是某個狀态,是以不能當作像if之類的判斷式來使用,assert不應當作程式執行流程的一部分。

·若想最後一定要執行關閉資源的動作,try、catch文法可以搭配finally,無論try區塊中有無發生異常,若撰寫有finally區塊,則finally區塊一定會被執行。

·若程式撰寫先return。而且有finally區塊,那麼這個區塊會先執行,然後再講傳回值傳回。

·嘗試關閉資源文法:想要嘗試自動關閉資源的對象,是撰寫在try之後的括号中,如果無須catch處理任何異常,可以不用撰寫,也不用撰寫finally自行嘗試關閉資源。

·嘗試關閉資源文法可套用的對象,必須操作java.lang.AutoCloseable接口

·嘗試關閉資源文法也可以同時關閉兩個以上的對象資源,隻要中間以分号分隔

C9

·JavaSE中提供了滿足各種需求的API,收集對象的行為,都定義在java.collection中,既能收集對象也能驅逐對象。

·如果手機是具有索引順序,可以使用數組。

·List是一種Collection,作用是收集對象,并以索引的方式保留手機的對象順序

·ArrayListArrayList特性:數組在記憶體中會是連續的線性空間,根據索引随機存取時速度快,如果操作上有這類需求時,像是排序,就可使用ArrayList,可得到較好的速度表現。

·LinkedList在操作List接口時,采用了連結(Link)結構。

·在收集過程中若有相同對象,則不再重複收集,如果有這類需求,可以使用Set接口的操作對象。

·HashSet的操作概念是,在記憶體中開設空間,每個空間會有個哈希編碼。;Queue繼承自Collection,是以也具有Collection的add()、remove()、element()等方法,然而Queue定義了自己的offer()、poll()與peek()等方法,最主要的差别之一在于:add()、remove()、element()等方法操作失敗時會抛出異常,而offer()、poll()與peek()等方法操作失敗時會傳回特定值。

·如果對象有操作Queue,并打算以隊列方式使用,且隊列長度受限,通常建議使用offer()、poll()與peek()等方法。LinkedList不僅操作了List接口,與操作了Queue的行為,是以可以将LinkedList當作隊列來使用。

·隊列的前端與尾端進行操作,在前端加入對象與取出對象,在尾端加入對象與取出對象,Queue的子接口Deque就定義了這類行為;java.util.ArrayDeque操作了Deque接口,可以使用ArrayDeque來操作容量有限的堆棧。泛型文法:類名稱旁有角括号<>,這表示此類支援泛型。實際加入的對象是用戶端聲明的類型。

·匿名類文法來說,Lambda表達式的文法省略了接口類型與方法名稱,->左邊是參數列,而右邊是方法本體;在Lambda表達式中使用區塊時,如果方法必須有傳回值,在區塊中就必須使用return。interator()方法提升至新的java.util.Iterable父接口。

·Collections的sort()方法要求被排序的對象必須操作java.lang.Comparable接口,這個接口有個compareTo()方法必須傳回大于0、等于0或小于0的數;Collections的sort()方法有另一個重載版本,可接受java.util.Comparator接口的操作對象,如果使用這個版本,排序方式将根據Comparator的compare()定義來決定。

·在java的規範中,與順序有關的行為,通常要不對象本身是Comparable,要不就是另行指定Comparator對象告知如何排序;若要根據某個鍵來取得對應的值,可以事先利用java.util.Map接口的操作對象來建立鍵值對應資料,之後若要取得值,隻要用對應的鍵就可以迅速取得。常用的Map操作類為java.util.HashMap與java.util.TreeMap,其繼承自抽象類java.util.AbstractMap。

·Map也支援泛型文法,如使用HashMap的範例:

·如果使用TreeMap建立鍵值對應,則鍵的部分則會排序,條件是作為鍵的對象必須操作Comparable接口,或者是在建立TreeMap時指定操作Comparator接口的對象。

Properties類繼承自Hashtable,HashTable操作了Map接口,Properties自然也有Map的行為。雖然也可以使用put()設定鍵值對應、get()方法指定鍵取回值,不過一般常用Properties的setProperty()指定字元串類型的鍵值,getProperty()指定字元串類型的鍵,取回字元串類型的值,通常稱為屬性名稱與屬性值。

·如果想取得Map中所有的鍵,可以調用Map的keySet()傳回Set對象。由于鍵是不重複的,是以用Set操作傳回是理所當然的做法,如果想取得Map中所有的值,則可以使用values()傳回Collection對象。

·如果想同時取得Map的鍵與值,可以使用entrySet()方法,這會傳回一個Set對象,每個元素都是Map.Entry執行個體。可以調用getKey()取得鍵,調用getValue()取得值。

代碼調試中的問題和解決過程

這周我沒有敲打代碼,隻是單純的看書總結知識點,清明假期提前一天回來開始實際學習89章節。