20182331 2019-2020-1《數據結構與面向對象程序設計》第6周學習總結

20182331 2019-2020-1 《數據結構與面向對象程序設計》第6周學習總結

教材學習內容總結

  • 後綁定:

1.術語「多態性」能夠理解爲「有許多形式」,一個「多態性引用」是能夠在不一樣時間指向不一樣類型對象的引用變量。利用多態性調用的方法可以由一個調用改變爲另外一個調用。html

2.在多數狀況下,綁定發生在編譯階段,但對於多態性引用,這種綁定要延遲到程序運行時才能執行。java

3.後綁定的效率低於編譯階段綁定效率,由於後綁定須要在程序執行期間決定所要綁定的定義方法。git

4.在Java中,能夠用兩種方式創建多態性引用:繼承方式和接口方式。程序員

  • 由繼承實現多態性:

1.一個引用變量能夠指向有繼承關係的任何類的任何對象。數組

2.一個object引用能夠指向任何對象,由於全部類歸根結底都是object類的後代類。安全

3.實際將調用的方法版本取決於對象的類型而不是引用變量的類型。數據結構

4.多態性的實質是,每一個類很清楚本身如何完成一個指定的行爲,並從某種意義來說,每一個類的行爲是相同的。多態機制容許用具備一致性但又獨特的方式處理相似的對象。函數

  • 利用接口實現多態性:

1.類名能夠用於聲明對象引用變量,相似地,接口名也能夠用作聲明對象引用變量的類型。一個接口引用變量能夠指向任何實現該接口的類的對象。學習

2.一個接口引用變量能夠指向實現該接口的任何類的任何對象。設計

3.像基於繼承的多態性引用同樣(父類名可用作方法參數的類型),接口名也能夠用作方法參數的類型,使得任何實現贊成接口的類對象均可以做爲參數傳給方法。
第10章 異常

  • 異常處理:

1.錯誤和異常都是對象,表明非正常狀況或無效處理。

2.常見的異常問題:

  • 試圖作除以0的操做。
  • 數組索引越界。
  • 找不到指定的文件。
  • 不能正常完成被請求的I/O操做。
  • 使用了空引用。
  • 執行的操做違反了某種安全規則。

3.處理異常的三種方法

  • 根本不處理異常。
  • 當異常發生時處理異常。
  • 在程序的某個位置集中處理異常。

  • 未捕獲的異常:

1.異常拋出時所輸出的信息,提供了方法調用堆棧蹤影。

2.若是程序中不處理異常,則程序將非正常的終止運行,併產生關於描述在何處發生什麼異常的信息。第一行異常信息代表拋出的是什麼異常,並提供了拋出該異常的緣由。其餘行的信息是方法調用蹤影信息,指明異常在何處發生。經過調用被拋出異常類的方法,也能夠得到調用堆棧蹤影。getMessage方法返回一個字符串,解釋異常拋出的緣由;printStackTrace方法輸出調用堆棧蹤影信息。

  • try-catch語句:

1.ry-catch語句用來標誌可能拋出異常的語句塊,catch子句跟在try語句塊後,用於定義如何處理一種指定的異常。

2.try { 語句塊 } catch(類型名 標識符) { 語句塊 }

3.執行try語句塊時,若是沒有異常拋出,將繼續執行try-catch結構語句後的語句,這是正常狀況執行流程。

4.若是try語句塊執行的任何位置拋出了異常,而且存在catch子句,則控制當即轉移到相應的catch子句處理異常,即控制轉移到第一個與拋出異常相匹配的catch子句執行,執行完以後,跳出try-catch語句結構繼續執行。

  • finally子句:

1.有點像switch語句中的default語句,不管怎麼樣,這個語句必定會執行。若是有finally子句,那必定要排在catch子句後,除非沒有catch子句。不管try語句塊正常退出或因爲拋出異常而退出,都將執行finally子句,所以能夠利用finally子句管理資源或保證必定執行某段代碼。

  • 異常的傳遞:

1.若是在上級調用方法中仍然沒有捕獲和處理下級傳上來的異常,則控制將返回到上級調用方法的更上一級調用方法,這個過程叫作傳遞異常。異常將一直傳遞下去,直到被捕獲和處理,或直到異常傳遞出main方法,這時將終止程序的運行併產生錯誤信息。

2.若是在一個異常的發生處沒有處理和捕獲異常,控制將當即返回產生該異常的方法的上一級調用方法,所以能夠將程序設計爲在上級調用方法(外層調用)中捕獲和處理異常。

  • 異常類參次結構:

1.定義各類的類由繼承關係關聯在一塊兒。
Throwable是Error類和Exception類的父類。許多異常的類型都是由Exception
類派生,而在這些類中也有許多子類。
雖然這些高層的類定義在java.lang包裏,但定義各類異常的子類卻分散定義在其餘幾個包中,繼承關係能夠跨包越界。

2.自定義異常:咱們能夠從Exception類或它的後代類派生一個新類,定義本身的異常,選擇什麼類做爲父類由新異常所表明的問題和條件決定。

3.可檢測異常和不可檢測異常:Java中惟一不能檢測的異常是RuntimeException類的對象或該類的後代類服務對象。全部其餘的異常都是可檢測異常。
可檢測異常:必須由方法捕獲,或者必須在可能拋出或傳遞異常方法的throws子句中列出來。
在方法定義的聲明頭中加throws子句就明確了該方法在異常發生時將拋出異常或者傳遞異常。main方法之因此須要throws子句,是由於它所拋出的異常類由由Exception類派生,從而使得它的子類是一個可檢測異常。
不可檢測異常:無需throws子句。

  • I/O(輸入/輸出)異常:

1.標準I/O流有三種:

2. 標準I/O流
System.in 標準輸入流
System.out 標準輸出流
System.err 標準錯誤流(輸出錯誤信息)

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

  • 問題1:對自定義異常和java.lang包中定義的異常不太區分,不知道有什麼區別?
  • 問題1解決方案:在 Java中你能夠自定義異常。編寫本身的異常類時須要記住下面的幾點。
    全部異常都必須是 Throwable 的子類。若是但願寫一個檢查性異常類,則須要繼承 Exception 類。若是你想寫一個運行時異常類,那麼須要繼承 RuntimeException 類
  • 問題2:字節流和字符流究竟是什麼?爲何在I/O異常這節提到了?定義在java.io包中的那麼多方法都怎麼系統的理解?
  • 問題2解決方案:區別:實際上字節流在操做時自己不會用到緩衝區(內存),是文件自己直接操做的,而字符流在操做時使用了緩衝區,經過緩衝區再操做文件,程序運行後會發現文件中沒有任何內容,這是由於字符流操做時使用了緩衝區,而在關閉字符流時會強制性地將緩衝區中的內容進行輸出,可是若是程序沒有關閉,則緩衝區中的內容是沒法輸出的,因此得出結論:字符流使用了緩衝區,而字節流沒有使用緩衝區。在java.io包中操做文件內容的主要有兩大類:字節流、字符流,兩類都分爲輸入和輸出操做。在字節流中輸出數據主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入流主要使用Reader類完成。(這四個都是抽象類)。

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

  • 問題1:在作課堂實踐的時候,write沒法把計算結果寫入文件
  • 問題1解決方案:另外創一個toString方法,把int返回爲String類型會極大帶來方便。

    代碼託管

上週考試錯題總結

  • 問題1:Inheritance through an extended (derived) class supports which of the following concepts?
    A . interfaces
    B . modulary
    C . information hiding
    D . code reuse
    E . correctness
    解析:當繼承一個已有類時,新類沒必要從新實現任何繼承的方法或實例數據,從而爲程序員節省了一項工做,提升了效率。所以,代碼重用是一種重用其餘人的代碼的能力,它能夠爲咱們的須要擴展它。

Java繼承是使用已存在的類的定義做爲基礎創建新類的技術,新類的定義能夠增長新的數據或新的功能,也能夠用父類的功能,但不能選擇性地繼承父類。這種技術使得複用之前的代碼很是容易,可以大大縮短開發週期,下降開發費用。

  • 問題2:Which of the following is an example of multiple inheritance?
    A . A computer can be a mainframe or a PC
    B . A PC can be a desktop or a laptop
    C . A laptop is both a PC and a portable device
    D . A portable device is a lightweight device
    E . Macintosh and IBM PC are both types of PCs
    解析:多繼承意味着一個新的派生類繼承了不止一個父類。在上面列出的那些電腦中,一臺筆記本電腦從我的電腦和便攜設備上繼承了一些屬性,所以這屬於多繼承。A、B和E的答案都是單繼承的例子,其中一個類至少有兩個子類(在A中,計算機有主機和PC機;在B中,PC機有桌面和筆記本電腦,在E,PC機有Macintosh機和IBM 我的計算機),D表示一個類的一個屬性。當時誤選D項,覺得成其餘都是屬於多繼承。
  • 問題3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as
    A . protected
    B . derivable
    C . cloneable
    D . polymorphic
    E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
    解析:一個被聲明爲一個類的對象能夠引用該類的子類,這種方法是被稱做爲多態,這是在第十章中的內容,一個父類的對象是能夠指向任何一個子類的一個對象,這種就是由多態所引發的。

多態是同一個行爲具備多個不一樣表現形式或形態的能力。多態下容許將子類類型的指針賦值給父類類型的指針。

  • 問題4:In order to determine the type that a polymorphic variable refers to, the decision is made
    A . by the programmer at the time the program is written
    B . by the compiler at compile time
    C . by the operating system when the program is loaded into memory
    D . by the Java run-time environment at run time
    E . by the user at run time
    解析:這道題目是在問是在什麼階段肯定多態變量所引用的類型,對於多數狀況下的這種請求,這種綁定是發生在編譯階段,可是對於多態性引用,這種綁定要延遲到程序運行才能執行,而且要綁定的方法取決於當時引用變量所引用的對象,這種被延遲的請求事件被稱爲後綁定或動態綁定

  • 問題5:Which of the following is not true of the RuntimeExceptions class?
    A .All RuntimeExceptions throw checked exceptions
    B .All RuntimeExceptions are Throwable objects
    C .RuntimeException has child classes ArithmeticException and NullPointerException
    D .RuntimeException objects are not Error objects
    E .All of the above are true
    分析:運行時異常是可拋出的對象,並非錯誤類的一部分,而兩種類型的runtimeexception是算術異常和NullPointerException。不屬於運行時異常的異常包括各類檢查異常,但運行時異常不被檢查異常。
  • 問題6:The term "exception propagation" means
    A .an exception is caught by the first catch clause
    B .an exception not caught by the first catch clause is caught by an outer (enclosing) catch clause
    C .exceptions are caught, sequentially, by catch clauses in the current try block
    D .exceptions always are caught by the outermost try block
    E .none of the above

    分析:異常傳播意味着一個異常被匹配的catch子句在當前try塊級別,若是沒有匹配,而後在下一個封閉try塊級別,等等,直到異常已經被匹配的條款或異常的主程序和被Java虛擬機。
  • 問題7:In order to define a keyboard input object, keyboard, you could use the instruction:
    BufferedReader keyboard = new BufferedReader(System.in);
    A .true
    B .false

    分析:一個BufferedReader對象必須用Reader對象構建。系統。in是一個輸入流對象。爲了使用上述定義,必須將BufferedReader構造函數中的對象更改成(新的InputStreamReader(System.in))。一份法律聲明。

結對及互評

  • 博客中值得學習的或問題:
    • 學習深入,本身有方法
    • 代碼中值得學習的或問題:
    • 使用繼承減小代碼的重複編寫
    • 基於評分標準,我給本博客打分:100分。得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 一個問題加1分
    • 代碼調試中的問題和解決過程, 一個問題加1分
    • 排版精美的加一分
    • 代碼超過300行(加2分}
    • 代碼Commit Message規範的加1分
    • 有動手寫新代碼的加1分
    • 結對學習狀況真實可信的加1分

點評過的同窗博客和代碼

  • 本週結對學習狀況
  • 20182309
    • 結對學習內容

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第五週 1350/4035 2/11 24/157

參考資料

相關文章
相關標籤/搜索