學號20172328《程序設計與數據結構》第九周學習總結

學號20172328《程序設計與數據結構》第九周學習總結

教材學習內容總結(異常和遞歸)

第11章:異常html

  • 1.【異常處理】:
    • 一個異常:是一個定義非正式狀況或錯誤的對象,由程序或者運行時環境拋出,能夠根據須要捕獲和處理。
    • 錯誤:錯誤相似於異常,可是錯誤表明不可恢復的問題而且必須捕獲處理。
  • 2.【處理異常的三種方法】:①根本不處理異常②當異常發生時處理異常③在程序的某個位置集中處理異常。
  • 3.【未捕獲的異常】:若是程序中不處理異常,則程序將非正常的終止運行,併產生關於描述在何處發生什麼異常的信息。第一行異常信息代表拋出的是什麼異常,並提供了拋出該異常的緣由。其餘行的信息是方法調用蹤影信息,指明異常在何處發生。經過調用被拋出異常類的方法,也能夠得到調用堆棧蹤影。getMessage方法返回一個字符串,解釋異常拋出的緣由;printStackTrace方法輸出調用堆棧蹤影信息。
  • 4.【try-catch語句】:
    • try-catch語句用來標誌可能拋出異常的語句塊,catch子句跟在try語句塊後,用於定義如何處理一種指定的異常。
    try
     {
        語句塊
     }
     catch(類型名  標識符)
     {
          語句塊    
     }
    • 執行try語句塊時,若是沒有異常拋出,將繼續執行try-catch結構語句後的語句,這是正常狀況執行流程。
    • 若是try語句塊執行的任何位置拋出了異常,而且存在catch子句,則控制當即轉移到相應的catch子句處理異常,即控制轉移到第一個與拋出異常相匹配的catch子句執行,執行完以後,跳出try-catch語句結構繼續執行。
  • 5.【finally子句】:有點像switch語句中的default語句,不管怎麼樣,這個語句必定會執行。若是有finally子句,那必定要排在catch子句後,除非沒有catch子句。不管try語句塊正常退出或因爲拋出異常而退出,都將執行finally子句,所以能夠利用finally子句管理資源或保證必定執行某段代碼。
  • 6.【異常的傳遞】:
    • 若是在上級調用方法中仍然沒有捕獲和處理下級傳上來的異常,則控制將返回到上級調用方法的更上一級調用方法,這個過程叫作傳遞異常。異常將一直傳遞下去,直到被捕獲和處理,或直到異常傳遞出main方法,這時將終止程序的運行併產生錯誤信息。
    • 若是在一個異常的發生處沒有處理和捕獲異常,控制將當即返回產生該異常的方法的上一級調用方法,所以能夠將程序設計爲在上級調用方法(外層調用)中捕獲和處理異常。
  • 7.【異常類參次結構】:
  • 定義各類的類由繼承關係關聯在一塊兒。
    Throwable是Error類和Exception類的父類。許多異常的類型都是由Exception
    類派生,而在這些類中也有許多子類。
    雖然這些高層的類定義在java.lang包裏,但定義各類異常的子類卻分散定義在其餘幾個包中,繼承關係能夠跨包越界。
  • 【自定義異常】:咱們能夠從Exception類或它的後代類派生一個新類,定義本身的異常,選擇什麼類做爲父類由新異常所表明的問題和條件決定。
  • 【可檢測異常和不可檢測異常】:Java中惟一不能檢測的異常是RuntimeException類的對象或該類的後代類服務對象。全部其餘的異常都是可檢測異常。
    ❀可檢測異常:必須由方法捕獲,或者必須在可能拋出或傳遞異常方法的throws子句中列出來。
    ♤ 在方法定義的聲明頭中加throws子句就明確了該方法在異常發生時將拋出異常或者傳遞異常。main方法之因此須要throws子句,是由於它所拋出的異常類由由Exception類派生,從而使得它的子類是一個可檢測異常。
    ❀不可檢測異常:無需throws子句。
  • 8.【 I/O(輸入/輸出)異常】:
  • 標準I/O流有三種:

















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

  • 書本11.7的例子教咱們建立文件和寫數據文件。可是更詳細的仍是老師在課堂上給咱們展現的例子。我複製好上傳到碼雲上了,若是你須要能夠去看看。Here you are
  • [學長提問後添加的知識點](Java異常處理中throw和throws的區別):
    ♤♤♤throw是語句拋出一個異常。 語法:throw (異常對象);
    ♧♧♧throws是方法可能拋出異常的聲明。(用在聲明方法時,表示該方法可能要拋出異常)。語法:(修飾符)(方法名)([參數列表])[throws(異常類)]{......}java

    throw與throws的比較:
    一、throws出如今方法函數頭;而throw出如今函數體。
    二、throws表示出現異常的一種可能性,並不必定會發生這些異常;throw則是拋出了異常,執行throw則必定拋出了某種異常對象。
    三、二者都是消極處理異常的方式(這裏的消極並非說這種方式很差),只是拋出或者可能拋出異常,可是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。
    好的編程習慣:
    1.在寫程序時,對可能會出現異常的部分一般要用try{...}catch{...}去捕捉它並對它進行處理;
    2.用try{...}catch{...}捕捉了異常以後必定要對在catch{...}中對其進行處理,那怕是最簡單的一句輸出語句,或棧輸入e.printStackTrace();
    3.若是是捕捉IO輸入輸出流中的異常,必定要在try{...}catch{...}後加finally{...}把輸入輸出流關閉;
    4.若是在函數體內用throw拋出了某種異常,最好要在函數名中加throws拋異常聲明,而後交給調用它的上層函數進行處理。git

第12章:遞歸程序員

  • 1.【遞歸思想】:遞歸是一種方法可以調用本身的編程技術,掌握遞歸編程的關鍵是能以遞歸的思想考慮問題。
  • 2.【無窮遞歸和有窮遞歸】:只有遞歸定義部分就變成了無窮遞歸,因此在任何遞歸定義中必需要有成爲基本狀況的非遞歸定義部分,才能使遞歸最終結束。
  • 3.【遞歸編程】:每一次對方法的遞歸調用,都會建立新的局部變量與參數。每次遞歸都須要新增內存空間,所以無窮遞歸常產生運行時錯誤,報告內存耗盡的錯誤信息。
  • 4.【直接遞歸和間接遞歸】:方法調用本身的遞歸,稱爲直接遞歸;若是一個方法調用其餘方法,最終致使再次調用本身,則稱爲間接遞歸。
  • 5.【遞歸應用】:迷宮問題和漢諾塔問題。編程

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

  • 問題1:如何處理異常中的其中一個方法時根本不處理異常?這,這,這不是自相矛盾嘛
  • 1.(〃'▽'〃)本題解答:書上說會對這三種解決異常的方法進行逐個討論,結果我也只找到了其餘兩種的討論,後來我考慮了一下,當不處理異常時,程序直接中斷報錯,這樣來提示本身的錯誤♤♤而後回去程序裏面改正,這估計就是不處理異常的作法吧。
  • 問題2:當時在閱讀課本上的代碼例子的時候看到一個方法code.substring(3,7)當時在大腦中百度了一下,結果可能網很差,不反應。
  • 2.(〃'▽'〃)本題解答:翻書本解決的
  • ,書本76頁第九條。數組

    String subString(int offset,int endindex)
    返回字符串中從索引offset開始,到endIndex-1處的字串。數據結構

  • 問題3:剛看完書後對自定義異常和java.lang包中定義的異常不太區分,不知道有什麼區別,在作pp11.1時專門查了一下。
  • 3.(〃'▽'〃)本題解答:
  • 在 Java中你能夠自定義異常。編寫本身的異常類時須要記住下面的幾點。ide

  • 全部異常都必須是 Throwable 的子類。
  • 若是但願寫一個檢查性異常類,則須要繼承 Exception 類。
  • 若是你想寫一個運行時異常類,那麼須要繼承 RuntimeException 類。函數

最後給你一張圖,(* ̄︶ ̄)
學習

  • 問題4:字節流和字符流究竟是什麼?爲何在I/O異常這節提到了?定義在java.io包中的那麼多方法都怎麼系統的理解?
  • 4.(〃'▽'〃)本題解答:
    • 在java.io包中操做文件內容的主要有兩大類:字節流、字符流,兩類都分爲輸入和輸出操做。在字節流中輸出數據主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入流主要使用Reader類完成。(這四個都是抽象類)。
    • InputStream,OutputStream,Reader,Writer
      • InputStream 和OutputStream,兩個是爲字節流設計的,主要用來處理字節或二進制對象,
      • Reader和 Writer.兩個是爲字符流(一個字符佔兩個字節)設計的,主要用來處理字符或字符串.
    • 字節流可用於任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串; 2. 字節流提供了處理任何類型的IO操做的功能,但它不能直接處理Unicode字符,而字符流就能夠。

      代碼實踐中的問題和解決

  • 問題1:在我作pp11.2時個人catch語句中不能引用我自定義的異常類和變量,我很奇怪,查了資料catch後面括號中應該是要填異常類和變量,可是仍是報錯。提示也只是讓我刪掉try-catch語句,那我就是要寫這個啊,讓我刪了,心塞

  • 1.(〃'▽'〃)本題解答:思考好久後,我仍是請教了助教,學長告訴我「你是沒有理解程序運行邏輯」。這是爲何?就是由於我沒有拋出個人異常類的異常(就是說沒有throw語句)?是的!自定義的異常類須要先拋出再去解決,不會影響程序中斷。

  • 問題2:在作pp12.9時思路不正確,代碼沒有報錯,但在運行時沒法實現。

  • 2.(〃'▽'〃)本題解答:以前在草稿紙上將三角陣的座標一個一個列出來,而後想從索引和座標的關係着手去作,當時的問題就是直接沒法輸出。我反覆看了好多遍,發現個人遞歸方法傳入的是兩個個int型的數字分別表明橫縱座標值,返回的倒是數值,這樣的不匹配怎麼可能運行成功呢。因此我又開始讀題,題目表示每一行的數值須要存在數組裏面,若是要使用遞歸的話最方便的就是讓其返回一個數組,而後直接在個人main函數下實現。作的時候又卡殼了,我在行數n>3的地方用了索引,而後就出現了下圖的奇怪輸出,左右兩邊的數字竟然是0;

    而後我就想,不是遞歸回去了嗎?那我在前面的非遞歸語句中已經說明了是1的呀。可是好像又沒有給最後一個數字定值。而後我就加了兩個語句在個人else語句塊裏面pascal[0]=1; pascal[n-1]=1;這樣作完以後運行是能夠的。

代碼託管

上週考試錯題總結

  • 問題1:Polymorphism is achieved by(多態性是經過什麼實現的呢?)
    A . overloading(重載)
    B . overriding(重寫)
    C . embedding(嵌入)
    D . abstraction(抽象)
    E . encapsulation(封裝)
  • 1.(〃'▽'〃)本題解答:本題答案是B。當時選了D。❀重載只是爲具備不一樣參數列表的方法提供了備選方案。❀重寫提供了多態性,由於適當的方法是根據當前被引用的對象而調用的。❀嵌入是類中包含的類。❀抽象與多態沒有任何關係。封裝是使用可見性修飾符(公共的、私有的、受保護的)實現的。因此要選擇重寫。
  • 問題2:Which statement is completely true?(哪句話是徹底正確的?)
    A . Java upcasts automatically, but you must explicitly downcast(java中向上的類型轉換是自動的,可是向下的類型轉換必須明確說明)
    B . Java downcasts automatically, but you must explicitly upcast(java中向下的類型轉換是自動的,可是向上的類型轉換必須明確說明)
    C . Java expects the user to explicitly upcast and downcast(java中用戶向上或者向下轉型時都須要明確說明)
    D . Java will both upcast and downcast automatically(java中用戶向上或者向下轉型時都是自動的)
    E . The rules for upcasting and downcasting depend upon whether classes are declared public, protected, or private(向上轉型和向下轉型的規則依賴因而否該類被聲明爲public、protected、private)
  • 2.(〃'▽'〃)本題解答:j本題答案選擇A,我選擇了E。ava中向上轉型是自動的,它是Java支持的單一繼承結構的產物。相比之下,向下轉換必須由程序員顯式地完成。Java只在一個方向上自動轉換。向上轉型和向下轉型的規則並不依賴於任何方式包括使用的可見性修飾符。(本題我查找了資料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(以上都不對)
  • 3.(〃'▽'〃)本題解答:答案選A,我選了B。雖然繼承和接口支持多態,但只有在有後期綁定時纔會這樣作。可是,重載是多態性的另外一種體現形式,多個主體,只要程序使用重載,多態就在使用中。
  • 問題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.(System.out.println()方法可以處理如此普遍的對象,並正確地打印它們,這是體現多態特性的一個例子。)
    A.ture
    B.false
  • 4.(〃'▽'〃)本題解答:答案是A。因爲println()本質上是高度多態的,因此它可以正確地打印各類預約義的(庫)和內置(原始)數據。

講一個頗有趣的現象,無論題目多少,已經連續好多周20分哈哈哈,即便都是20,也有錯四、七、八、10個的。

結對及互評

-20172301
-20172304

點評模板:

  • 博客中值得學習的或問題:
    • 20172301:在總結學習內容方面,我以爲郭愷同窗更擅長表達章節重點所在。排版一直美觀,可是此次的博客總體質量(在知識點對比詳解之類)不如前不少次那樣那樣好,多是這兩章內容對他說不是很難理解吧。
    • 20172304:博客簡潔美觀,內容有點少,其實段志軒同窗是務實型的,可能在編程方面優於總結博客方面吧。
  • 代碼中值得學習的或問題:
    • 學習編程過程當中我發現不少知識點本身不熟悉,不少問題有思路但不會實踐於項目中。
    • 有時候有點苦惱,容易放棄。仍是要向隊友學習,不惜時間,認真鑽研,敢於深究。

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

這兩天在刷朋友圈和空間的時候忽然看到了一個詞:積極廢人

指那些很愛給本身立Flag,可是永遠作不到的人。這類人心態積極向上、行動上宛如廢人通常,他們每每會間歇性享樂後恐慌,時常爲本身的懶惰自責。

這個詞真的很適合我,我就是屬於心有浩瀚,卻老是被本身的藉口打斷的人。

我但願無論是在java這門課程的學習上,仍是個人其餘事情上都能實現自我控制感。這不是要我本身作到多好,我只想有本身的節奏有本身方向有本身的車轍。就像我如今選擇儘可能不熬夜,每週給本身必定的放鬆的時間,該投入的時候竭盡全力。

最喜歡給父母打電話,每當我以爲事情繁多,前路暗淡,我爸媽總說:你覺得最差的結果就是你一事無成回到咱們身邊,可是咱們可能認爲那是最好的結果;你盡力就好,咱們只要你健康快樂。

可能每一個人要走的路都不同,每一個階段咱們碰見不一樣的人,學習不一樣的科目,去到不一樣的地方,看到不一樣的風景,珍惜不一樣的對本身珍貴的東西。因此,我會好好珍惜如今,畢竟18歲不長,於我而言還剩短短几月,只有那麼兩個季度,還有那些密密麻麻,不曾相會的事情。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 100/100 1/1 15/15
第二週 377/477 1/2 20/35
第三週 280/757 2/4 22/57
第四周 973/1730 1/5 35/92
第五週 1000/2730 1/6 40/132
第六週 729 /3459 1/7 40/172
第七週 660/4119 2/9 30/192
第八週 1417/5536 3/12 40/232
第九周 1139/6675 2/14 60/292

參考資料

相關文章
相關標籤/搜索