20145302張薇《Java程式設計》第五週學習總結

20145302張薇發表於2016-04-03

20145302 《Java程式設計》第五週學習總結

教材學習內容總結

第八章

  • try catch
  1. JVM會先嚐試執行try區塊中的內容,若發生錯誤且與catch後面的型別相符,則執行catch區塊中的程式碼。
  2. 若想在捕捉(catch)錯誤之後恢復程式正常執行流程,可以將try、catch區塊放入while迴圈中。
  3. 由於JVM是嘗試執行try區塊,所以一旦發生錯誤被捕捉,那麼這一次的try區塊就相當於沒有執行。
  • 異常繼承架構
  1. 編譯程式認為呼叫System.in.read()時可能發生錯誤,故要求一定要在程式中明確處理錯誤,解決方法如下:
try{
    int ch =System.in.read();
}catch(java.io.IOException ex){
    ex.printStackTrace();
}
  1. 設計錯誤物件都繼承自java.lang.Throwable類,他有兩個子類:java.lang.Error類與java.lang.Exception類。
  2. Error與其子類代表嚴重系統錯誤,如硬體層面錯誤、JVM錯誤或記憶體不足等問題。當Error出現時,基本是無力迴天的。
  3. 若某個方法宣告會丟擲Throwable或子類例項,只要不屬於Error java.lang.RuntimeException或其子類例項,你就必須明確使用try、catch語法處理,或者使用throws宣告這個方法會丟擲異常,否則編譯會失敗。
  4. 受檢異常:API客戶端必須明確處理錯誤。
  5. 非受檢異常:編譯程式不強迫API客戶端在語法上進行處理,但是有可能會引發錯誤。
  6. 規則表示式: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);
}
  1. 若父類異常物件在子類異常物件前被catch,那麼catch子類異常物件的區塊將永遠不會被執行。
  2. 多重捕捉語法。注意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某些異常,子類重新定義該方法時:
  1. 可以不宣告throws任何異常。
  2. 可以throws父類該方法中宣告的某些異常。
  3. 可以throws父類該方法中宣告異常的子類。
  4. 不可以throws父類方法中未宣告的其他異常。
  5. 不可以throws父類方法中宣告異常的父類。
  • 貼心還是麻煩我感覺挺麻煩的,雖然他有用,但是還是麻煩。
  • 使用finally無論你想幹什麼,最後一定要執行關閉資源的動作。try、catch語法可以搭配使用,無論try區塊中有無發生異常,若有finally區塊,則一定會被執行。
  • java.lang.AutoCloseable在try括號中,越後面撰寫的物件資源會越早關閉。
    第九章
  • 具有索引的List
  1. ArrayList一般線上性結構時使用。
  2. LinkedList一般在連結結構時使用。
  • 內容不重複的set顧名思義,內容不重複,set是一個用來找不重複的介面。

教材學習中的問題和解決過程

  • 問題1throw ex;是嘛?
  • 問題2throw到底是幹啥用的,我原以為我把程式碼執行一遍就可以感受到他的作用,結果……我的心好累,我還是不明白。

程式碼除錯中的問題和解決過程

  • 問題1之前我先用C編寫了一個程式,想先把程式粘過來然後改成java的格式,然後我將那個檔案關閉,建立了一個新檔案來敲書上的程式碼,執行時選擇的是新敲的程式碼名稱,但是結果出來如下:
    20145302張薇《Java程式設計》第五週學習總結

為什麼執行了Card52,而不是新敲的程式碼,這我就很不懂了,咋回事。

  • 解決過程1我將Card52裡面的程式內容都刪除了,然後又執行了一遍,結果如下:
    20145302張薇《Java程式設計》第五週學習總結

  • 問題2敲教材P236程式碼,在執行的時候沒有FileUtil選項,不知道這是否與檔案的存取有關。
    20145302張薇《Java程式設計》第五週學習總結

  • 解決過程2結果……8.2.1就說了8.1.3節撰寫的FileUtil範例不是很正確……大兄弟你早說啊……

本週程式碼託管截圖

20145302張薇《Java程式設計》第五週學習總結
20145302張薇《Java程式設計》第五週學習總結

其他(感悟、思考等,可選)

  • 想說一下這周小測驗的感受,真的從髮捲我就懵了,腦子一片混沌,不明白題目要幹啥,不知道從何下筆,是隻用寫這一段?還是主程式也要寫?腦子亂亂的,我的天,現在想想,我的心理素質好差啊。其實,最重要的原因還是實踐少了,自己編的程式碼少,你能看懂再多的程式碼,也不如自己親自編上一段。學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 處理異常

參考資料

相關文章