20145302 《Java程式設計》第五週學習總結
教材學習內容總結
第八章
- try catch
- JVM會先嚐試執行try區塊中的內容,若發生錯誤且與catch後面的型別相符,則執行catch區塊中的程式碼。
- 若想在捕捉(catch)錯誤之後恢復程式正常執行流程,可以將try、catch區塊放入while迴圈中。
- 由於JVM是嘗試執行try區塊,所以一旦發生錯誤被捕捉,那麼這一次的try區塊就相當於沒有執行。
- 異常繼承架構
- 編譯程式認為呼叫
System.in.read()
時可能發生錯誤,故要求一定要在程式中明確處理錯誤,解決方法如下:
try{
int ch =System.in.read();
}catch(java.io.IOException ex){
ex.printStackTrace();
}
- 設計錯誤物件都繼承自
java.lang.Throwable
類,他有兩個子類:java.lang.Error
類與java.lang.Exception
類。 - Error與其子類代表嚴重系統錯誤,如硬體層面錯誤、JVM錯誤或記憶體不足等問題。當Error出現時,基本是無力迴天的。
- 若某個方法宣告會丟擲
Throwable
或子類例項,只要不屬於Error
java.lang.RuntimeException
或其子類例項,你就必須明確使用try、catch
語法處理,或者使用throws宣告這個方法會丟擲異常,否則編譯會失敗。 - 受檢異常:API客戶端必須明確處理錯誤。
- 非受檢異常:編譯程式不強迫API客戶端在語法上進行處理,但是有可能會引發錯誤。
- 規則表示式:String的
matches()
方法設定\\d*
,用於檢查字串中的字元是不是數字,是則返回ture。
static int nextInt(){
String input =console.next();
while(!input.matches(\\d*)){
System.out.println(“請輸入數字”);
input =console.next();
}
return Integer.parseInt(input);
}
- 若父類異常物件在子類異常物件前被catch,那麼catch子類異常物件的區塊將永遠不會被執行。
- 多重捕捉語法。注意catch括號中列出的異常不得有繼承關係,否則編譯錯誤。JDK7後,以下兩段程式碼相等。
try{
do something...
}catch(IOException e){
e.printStackTrace();
}catch(InterruptedException e){
e.printStackTrace();
}catch(ClassCastException e){
e.printStackTrace();
}
try{
do something...
}catch(IOException | InterruptedException | ClassCastException e){
e.printStackTrace();
}
- 要抓還是拋主要是
throw
的用法。 - 如若使用繼承時,父類某個方法宣告throws某些異常,子類重新定義該方法時:
- 可以不宣告throws任何異常。
- 可以throws父類該方法中宣告的某些異常。
- 可以throws父類該方法中宣告異常的子類。
- 不可以throws父類方法中未宣告的其他異常。
- 不可以throws父類方法中宣告異常的父類。
- 貼心還是麻煩我感覺挺麻煩的,雖然他有用,但是還是麻煩。
- 使用finally無論你想幹什麼,最後一定要執行關閉資源的動作。
try、catch
語法可以搭配使用,無論try區塊中有無發生異常,若有finally區塊,則一定會被執行。 - java.lang.AutoCloseable在try括號中,越後面撰寫的物件資源會越早關閉。
第九章 - 具有索引的List
ArrayList
一般線上性結構時使用。LinkedList
一般在連結結構時使用。
- 內容不重複的set顧名思義,內容不重複,set是一個用來找不重複的介面。
教材學習中的問題和解決過程
- 問題1
throw ex;
是嘛? - 問題2
throw
到底是幹啥用的,我原以為我把程式碼執行一遍就可以感受到他的作用,結果……我的心好累,我還是不明白。
程式碼除錯中的問題和解決過程
- 問題1之前我先用C編寫了一個程式,想先把程式粘過來然後改成java的格式,然後我將那個檔案關閉,建立了一個新檔案來敲書上的程式碼,執行時選擇的是新敲的程式碼名稱,但是結果出來如下:
為什麼執行了Card52,而不是新敲的程式碼,這我就很不懂了,咋回事。
解決過程1我將Card52裡面的程式內容都刪除了,然後又執行了一遍,結果如下:
問題2敲教材P236程式碼,在執行的時候沒有FileUtil選項,不知道這是否與檔案的存取有關。
解決過程2結果……8.2.1就說了8.1.3節撰寫的FileUtil範例不是很正確……大兄弟你早說啊……
本週程式碼託管截圖
其他(感悟、思考等,可選)
- 想說一下這周小測驗的感受,真的從髮捲我就懵了,腦子一片混沌,不明白題目要幹啥,不知道從何下筆,是隻用寫這一段?還是主程式也要寫?腦子亂亂的,我的天,現在想想,我的心理素質好差啊。其實,最重要的原因還是實踐少了,自己編的程式碼少,你能看懂再多的程式碼,也不如自己親自編上一段。學C語言的時候,我就是靠編程式碼來學的,還是得靠實踐來鍛鍊自己。
- 看書看到一處不懂,接著看,發現知識聯絡的很緊密,一個一個的小土堆就會積成一座大山,讓人望而卻步。
- 這兩章都是陌生的東西,要想弄懂各種具體事例,前幾章的基礎很重要。
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 1500行 | 15篇 | 400小時 | |
第一週 | 10/10 | 2/2 | 10/10 | 基礎知識 |
第二週 | 50/100 | 3/3 | 35/35 | 語法知識 |
第三週 | 100/300 | 4/4 | 60/60 | 瞭解物件 |
第四周 | 150/500 | 5/5 | 75/90 | 物件導向 |
第五週 | 200/700 | 6/6 | 90/120 | 處理異常 |