20172327 2017-2018-2 《程序設計與數據結構》第十周學習總結
學號 2017-2018-2 《程序設計與數據結構》第十周學習總結
教材學習內容總結
第11章 異常
- 異常處理: |
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 |標準錯誤流(輸出錯誤信息)|
第12章 遞歸
- 遞歸思想: |
1.遞歸是一種方法能夠調用自己的編程技術,掌握遞歸編程的關鍵是能以遞歸的思想考慮問題。
- 無窮遞歸和有窮遞歸: |
1.只有遞歸定義部分就變成了無窮遞歸,所以在任何遞歸定義中必須要有成為基本情況的非遞歸定義部分,才能使遞歸最終結束。
- 遞歸編程: |
1.每一次對方法的遞歸調用,都會創建新的局部變量與參數。
2.每次遞歸都需要新增內存空間,因此無窮遞歸常產生運行時錯誤,報告內存耗盡的錯誤信息。
- 直接遞歸和間接遞歸: |
1.方法調用自己的遞歸,稱為直接遞歸;如果一個方法調用其他方法,最終導致再次調用自己,則稱為間接遞歸。
- 遞歸應用: |
1.迷宮問題和漢諾塔問題。
教材學習中的問題和解決過程
- 問題1:遞歸與叠代的關系與區別?
- 問題1解決方案:
1: 使用遞歸要註意的有兩點:
1)遞歸就是在過程或函數裏面調用自身; 2)在使用遞歸時,必須有一個明確的遞歸結束條件,稱為遞歸出口. |
2:遞歸分為兩個階段:
1)遞推:把復雜的問題的求解推到比原問題簡單一些的問題的求解; 2)回歸:當獲得最簡單的情況後,逐步返回,依次得到復雜的解. |
叠代:利用變量的原值推算出變量的一個新值.如果遞歸是自己調用自己的話,叠代就是A不停的調用B.
遞歸中一定有叠代,但是叠代中不一定有遞歸,大部分可以相互轉換.能用叠代的不用遞歸,遞歸調用函數,浪費空間,並且遞歸太深容易造成堆棧的溢出. |
- 問題2:字節流和字符流到底是什麽?為什麽在I/O異常這節提到了?定義在java.io包中的那麽多方法都怎麽系統的理解?
- 問題2解決方案:
區別 實際上字節流在操作時本身不會用到緩沖區(內存),是文件本身直接操作的,而字符流在操作時使用了緩沖區,通過緩沖區再操作文件![](https://images2018.cnblogs.com/blog/1333119/201805/1333119-20180517191455594-1618495632.jpg)
|
在java.io包中操作文件內容的主要有兩大類:字節流、字符流,兩類都分為輸入和輸出操作。在字節流中輸出數據主要是使用OutputStream完成,輸入使的是InputStream,在字符流中輸出主要是使用Writer類完成,輸入流主要使用Reader類完成。(這四個都是抽象類)。 |
上周考試錯題總結
- 第一題: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。不屬於運行時異常的異常包括各種檢查異常,但運行時異常不被檢查異常。
- 第二題: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虛擬機。
- 第三題: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))。一份法律聲明。
代碼托管
點評過的同學博客和代碼
- 本周結對學習情況
- [20172317]
20172320
- 結對學習內容
- 教材第11,12章
- 閱讀11.1-11.6、12.1-12.3章節
- 完成課後自測題,並參考答案學習
- 完成課後練習題
完成程序設計項目:至少完成PP11.1、PP11.2、PP12.1、PP12.9
其他(感悟、思考等,可選)
概念很多,嘚仔細看,有很多細節,和前面的章節聯系緊密。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 95/95 | 1/1 | 18/18 | |
第二周 | 515/620 | 1/2 | 22/40 | |
第三周 | 290/910 | 1/3 | 20/60 | |
第四周 | 1741/2651 | 1/4 | 30/84 | |
第五周 | 579/3230 | 1/5 | 20/104 | |
第六周 | 599/3829 | 2/8 | 18/122 | |
第七周 | 732/4561 | 2/9 | 24/146 | |
第八周 | 1354/5915 | 2/11 | 30/176 | |
第九周 | 不知為啥,代碼無緣無故少了300行,我現在很迷 |
參考:軟件工程軟件的估計為什麽這麽難,軟件工程 估計方法
計劃學習時間:30小時
實際學習時間:30小時
改進情況:無
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料
《Java程序設計與數據結構教程(第二版)》
《Java程序設計與數據結構教程(第二版)》學習指導
20172327 2017-2018-2 《程序設計與數據結構》第十周學習總結