學號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章:遞歸程序員
最後給你一張圖,(* ̄︶ ̄)
學習
- 問題4:字節流和字符流究竟是什麼?爲何在I/O異常這節提到了?定義在java.io包中的那麼多方法都怎麼系統的理解?
- 4.(〃'▽'〃)本題解答:
問題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 |
參考資料