1.什麼是異常:非正常狀況或錯誤的對象,由程序或運行時環境拋出,可根據須要進行捕獲處理
2.錯誤:相似異常,但不可恢復且必須捕獲處理
3.try-catch:用於捕獲可能出現的異常語句塊;try可關聯多個catch,catch爲異常處理器,用於匹配可能的異常
4.finally子句:保證必定執行某段代碼(能夠不寫)
5.爲何要捕獲異常:沒有捕獲的異常會使程序非正常停止,捕獲異常但是程序跳過可能異常語句,繼續運行程序
6.異常傳遞:此級沒有捕獲異常,會返回向上一級的調用方法,直到被捕獲。
7.自定義異常:從Exception類或其後代類中派生的,選擇一個做爲父類,新異常由所表明的問題和條件決定
8.I/O異常:html
1.自我理解:一種不是循環的循環
2.應用:迷宮,漢諾塔問題java
問題1:書上的重點概念「異常拋出時所輸出的信息,提供了方法調用堆棧蹤影」,然而我並不知道什麼是堆棧蹤影。。。git
問題1解決過程:居然百度不到概念。。。綜合理解一下,大概是異常拋出時,IDEA提示錯誤的那幾行紅字:指明異常發生在何處算法
【參考資料】:
辛勤的代碼工
既然選擇了遠方 便只顧風雨兼程編程
問題2:無心中看到一個問題:「是否能夠在一個catch代碼塊裏捕獲多個異常」,答案是能夠的,那若是是這樣,還寫那麼多句catch幹嗎,都寫一個裏面不就行了?數組
問題2解決過程:嗯,這是Java自己的升級,在Java7裏,catch代碼塊獲得了升級,用以在單個catch塊中處理多個異常。若是你要捕獲多個異常而且它們包含類似的代碼,使用這一特性將會減小代碼重複度函數
【參考資料】:
JAVA 7新特性-在單個catch代碼塊中捕獲多個異常
風同樣的碼農學習
問題3:由於在寫習題PP12.1的時候,用遞歸出了一點問題(已經記錄在博客裏面),結合書上的自測題,瞭解一下「何時應避免使用遞歸」以及「遞歸與循環的比較」.net
問題3解決過程:
1.遞歸與循環是兩種不一樣的解決問題的典型思路。
2.遞歸算法:
優勢:代碼簡潔、清晰,而且容易驗證正確性。
缺點:它的運行須要較屢次數的函數調用,若是調用層數比較深,須要增長額外的堆棧處理,好比參數傳遞須要壓棧等操做,會對執行效率有必定影響。
3.循環算法:
優勢:速度快,結構簡單。
缺點:並不能解決全部的問題。
4.當使用迭代法更簡單時,避免使用遞歸,以免屢次調用方法的開銷設計
【參考資料】:
ggxxkkll的專欄
遞歸這東西是否是儘可能避免使用?
百度知道
什麼時候使用遞歸
問題1:PP11.1。我老是以爲書上的問題表述不是很清楚:好比,「在程序的main方法中讀取輸入的字符串,直到輸入「DONE」爲止。若是輸入的字符串多於20個字符,則拋出異常」。總以爲不是很理解意思:是要輸入一長串的字符串,讀到DONE就中止讀入,而後計算字符串是否超過20個嗎?仍是要屢次輸入字符串,直到輸入DONE爲止,而後累計輸入的字符個數是否多餘20個;
問題1解決過程:
綜合以上想法,大概是要屢次輸入,判斷每一次輸入的字符串是否超過20個。
1.代碼調試過程當中發現的第一個問題:在用到字符串判斷是否相等的時候,只能用方法. equals
才能判斷,用「 == 或者 != 」則不行。
2.題目只要求判斷每次輸入的字符串是否超過20個,並未要求存儲字符串,而我多此一舉地加了上去,反而致使不能輸入任意次了(由於數組須要提早申請內存),現已改正。
3.結合PP11.2,要求的是捕獲異常,並輸出一條適當信息並繼續處理後面的字符串,代碼如圖:
我輸出的結果是:當輸入的字符串字符數超過20個時,會輸出一條信息,包含異常的字符串,並繼續輸入直到DONE。
這裏遇到的問題是寫好了上圖中的try-catch語句以後,老是會標紅說try語句裏的異常不存在,一頭霧水,反覆對照書上的代碼,並未發現錯誤。後來操做了幾個地方,可是無關痛癢,又嘗試運行了一次,居然成功了。最後得出的結論是IDEA沒有及時去掉標紅吧。
問題2:PP12.1。按道理來講,這道題應該很簡單,我寫的代碼應該是對的,代碼如圖:
如圖,我輸入了「wew」,這是一個迴文,但運行出現了問題,提示是遞歸的方法有問題
問題2解決方案:首先要解釋一下代碼。個人遞歸方法,用了兩個參數n,m。n爲0,表明字符串的索引值爲0處的字符;m爲最後一位的字符索引值。這樣在遞歸方法裏只要比較一下n和m處的字符是否相等就OK了,而後將n+1,m-1,繼續比較,層層遞歸,直到不同的地方輸出不是迴文,不然的話到n>m的時候直接輸出是迴文即達到判斷要求。
而後這裏有一個問題是:遞歸的方法裏須要提早定義字符串,才能繼續比較。可是這個字符串是要用戶輸入的,而若是在遞歸方法裏寫用戶交互的方法的話,會致使每一次調用遞歸方法的時候都要再輸一次字符串。如圖:
可是遞歸方法與main方法裏的字符串仍是不能互通,雖然把遞歸方法寫成一個類,而後再繼承它應該能夠解決,可是我不大想這樣作,總以爲很麻煩。
後來,在main方法外面聲明瞭一個str變量,在main和遞歸方法裏都能調用,如圖:
這樣算是解決了問題。
還有就是那個getstr的方法,並無用到,我一開始覺得還要在遞歸方法裏get一下才能獲得那個輸入的字符串,現已刪掉。
錯題1:
錯題1解析:沒有關聯捕獲語句的try語句中沒有代碼,即引用某個未知的類,使用一個參數,或者處理新內存的生成,將拋出NullPointerException
錯題2:
錯題2解析:這兩個異常都是RuntimeException的子元素,它自己就是異常的子元素,書上有寫到,是我看的不夠仔細
錯題3:
錯題3解析:書上原話:「Java中惟一的不可檢測異常是RuntimeException類的對象或該類的後代類對象。」運行時異常不被檢查異常。
錯題4:
錯題4解析:若是一個異常的發生處沒有捕獲和處理該異常,控制將當即返回到產生該異常的方法的上一級調用方法,若是仍未捕獲將繼續向上一級傳遞,直到異常被捕獲。
錯題5:
錯題5解析:這題是蒙的,真的不會。照着機翻的理解一下:掃描器類經過擁有本身的catch (IOException…)catch語句,致使一個IOException的掃描器類中的任何代碼都被掃描器類捕獲,這樣可能使用掃描器類的類就沒必要處理這個被檢查的異常。
錯題6:
錯題6解析:這個書上真沒有,百度到的東西一大堆,並無過多的涉及到本題選項所說的東西:PrintWriter類是一個Writer類,而PrintStream類是一個流類。主要的區別是PrintWriter是專門爲文件而設計的,所以有錯誤檢查機制,而不是PrintStream的一部分。
錯題7:
錯題7解析:我明明記得曾經在哪裏看到過try語句能夠不用catch的,可是如今找不到了。。。當時我還覺得這題絕對會對的
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 309/309 | 1/1 | 20/20 | |
第二週 | 269/578 | 1/2 | 18/38 | |
第三週 | 236/776 | 1/3 | 22/60 | |
第四周 | 507/1283 | 2/5 | 30/90 | |
第五週 | 631/1914 | 1/6 | 30/120 | |
第六週 | 529/2443 | 1/7 | 25/145 | |
第七週 | 515/2958 | 1/8 | 25/170 | |
第八週 | 1128/4086 | 2/10 | 50/220 | |
第八週 | 1241/5327 | 1/11 | 15/235 |