20172324 2017-2018-2 《程序設計與數據結構》第九周學習總結

20172324 2017-2018-2 《程序設計與數據結構》第九周學習總結

教材學習內容總結

  • 異常html

    1. 在 Java 中,全部的異常都有一個共同的祖先 Throwable。Throwable 指定代碼中可用異常傳播機制經過 Java 應用程序傳輸的任何問題的共性。java

    2. Java的異常(包括Exception和Error)分爲可查的異常(編譯器要求必須處置的異常)和不可查的異常(編譯器不要求強制處置的異常)。git

    3. 在 Java 應用程序中,異常處理機制爲:拋出異常,捕捉異常。也就是說,一個方法所能捕捉的異常,必定是Java代碼在某處所拋出的異常。簡單地說,異常老是先被拋出,後被捕捉的。數組

    4. 在Java中,異常經過try-catch語句捕獲。其通常語法形式爲:網絡

try {  
    // 可能會發生異常的程序代碼  
} catch (Type1 id1){  
    // 捕獲並處置try拋出的異常類型Type1  
}

匹配的原則是:若是拋出的異常對象屬於catch子句的異常類,或者屬於該異常類的子類,則認爲生成的異常對象與catch塊捕獲的異常類型相匹配。數據結構

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

  • 問題1: 異常錯誤有什麼不一樣。
  • 問題1解決方案:異常指不期而至的各類情況,如:文件找不到、網絡鏈接失敗、非法參數等。異常是一個事件,它發生在程序運行期間,干擾了正常的指令流程。Java通 過API中Throwable類的衆多子類描述各類不一樣的異常。於是,Java異常都是對象,是Throwable子類的實例,描述了出如今一段編碼中的錯誤條件。當條件生成時,錯誤將引起異常。

Exception(異常):是程序自己能夠處理的異常。
Exception 類有一個重要的子類 RuntimeException。RuntimeException 類及其子類表示「JVM 經常使用操做」引起的錯誤。例如,若試圖使用空值對象引用、除數爲零或數組越界,則分別引起運行時異常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。學習

Error(錯誤):是程序沒法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操做無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,Java虛擬機運行錯誤(Virtual MachineError),當 JVM 再也不有繼續執行操做所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)通常會選擇線程終止。ui

簡單來講,異常和錯誤的區別:異常能被程序自己能夠處理,錯誤是沒法處理。編碼

  • 問題2:有無finally的區別
  • 問題2解決方案:在上面說明的try-catch語句的語法格式,下面這個就是有了finally語句的語法格式
try {  
    // 可能會發生異常的程序代碼  
} catch (Type1 id1) {  
    // 捕獲並處理try拋出的異常類型Type1  
} finally {  
    // 不管是否發生異常,都將執行的語句塊  
}

可是finally也有不被執行的狀況,在如下4種特殊狀況下,finally塊不會被執行:
1)在finally語句塊中發生了異常。
2)在前面的代碼中用了System.exit()退出程序。
3)程序所在的線程死亡。
4)關閉CPU。

  • 問題3:throw和throws的差異。
  • 問題3解決方案:

    • throws: 用在方法聲明後面,跟的是異常類名
      能夠跟多個異常類名,用逗號隔開
      表示拋出異常,由該方法的調用者來處理
      throws表示出現異常的一種可能性,並不必定會發生這些異常

    • throw:
      用在方法體內,跟的是異常對象名
      只能拋出一個異常對象名 表示拋出異常,由方法體內的語句處理 throw則是拋出了異常,執行throw則必定拋出了某種異常

  • 問題4:IO流
  • 問題4解決方案:I/O異常有可能產生的異常太多了,我選擇看API
  • 問題5:迭代和遞歸的差異
  • 問題5解決方案:簡單來睡,迭代與遞歸其實均可以解決同一個問題,重點在於哪一個方法更方便。下面用一個簡單的例子來講一下迭代與遞歸的區別

電影故事例證:
迭代——《明日邊緣》
遞歸——《盜夢空間》

遞歸:
】】】
】】】】】】
...
】】】】】】】】】
】】】】】】】】】】】】
】】】】】】】】】
...
】】】】】】
】】】
迭代:
】】】
】】】
】】】
】】】
...
】】】

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

  • 問題1:上週遇到的sorting沒法編譯的問題

  • 問題1解決方案:解決辦法是在類前面加@SuppressWarnings("unchecked"),而後編譯的時候加上-Xlint:unchecked
  • 問題2:要如何解決識別done中止的問題,我以前作的嘗試不是死循環就是有沒有done都能獲得同樣的結果

  • 問題2解決方案:str.length() -4 , str.length() ).equals("DONE")利用這個識別是否有DONE的部分

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

  1. Polymorphism is achieved by
    A . overloading
    B . overriding
    C . embedding
    D . abstraction
    E . encapsulation
    overloading重載 overriding重寫 實現多態要重寫裏面的方法

  2. Which statement is completely true?
    A . Java upcasts automatically, but you must explicitly downcast
    B . Java downcasts automatically, but you must explicitly upcast
    C . Java expects the user to explicitly upcast and downcast
    D . Java will both upcast and downcast automatically
    E . The rules for upcasting and downcasting depend upon whether classes are declared public, protected, or private
    Java會自動向上轉換,但您必須顯式地向下轉換

  3. Can a program exhibit polymorphism if it only implements early binding?
    A . Yes, because one form of polymorphism is overloading
    B . No, because without late binding polymorphism cannot be supported
    C . Yes, because so long as the programs uses inheritance and/or interfaces it supports polymorphism
    D . Yes, because early binding has nothing to do with polymorphism
    E . none of the above
    早期綁定不能稱爲多態,重載只是爲具備不一樣參數列表的方法提供了替代方法。

  4. The fact that the System.out.println( ) method is able to handle such a wide variety of objects, and print them correctly, is an example of the polymorphic nature of the println( ) method.
    A . true
    B . false
    println()在本質上是高度多態的。

  5. A class reference can refer to any object of any class that descends from the class.
    A . true
    B . false
    這是使用類名來聲明引用變量

結對及互評

寫在評論裏

點評過的同窗博客和代碼

  • 本週結對學習狀況

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

🙂

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 1/2 20/20
第二週 329/500 2/3 18/38
第三週 619/1000 2/5 22/60
第四周 817/1734 2/7 38/98
第五週 674/2408 1/9 30/128
第六週 1136/2870 2/10 30/158
第七週 1000/3791 1/11 32/190
第八週 2662/6453 2/13 48/238
第九周 782/7573 2/15 48/238

參考資料

相關文章
相關標籤/搜索